Poprawność składni. - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Poprawność składni. (/watek-poprawno%C5%9B%C4%87-sk%C5%82adni) |
Poprawność składni. - Marcin.marcinowski - 13-01-2022 Witam serdecznie wszystkich. Jest to mój pierwszy post na tym forum, po rozpoczęciu kursu na Forbocie o programowaniu Arduino postanowiłem spróbować swoich sił w napisaniu jakiegoś prostego programu , który chcę wykorzystać przyszłościowo. Napisałem program uwzględniając potrzebne komentarze, jednak po skompilowaniu i wgraniu programu do Arduino Uno, program nie działa według mojego założenia. Poradźcie mi proszę gdzie popełniam błędy i co muszę zmienić abym nie zszedł na zawał. Siedzę już trzeci wieczór i dalej klops... Nie mam już pomysłów. Na dzień dzisiejszy program po uruchomieniu załącza przekaźniki w takim samym cyklu, samoczynnie bez wciskania jakiegokolwiek przycisku tzn po podaniu zasilania: przekaznik 2 -1na sekundę potem przekaźnik 1na 5 sekund pytanie co jest nie tak? Program //test nr1 void setup() { pinMode(2, INPUT_PULLUP);//przełacznik typu krańcówka /test palcem pinMode(8, OUTPUT); //moduł płytki 1 przekażnika załączany stanem wysokim pinMode(9, OUTPUT); //moduł płytki 2 przekażnika załączany stanem wysokim pinMode(3, INPUT_PULLUP); //moduł czujnika z stan wysoki 5V lub GND do wyboru digitalWrite(2,LOW); // ustawienie portów po włączeniu zasilania digitalWrite(8,LOW); // ---------------||-------------------------- digitalWrite(9,LOW); // ---------------||-------------------------- digitalWrite(3,LOW); // ---------------||-------------------------- } void loop() { if (digitalRead(2) == LOW) //jeśli przycisk wciśnięty {digitalWrite(8, HIGH); //Włącz przekaźnik2 delay(1000); //utrzymaj włączony 1 sekundę digitalWrite(8, LOW); //wyłącz przekaźnik 2 delay(1000); //odczekaj 1 sekundę digitalWrite(9, HIGH); //włącz przekaźnik 1 delay(5000);} //utrzymaj włączony 1 sekundę else{ //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty) digitalWrite(9, LOW); //wyłacz przekaźnik 1 digitalWrite(8, LOW);} //wyłacz przekaźnik 2 if (digitalRead(3) == HIGH && digitalRead(2) == HIGH) //Jeśli 2 przycisk wciśnięty {digitalWrite(9, LOW); //odłącz przekaźnik 1 digitalWrite(8, LOW);} //odłącz przekaźnik 2 else //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty) { digitalWrite(9, LOW); //wyłacz przekaźnik 2 digitalWrite(8, LOW);} //wyłacz przekaźnik 1 If (digitalRead(9) == HIGH && digitalRead(3) == HIGH) //J eśli 2 przycisk wciśnięty {digitalWrite(9, LOW); //odłącz przekaźnik 1 digitalWrite(8, LOW); } //odłącz przekaźnik 2 else //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty) {digitalWrite(9, LOW); //wyłacz przekaźnik 2 digitalWrite(8, LOW);} //wyłacz przekaźnik 1 } RE: Poprawność składni. - MadMrQ - 13-01-2022 W setup() robisz digitalWrite dla pinów, które używasz jako wejścia. Pojawia się pin 5, którego funkcji nie określasz. W ifach też jest trochę bzdur. Zastanów się co chcesz zrobić i co po kolei ma się załączać. Jaki stan to włączenie, a jaki wyłączenie. Ktore piny to wejścia, a które wyjścia, bo jak na razie to niezły burdel. RE: Poprawność składni. - Marcin.marcinowski - 13-01-2022 Bardzo dziękuję za zainteresowanie. Faktycznie z pośpiechu przeoczyłem w Setupie powinno być: digitalWrite(2,LOW); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(3,LOW); Już poprawiłem. Napiszę może co chciałem uzyskać tym pseudokodem: pin 2 opisze go jako WŁ1 pin 3 opiszę go jako PK1 pin 8 opiszę go jako PK2 pin 9 opisze go jako WŁ2 1 - Arduino startuje - wszystkie porty IN jak i OUT postawione zostają w stan niski. 2 - Pin 2 (opisze go jako WŁ1 ) dostaje stan wysoki (np 5v) 3 - Port 8 do którego podpięty jest przekaźnik (opiszę go jako PK2 - aktywowany stanem wysokim) ma zostać włączony na 1 sekundę i wyłączony na czas 1 sekundy po tej operacji: 4 - Port 9 do którego podpięty jest przekaźnik (opiszę go jako PK1 - aktywowany stanem wysokim) ma zostać włączony na 5 sekund 5 - przez cały ten czas włącznik WŁ1 jest zamknięty i jego rozwarcie ma spowodować stan niski na pin 8(PK1 ), i 9(PK2) 6 - Podanie stanu wysokiego w czasie pracy tych 5 sekund poprzez WŁ2 na pin 3 ma spowodować : stan niski na pinie 8 - (PK1 stan niski), stan niski na pinie 9 - (PK2-stan niski) 8 podanie stanu niskiego/brak 5 volt/ na pinie 2 (WŁ1)ma dać stan niski na pinach 8(PK1 ), i 9(PK2), 7-Podanie stanu wysokiego na pint 2 (WŁ1) i Pin 3 (WŁ2) w tym samym czasie daje stan niski na pin 8(PK1 ), i 9(PK2) Koniec programu. Dla obeznanych w temacie to pewnie 15 minut. RE: Poprawność składni. - MadMrQ - 13-01-2022 To teraz przeanalizuj co robi program: -> w setup() ustawiasz pin2 jako input_pullup -> dalej w setup() digitalWrite przypisujesz mu stan LOW -> w loop() sprawdzasz, czy jest LOW No jak ustawiłeś LOW to jest LOW if (digitalRead(3) == HIGH && digitalRead(2) == HIGH) //Jeśli 2 przycisk wciśnięty - żaden przycisk wciśnięty, bo wciśnięty przycisk na pinie w stanie input_pullup jest przy LOW If (digitalRead(9) == HIGH && digitalRead(3) == HIGH) //J eśli 2 przycisk wciśnięty - znowu nie o 2 przycisk chodzi... sprawdzasz, czy wyjście na pinie 9 jest w stanie wysokim i czy na pewno przycisk na pinie 3 nie jest wciśnięty. Gotowca ode mnie nie dostaniesz, ale wskazówki owszem. |