Przycisk i oszalałe lub niemrawe diody

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
Awatar użytkownika
Adam Fx
Młodszy majsterkowicz
Posty: 23
Rejestracja: 26 sie 2013, 21:03
Lokalizacja: Gliwice

Przycisk i oszalałe lub niemrawe diody

Post autor: Adam Fx » 19 paź 2015, 16:41

Witam
Mam problem z prostym programem (Zamieszczony kod jest jedynie przykładem występowania problemu).
Zasada działania : naciskam przycisk zapal się dioda D1 nasika ponownie D1 gaśnie dodatkowo przy pomocy zmiennej "atx" chciałbym zapalać drugą diodę ale niestety nawet jak zamiast atx podstawie np. LOW to i tak diody dostają szału.
a przecież kiedy przycisk HIGH (czyli niewciśnięty) to pierwszego ifa nie powinno brać w ogóle pod uwagę ... nie rozumiem co się dzieje.

Kod: Zaznacz cały

  #define D1 8//diody
  #define D2 9
  #define D3 10
  #define S 0//przeł
  //#define Test 1
void setup() {

 

pinMode(D1, OUTPUT);
digitalWrite(D1, LOW); 
pinMode(D2,OUTPUT);
digitalWrite(D2, LOW);
//pinMode(Test,OUTPUT);
//digitalWrite(Test, LOW);
pinMode(S, INPUT_PULLUP);
pinMode(D3, OUTPUT);
digitalWrite(D3, HIGH);
}
boolean PED = 0 ; 

boolean YT = 0 ;
boolean atx = 0 ; 

void loop() {

 //###############################################   
  if (digitalRead(S) == LOW){ //wejdź jeśli przycisk wciśnięty
   delay(20);
   PED=!PED; //odwróć stan
   digitalWrite(D1, PED); //przypisz odwrócony stan diodzie

                                                   // bez digitalWrite(atx, LOW); działa ale jak to dopisze to głupieje diody migają

   digitalWrite(atx, LOW);//tu docelowo ma być stan zmiennej PED ale nawet przy konkretnie zadeklarowanym stanie diody migają jak szalone   

   while (digitalRead(S) == LOW);//czeka aż puszczę przycisk
    delay(20);
}
else{
  digitalWrite(D2, HIGH);
}



// teraz gdy przycisk puszczony powinno wchodzić tylko do tego dolnego ifa czyli D1 powinna świecić lub nie (zależy ile razy kliknąłem) a D3 powinna świecić cały czas bo w pierwszym warunku wartość zmiennej atx został ustawiona na LOW więc poniższy if jest spełniony

if (digitalRead(atx) == LOW){
digitalWrite(D3, HIGH);  
}
else{
  digitalWrite(D3, LOW); 
}
 }

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


stiven
Złota rączka
Posty: 1641
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Przycisk i oszalałe lub niemrawe diody

Post autor: stiven » 19 paź 2015, 17:49

S masz zadeklarowane jako stałą równą 0, w setup korzystając z tej stałej ustawiasz pin 0 jako wejście z podciągnięciem, więc do tego pinu masz połączony przycisk. Okej, ale potem w tym ifie pierwszym robisz coś dziwnego, bo korzystając ze zmiennej atx, która jest równa 0, chcesz ustawić wartość na pinie 0. No ale na pinie 0 masz przycisk przecież?
No i warunek w ifie drugim to ten sam warunek co w pierwszym, no bo atx jest równe S.
Awatar użytkownika
Adam Fx
Młodszy majsterkowicz
Posty: 23
Rejestracja: 26 sie 2013, 21:03
Lokalizacja: Gliwice

Re: Przycisk i oszalałe lub niemrawe diody

Post autor: Adam Fx » 19 paź 2015, 19:12

Tak jak jest w opisie - chciałbym docelowo żeby zmienna atx przyjmowała wartość ze zmiennej PED (tak jak to robi dioda D1 HIGH LOW)

boolean atx = 0 to jak rozumie może przyjąć 0 lub 1 true false więc chyba też HIGH i LOW

a chyba zaczynam rozumieć ... czyli tu chyba tkwi błąd digitalWrite(atx, LOW) digitalWrite każe wysłać coś na pin a ja chce tylko żeby zmienna atx przechowała wartość z PED...
czyli ma to być tak
atx=PED;
if (atx == LOW)

Serdeczne dzięki za naprowadzenie jestem początkujący i takie błahostki potrafią przyprawić o ból głowy
ODPOWIEDZ

Strony partnerskie: