• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Poprawność składni.
#1
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ł[Obrazek: 1f640.png][Obrazek: 1f62b.png]. 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
}
 
Odpowiedź
#2
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.
 
Odpowiedź
#3
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.
 
Odpowiedź
#4
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 Smile

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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości