Arduino - semafór

Nefunguje mi to, chcem radu ako na to...
IKas07
Príspevky: 1
Dátum registrácie: Piatok, 4. Mája 2018, 22:37

Arduino - semafór

Príspevok od užívateľa IKas07 » Piatok, 4. Mája 2018, 22:47

Čaute, potreboval by som od Vás radu, lebo neviem ako ďalej. V škole som dostal zadanie: Semafór. To by nebol problém, keby tam ešte nebolo tlačítko, ktoré po stisnutí ukončí funkciu semafóra ale začne blikať oranžová (ako to je v mestách počas noci). Niečo som už spravil, obe veci to robí len to neviem nejako spojiť cez to tlačítko. Nevedel by mi z Vás niekto poradiť?

Code:

int buttonState = A4;

void setup() {
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(buttonState, OUTPUT);
pinMode(A5, OUTPUT);
}

void loop() {
if(buttonState, LOW){
digitalWrite(A2, HIGH);
delay(5000); // Wait for 5000 millisecond(s)
digitalWrite(A1, HIGH);
delay(3000); // Wait for 3000 millisecond(s)
digitalWrite(A2, LOW);
digitalWrite(A1, LOW);
digitalWrite(A0, HIGH);
delay(5000); // Wait for 5000 millisecond(s)
digitalWrite(A0, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(A0, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(A0, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(A0, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(A0, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(A0, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
delay(3000); // Wait for 3000 millisecond(s)
digitalWrite(A1, LOW);
}
else(buttonState, HIGH);{
digitalWrite(A1, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(A1, LOW);
delay(1000);
digitalWrite(A1, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(A1, LOW);
delay(1000);
}
}
arduino.jpg
arduino.jpg (103.38 KiB) 515 zobrazení

Užívateľov profilový obrázok
arduinoposlovensky
Príspevky: 52
Dátum registrácie: Streda, 22. Novembra 2017, 15:01
Kontaktovať užívateľa:

Re: Arduino - semafór

Príspevok od užívateľa arduinoposlovensky » Sobota, 5. Mája 2018, 10:27

1. toto je špatne:
if(buttonState, LOW){
...
}
else(buttonState, HIGH);{
...
}
Treba použiť digitalRead(pin);
Popis je tu: https://www.arduinoposlovensky.sk/progr ... gitalne-io
Pri tlačítkách treba myslieť i na zákmity pri stlačení, o tom som písal v tomto článku: Ako na ošetrenie spínacích kontaktov – debouncing

2. príkazu Delay() sa treba pri programovaniu vyhýbať a nepoužívať (zastaví sa ti beh programu a ani stav tlačítka nenačítaš).
Treba sa naučiť používať millis(). Ako na to som som popísal v časti v Bblikanie LED bez delay().

Taktiež sa dá semafor riešiť pomocou sekvenceru. Pekný článok o tom napísal Robo Ulbricht: Používame sekvencer - semafór
Arduino za pár drobných na: AliExpress.com, Bangood.com

Napísať odpoveď