Arduino 101 grunderna (6 / 7 steg)
Steg 6: För uttalande
Detta exempel handlar om den för uttalande. Jag kommer att införa syntaxen och hur man använder den. Jag kommer också att använda en skiss direkt från Arduino IDE. Ladda den skiss kallas ForLoopIteration från File/Examples/05.Control.
Du behöver en Arduino, 6 röda lysdioder, 6 220ohms motstånd, en skärbräda och några hoppare ledningar. Ansluta den + ve leda av varje LED till ett motstånd och ansluta dem på stift 2,3,4,5,6, och 7 på Arduino. Anslut sedan – ve leder till GND på Arduino.
Skiss:
int timer = 100; Ju högre siffra, desto långsammare tidpunkten.
void setup() {
för (int thisPin = 2; thisPin < 8; thisPin ++) {/ / använda en ögla att initiera varje stift som en utgång för
pinMode (thisPin, produktionen);
}
}
void loop() {
för (int thisPin = 2; thisPin < 8; thisPin ++) {/ / slinga från lägsta PIN-koden till den högsta:
digitalWrite (thisPin, hög); aktivera PIN-koden:
Delay(timer);
digitalWrite (thisPin, låg); Inaktivera PIN-koden:
}
för (int thisPin = 7; thisPin > = 2; thisPin--) {/ / slinga från det högsta stiftet till lägsta:
digitalWrite (thisPin, hög); aktivera PIN-koden:
Delay(timer);
digitalWrite (thisPin, låg); Inaktivera PIN-koden:
}
}
Låt oss dissekera skissen
Eftersom denna övning handlar om den för uttalande eller slinga, jag börjar genom att förklara hur man använder den.
Syntax:
för (initiering, skick, increment) {
uttalande (s);
}
Den för loop används att upprepa uttalande (s) innesluten i den lockiga parentes ett antal gånger definieras av tillväxten och skick.
Till exempel:
för (int en = 0; en < 10; a ++) {serial.println(a);}
- Initiering: int en = 0, deklarerar en variabel och ge den ett värde.
- Skick: Använd jämförelseoperatorer för att ställa villkoret.
- Ökning: öka/minska värdet för variabeln.
- Uttalande: skriva ut värdet av variabeln en.
I exemplet ovan har vi deklarerar en variabel av typen int kallas "a" och vi ger den värdet 0. Sedan vi ange ett villkor som säger att så länge som "a" är mindre än 10 skriva ut värdet av "en" sedan ökning "a" av 1 använda sammansatta aritmetik.
Här är resultatet:
- "a" = 0, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 1, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 2, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 3, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 4, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 5, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 6, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 7, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 8, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 9, är "en" mindre än 10? Ja; skriva ut "a" sedan lägga till 1 till "a"
- "a" = 10, är "en" mindre än 10? Nej; stoppa slingan
Denna loop körde endast 10 gånger eftersom villkoret inte var uppfyllt när den blev den 11: e tid.
Sammansatta aritmetiska eller sammansatta uppdrag:
Detta är stenografi notation av en aritmetisk formel. De kan lätt ersättas av aritmetiska ekvationen men de ser snyggare i koden:
en ++ samma som en = a + 1 steg ett av + 1
a--samma som en = a-1 minskar en av -1 a += b samma som en = a + b steg en av + b a-= b samma som en = a-b minskar en av – b en * = b samma som en = en * b steg ett av en * b en = b samma som en = en / b minskar en av en / b
Låt oss gå tillbaka till skiss:
int timer = 100;
Deklarera en variabel av typen int kallas timer med värdet 100. Detta kommer att användas som en timer senare skapa den Cylon effekten.
void setup() {
för (int thisPin = 2; thisPin < 8; thisPin ++) {
pinMode (thisPin, produktionen);
}
}
Detta är en mycket intressant användning av den för loop. Vi använder den för slinga för att ställa in pin lägen på Arduino till utgång. Detta fungerar endast om de stift vi använder är i en sekvens vi använder stift 2 till 7. Detta for-loop ersättas följande rader:
- pinMode (2, utgång);
- pinMode (3, OUTPUT);
- pinMode (4, OUTPUT);
- pinMode (5, OUTPUT);
- pinMode (6, OUTPUT);
- pinMode (7, OUTPUT);
void loop() {
för (int thisPin = 2; thisPin < 8; thisPin ++) {
digitalWrite (thisPin, hög);
Delay(timer);
digitalWrite (thisPin, låg);
}
för (int thisPin = 7; thisPin > = 2; thisPin--) {
digitalWrite (thisPin, hög);
Delay(timer);
digitalWrite (thisPin, låg);
}
}
Syftet med denna övning är att slå på lysdioderna en i taget från vänster till höger och sedan från höger till vänster spjällådan en Cylon effekt eller Knight rider effekten.
Vi gör detta genom att skapa två för slingor en gång flytta ljuset från höger till vänster och en annan en att flytta lamporna i motsatt riktning.
för (int thisPin = 2; thisPin < 8; thisPin ++) {
digitalWrite (thisPin, hög);
Delay(timer);
digitalWrite (thisPin, låg);
}
I detta för slinga vi börjar på pin nummer 2 vrida på LED ett i taget tills den når den 7: e stiftet, lysdioderna bo för en fördröjning av "timer" som är 100 millisekunder, detta ger oss illusionen att ljuset reste från höger till vänster.
för (int thisPin = 7; thisPin > = 2; thisPin--) {
digitalWrite (thisPin, hög);
Delay(timer);
digitalWrite (thisPin, låg);
}
I andra for-loop ljuset börjar stift 7 och stannar vid pin2, igen stänga av efter en fördröjning av "timer". Detta avslutar effekterna av det röda ljuset rör sig i båda riktningarna.