Futófény

Ez a fény-effektus nagyon trendi volt a 90-es években. Egyszerűen arról van szó, hogy egymás után kell fellvillantani a ledeket, és emiatt úgy tűnik, mintha a fény "átugrálna" egyikről a másikra.

Ehhez tegyél ledeket a 9,8,7 portra! A programban három dolgot csinálunk: bekapcsoljuk csak a legelső ledet majd várunk, aztán csak a másodikat és várunk, aztán pedig megeszünk egy fagyit... ja nem, de felteszem kitalálod, mi a harmadik lépés.

void setup() {
    pinMode(9, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(7, OUTPUT);
}

void loop() {
    // az első világít
    digitalWrite(9, HIGH); 
    digitalWrite(8, LOW); 
    digitalWrite(7, LOW); 
    delay(500);

    // a második világít
    digitalWrite(9, LOW); 
    digitalWrite(8, HIGH); 
    digitalWrite(7, LOW); 
    delay(500);

    // a harmadik világít
    digitalWrite(9, LOW); 
    digitalWrite(8, LOW); 
    digitalWrite(7, HIGH); 
    delay(500);

}

Hm, ez a progi is működik, de ugye ronda. Lehet, hogy még nem érzed egyből, ha egy progi ronda, pedig egyszerű. Ha a progit hajnal kettőkor másnaposan elolvasva simán megérted, hogy mit csinál, és tudod folytatni, akkor jó. Minden más esetben ronda.

Azok kedvéért akik még nem teljesen érzik magukat nagykorúnak, itt egy jobb definíció: bárhol, ahol a programba megjegyzéseket kell tenni hogy megmutassuk, mit csinál - na ott a program rossz, mert a megjegyzéssel próbáljuk pótolni azt, hogy a program nem "olvasható".

Tehát mit teszünk? Háromra... egy, kettő, FÜGGVÉNY! ja nem, három, és most: Függvény!

const int ON=1;
const int OFF=0;

void setup() {
    pinMode(9, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(7, OUTPUT);
}

void led(byte led0,byte led1,byte led2) {
    digitalWrite(9, led0); 
    digitalWrite(8, led1); 
    digitalWrite(7, led2); 
    delay(500);
}

void loop() {
    led(ON,OFF,OFF);
    led(OFF,ON,OFF);
    led(OFF,OFF,ON);
}

A led() függvény elrejtette a portok kezelését, meg a delay-t is beletettük, így a loop-ban tényleg már csak a lényeg marad!

Én utálom ezeket a HIGH meg LOW konstansokat, mert ugyan technikailag korrektek, hiszen az A-star portját magas meg alacsony állapotba helyezi, de nincs neki "értelme". Senki sem beszél úgy, hogy "most akkor magasba teszem a ledet" (legfeljebb a hegymászók) hanem inkább azt mondjuk: "bekacsolom a ledet".

Hirtelen felindulásból ezért csináltam egy ON meg OFF konstanst a progi elején. (Talán emlékeztek: a HIGH meg a LOW az 1 és a 0-át helyettesítő konstans, amit az Arduinós srácok készítettek kedveskedésből, hogy "egyszerűbbé" tegyék az Arduinós programozást. Nekem akkor is az ON/OFF tetszik jobban - és senki sem akadályoz meg abban, hogy ON/OFF-ot használjunk a proginkba!)

Egy klasszikus vicc

Mindig arra törekszünk, hogy a progi minél egyszerűbb, rövidebb legyen, hogy a "lényege", hogy mit fog csinálni, előbújjon. Sokszor elveszik a lényeg a való életben is, erről szól ez a klasszikus:

Grünnek halüzlete van. Kitesz a kirakatba egy táblát: Ma itt friss hal kapható.

Arra jön Kohn, és megkérdezi:
-Te, holnap nem lesz friss hal?
-De lesz. -mondja Grün, és átfesti a táblát: Itt friss hal kapható.

-Te, van neked más üzleted is?
-Nincs. - mondja Grün, és átfesti a táblát: Friss hal kapható.

-Te, árulsz te romlott halat is?
-Dehogy. - mondja Grün, és átfesti megint: Hal kapható.

-Te, veszel is halat? - kérdi Kohn.
-Nem, csak eladok. - mondja Grün és átfesti a táblát: Hal.

És az, hogy Hal, ugyanazt jelenti, mint az, hogy: Ma itt friss hal kapható. 

Feladat

Készíts oda-vissza futófényt, tehát amikor a fény az egyik végére ér, pattanjon vissza!

Készíts sziporkázó futófényt! Ennek az a trükkje, hogy egy ledet csak rövid ideig (100ms) kell felvillantani, utána 100-200ms ideig pedig egyik led se világítson. Aztán jöhet a következő!

Extra feladat: Készíts közlekedési jelzőlámpát (ha esetleg piros, sárga, és zöld leded is van, még jobb!)

Mit tanultunk ebből?

A kulturáltan megírt program lényegi része magától is "olvasható". Természetesen lehet, hogy ronda függvényeket is kell hozzá csinálni, amik picit rontják az összképet, de sebaj! A ronda függvényeket idővel még jobban el fogjuk tudni rejteni.