HVA - CMD, Ubicomp v1 - Werkcollege week 7 - programmeertips

28
Ubicomp Werkcollege week 7 Programmeren overview

Transcript of HVA - CMD, Ubicomp v1 - Werkcollege week 7 - programmeertips

Ubicomp Werkcollege week 7

Programmeren overview

Arduino programs

● Structuur● Elementen

○ Comments○ Variabelen○ Commando’s○ If Else○ For Loop

● Er zijn nog meer elementen:○ http://arduino.cc/en/Reference○ control structures

Structuur

● Commando’s in groepen● Groepeer met { }● Alleen variabele declaraties mogen buiten

groepen, de rest moet in een groep

● Doe eerst alles in setup() 1x● Doe dan alles in loop() oneindig

Elementen: Comments

● Niet uitvoerbaar, alleen uitleg● Blok /* */

● Line //

/* Blink Turns on an LED on and off for one second repeatedly. This example code is in the public domain. */

// Pin 13 has an LED connected on most Arduino boards.// give it a name:digitalWrite(led, HIGH); // turn the LED on

Elementen: Variabelen

● Getallen met een naam● Dingen onthouden

○ Welke pin is mijn LED?○ Resultaten van berekeningen○ Wat de gebruiker heeft ingevoerd○ Wat je aan het doen was

Elementen: Variabelen

● Type● Naam● Waarde● Eerst declareren:

○ int teller;○ bool antwoordGevonden;

● Dan pas gebruiken:○ teller = 1;○ antwoordGevonden = true;

Elementen: Variabelen

● Type:○ int: meest gebruikt, gehele getallen (1, 2, 3…)○ float: decimale getallen (0.8, 3.14159, 0.001…)○ boolean: true of false

● Minder vaak gebruikte types:○ char: gehele getallen, -128 tot 127○ byte: gehele getallen, 0 tot 255○ long: gehele getallen, “grote” getallen (>32767)○ double: in Arduino hetzelfde als float○ unsigned int, unsinged long: kunnen alleen > 0

Elementen: Variabelen

● Naam moet uniek zijn● Gebruik beperkt met een groep { }● Variabelen buiten een groep zijn over het

hele programma beschikbaar

Elementen: Variabelen1. int buttonPin = 3;2. int ledPin = 13;3.4. void setup()5. {6. int buttonState = digitalRead(buttonPin);7. Serial.begin(9600);8. Serial.print(buttonState);9. }10.11. void loop()12. {13. int buttonState = digitalRead(buttonPin);14. delay(300);15. int state2 = digitalRead(buttonPin);16. if (buttonState != state2) digitalWrite(ledPin, HIGH);17. else digitalWrite(ledPin, LOW);18. }

Elementen: Commando’s

● “doen iets”● http://arduino.cc/en/Reference/● Hebben altijd haakjes ()

○ Serial.begin(9600);○ digitalWrite(ledPin, HIGH);○ noInterrupts();

● Dingen tussen de haakjes heten argumenten of parameters

Elementen: Commando’s

● Kunnen dingen berekenen of opvragen● Dan moet je het resultaat opvangen:

○ int root = sqrt(2);○ int nBytes = Serial.available();○ float phase = sin(3.14159);○ long time = millis();

● Je kan je eigen commando’s maken○ Heet functions of methods○ setup() en loop() zijn eigenlijk ook functions

Elementen: Commando’s

Je eigen method heeft:● data type (zie variabelen, of void voor “niks”)● naam (moet uniek zijn)● parameters

type: naam: parameters:

void{

}

turnLEDsOn

…..stuff…..

(int first, int last)

int{

}

readSonar

….do things…return rangeCm;

( )

Elementen: If Else

● Programma regels worden altijd uitgevoerd● Soms wil je anders reageren

○ Conditionele uitvoering○ Alternatieve paden

● Afhankelijk van iets dat verandert of van tevoren onbekend is○ Anders was het een normaal stuk code○ Afhankelijk van sensoren, tijd, berekeningen

● Groepeer weer met { }

