Közlekedési lámpa:
1.
Tegyen fel 3 ledet (piros, sárga, zöld, 220 Ohm-os ellenállással) és villogtassa őket 1000 ms-os késéssel egymás után.
(A ledek rövid lábát ugyanahhoz a GND-hez lehet kötni, másik lábhoz kell az ellenállás és bekötni őket a digital pinekbe (legyen 10, 9, 8)
Hogy egyszerűbb legyen később kezelni, az elején nevesítjük a három ledet (ne számmal, hanem névvel tudjuk őket állítgatni)
Ezt változók használatával lehet elérni, ugyanígy változó lesz a villogás hossza is.
Bekötés segítség:
A kód:
int keses = 1000; // villogás ideje
int piros= 10;
int sarga= 9;
int zold= 8;
void setup() {
pinMode(piros, OUTPUT);
pinMode(sarga, OUTPUT);
pinMode(zold, OUTPUT);
}
void loop() {
digitalWrite(piros, HIGH); // piros felkapcsolás
delay(keses); // var
digitalWrite(piros, LOW);
digitalWrite(sarga, HIGH);
delay(keses);
digitalWrite(sarga, LOW);
digitalWrite(zold, HIGH);
delay(keses);
digitalWrite(zold, LOW);
}
Írja át a kódot, úgy hogy jelzőlámpaszerűen működjön (ne a keses változót használja most, hanem írja be a számokat):
3 mp zöld
3 mp sárga
5 mp piros
2 mp piros-sárga együtt
elölről újra
2.
Építsünk be egy gyalogátkelőt, ahol gombot lehet megnyomni, és akkor vált a lámpa.
Első lépésnek csak építsünk be egy gombot és ez kapcsolja fel a zöld lámpát (mentsük el az előző fájl, mert most törölni fogunk belőle).
A gombot úgy kell bekötni, hogy az egyik oldalon a két lábához megy 5V és GND 10 Ohmos ellenálláson át, a másik oldalra kötjük be a digital pint (legyen 12-es, nem mint a képen):
De mi most beköthetjük az eddigi lapra így (kék megy 5V-hoz, a másik oldali 12-es pinhez):
A gomb használatához ki kell egészíteni a kódot:
A változókhoz: int gomb= 12;
A setup részbe (ez most nem output, hanem input, hiszen befele jön info): pinMode(gomb, INPUT);
És a loopot írjuk át, úgy, hogy ha lenyomjuk a gombot, akkor legyen zöld, amúgy piros a lámpa:
Látszik, hogy az if (ha) kód után is kapcsos zárójelben van az egész, ami akkor történik, ha igaz az, hogy a gomb be van nyomva (HIGH)
void loop() {
if (digitalRead(gomb) == HIGH){
digitalWrite(piros,LOW);
digitalWrite(zold, HIGH);
delay(1000); wait for 15 seconds
}
digitalWrite(zold,LOW);
digitalWrite(piros,HIGH);
}
Most vissza kéne rakni az előző kódot, de átírni úgy hogy alapvetően legyen zöld a lámpa, de ha megnyomjuk a gombot, akkor menjen végig folyamat (sárga, piros, sárga-piros, újra zöld).
3.
Funkcók használata
A programok nem egy hosszú leírásként szoktak működni, hanem, amit lehet külön leírnunk mint egy funkció, és a főprogramban csak hivatkozunk rá.
Írjuk át a programot ennek megfelelően:
A loopban (fő program): csak azt írjuk pirosra (ekkor sárgára majd pirosra vált a lámpa) vagy zoldre (ekkor a piros mellé meggyullad a sárga, majd csak a zöld). Ezeket külön definiáljuk (VIGYÁZZ A ZOLDRE VÁLTÁS NINCS MEGÍRVA!):
int keses = 1000; // villogás ideje
int piros= 10; //ledek bekötése
int sarga= 9;
int zold= 8;
int gomb= 12;
void setup() {
pinMode(piros, OUTPUT);
pinMode(sarga, OUTPUT);
pinMode(zold, OUTPUT);
pinMode(gomb, INPUT);
}
void loop() {
if (digitalRead(gomb) == HIGH){
delay(1000);
pirosra();
delay(4000);
zoldre();
}
digitalWrite(sarga,LOW);
digitalWrite(piros,LOW);
digitalWrite(zold, HIGH);
}
void pirosra() {
digitalWrite(zold, LOW);
digitalWrite(sarga, HIGH);
delay(3000);
digitalWrite(sarga, LOW);
digitalWrite(piros, HIGH);
}
4. Funkció használata bemeneti értékkel
Meg lehet írni úgy egy funkciót, hogy bevisz értéket és feldolgozza (pl. a pirosra váltásnál a sárga időtartamát mint bemenő adatot):
void loop() {
if (digitalRead(gomb) == HIGH){
delay(1000);
pirosra(3000);
delay(4000);
zoldre();
}
digitalWrite(sarga,LOW);
digitalWrite(piros,LOW);
digitalWrite(zold, HIGH);
}
void pirosra(int ido) {
digitalWrite(zold, LOW);
digitalWrite(sarga, HIGH);
delay(ido);
digitalWrite(sarga, LOW);
digitalWrite(piros, HIGH);
}
Próbálgassa!
(Leírás a funkcikók működéséről: http://www.elektromanoid.hu/progi14.html )
5.
Két lámpás kereszteződés.
Be kell építeni még 3 ledet és összehangolni a lámpákat, mint itt: