Lehet, hogy a fény-homokóra elsőre túl meredek volt? Ne aggódj! Most lépésről lépésre mindent végigpróbálunk, okés?
Villogó ledet már nagyon tudunk csinálni! Emlékszel, így nézett ki:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
és ez a panelen a sárga gyári ledet villogtatta.
Próbáljuk meg, hogy villogtasson el egy SOS-t! Azaz három rövid villanás (ez az S betű), majd kis szünet, és három hosszú (ez az O betű), kis szünet, majd megint három rövid (S).
Nos, az három rövid villanás, és egy kis szünet. Ezért átírtam a delay-eket 100ms-re, és mivel egymás után három villanást szeretnék, egymás után másoltam 3x a villantós kóddarabot. Tettem utána egy kis szünetet - merthogy a betűk után szünet kell - egy további delay(200)-al.
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
delay(200);
}
Hm, szóval most már azt mutatja a led, hogy ... ... ... ... ... ugye? (Mármint nem pontokat mutat, hanem ilyen ütemben villog!)
Okés, akkor jöhet az O betű is. Ez ugyanaz, csak éppen 200 ms-ig van bekapcsolva a led, így három hosszabb villanást kapunk:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
// ez lesz az S
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
delay(200);
// ez lesz az O
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(100);
delay(200);
}
Innentől már majommunka az egész: a végére csak újra le kell másolni az S kódját, így egymás után adja elő, hogy ... --- ... azaz SOS.
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
// ez lesz az S
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
delay(200);
// ez lesz az O
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(100);
delay(200);
// ez lesz az S
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
delay(200);
// kicsit várunk a szó végén is
delay(500);
}
Őőő... működni működik. Csak egy kicsit "lábbalhajtós". Túl hosszú. Egyáltalán nem látszik, hogy mi történik, miért van az a sok delay, meg úgy általában.
Ismerkedjünk meg a következő részben pár okos trükkel, amivel ezeket a rondaságokat meg lehet szüntetni!