Elementen: If Else

if (vergelijking){

// then do this}

Operator Betekenis

a < b a is kleiner dan b

a <= b a is kleiner of gelijk aan b

a > b a is groter dan b

a >= b a is groter of gelijk aan b

a == b a is hetzelfde als b

a != b a is iets anders dan b

Elementen: If Elsevoid loop(){

long time = millis();if (time > 5000){

digitalWrite(13, HIGH);delay(200);digitalWrite(13, LOW);delay(200);

}else{

digitalWrite(13, LOW);}

}

Elementen: If Elsevoid loop(){

if (millis() > 5000) // Function call in an if statement{

digitalWrite(13, HIGH);delay(200);digitalWrite(13, LOW);delay(200);

}else{

digitalWrite(13, LOW);}

}

Elementen: If Else

● || (or) Als iets moet gebeuren op één van twee voorwaarden:if (rainSensor > 5.3 || tempSensor < 15){

wearCoat();}

● && (and) Als iets alleen mag gebeuren op meerdere voorwaarden:if (dist / walkSpeed > time && dist / runSpeed < time){

run();}

Elements: For Loop

● Herhaling● Elke keer als je code copy/past binnen

hetzelfde programma kun je misschien een loop gebruiken

● Extra handig als het aantal herhalingen afhangt van een variabele

● Je moet altijd een teller maken, maar die hoef je in de loop niet te gebruiken

● Groepeer weer met { }

Elements: For Loop

for (int tel = 0; tel < 3; tel = tel + 1){

Serial.println(“Hoera!”);}

for (int tel = 1; tel <= 10; tel = tel + 1){

Serial.print(tel);Serial.println(“...”);

}Serial.print(“Wie niet weg is is gezien!”);

Elements: For Loop

for (int tel = 0; ; tel = tel + 1)

if (tel < 3){

Serial.println(“Hoera!”);}

Elements: For Loop

● In plaats van tel = tel + 1 zie je vaak:○ tel += 1 (tel 1 of iets ander op bij tel)○ tel++ (tel 1 op bij tel. Kan niets anders dan 1)

● Dit kun je overal gebruiken:○ if (personEntered()) people++;○ if (motorcylePassed()) wheels += 2;○ if (carPassed()) wheels += 4;

Wat is dit?

int oneThing = 4

int anotherThing()

Wat is dit?

int oneThing = 4; (Vergeet de ; niet!)

Variabele, want hij slaat een waarde opint anotherThing(){ (Moet een { } groep bij)

// stuff}

Method, want hij heeft haakjes

Mag dit?

void setup(){

int setup;setup = 2;

}

Mag dit?

void setup(){

int setup;setup = 2;

}

Ja, hoewel setup 2x voorkomt is het altijd duidelijk wanneer je de function en wanneer je de variabele bedoelt.

Wat gaat hier fout? (3 dingen)void setup(){ int led = 13; pinMode(led, OUTPUT); pinMode(potPin, INPUT); int potPin = 12; int led = 13;}

void loop(){ int potPin = 7; digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000);}

Wat gaat hier fout?void setup(){ int led = 13; pinMode(led, OUTPUT); pinMode(potPin, INPUT); int potPin = 12; int led = 13;}

void loop(){ int potPin = 7; digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000);}

➔ Method

➔ led declaratie binnen setup()➔ gebruik led➔ 1. potPin is nog niet gedeclareerd!➔ potPin declaratie binnen setup()➔ 2. led is al gedeclareerd in setup()!

➔ Method

➔ potPin declaratie binnen loop()➔ 3. led is niet in loop() beschikbaar!➔ function call➔ 3. led is niet in loop() beschikbaar!➔ function call

Wat gaat hier fout? (gefixt)int led = 13; ← Variabele moet hier om in beide

functions beschikbaar te zijnvoid setup(){ pinMode(led, OUTPUT); int potPin = 12; ← Mag hier, mag ook vóór setup() pinMode(potPin, INPUT);}

void loop(){ int potPin = 7; digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000);}