10-Csináljunk kütyüket!

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?

Az SOS led

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).

Az 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!)

Az O

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);  

}

Az egész SOS

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!

Mit tanultunk ebből?

Amit egymás után írsz egy utasításblokkban, az egymás után végrehajtódik. Ha többször írod le, többször hajtódik végre. Ennyire egyszerű.