HVA - CMD, Ubicomp v1 - Werkcollege week 7 - programmeertips
-
Upload
harm-van-vugt -
Category
Education
-
view
68 -
download
1
Transcript of HVA - CMD, Ubicomp v1 - Werkcollege week 7 - programmeertips
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
● 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; (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;
}
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);}