Jestem początkującym "budowniczym" układów opartych na arduino. Potrzebuję od Was pomocy w oprogramowaniu przełączników dźwigienkowych. Zadanie jest takie: każdy z przełaczników (typ on-off) ma wysłać jednorazowo przy zmianie stanu przez serial port jakiś komunikat tekstowy (przy stanie HIGH jeden komunikat przy stanie LOW inny komunikat). Przełączniki przyjmują na stałe stan HIGH lub LOW. Poradziłem sobie z jednym przełącznikiem za pomocą funkcji if i pętli while natomiast problem pojawił się przy połaczeniu 2 przełacznika, nie chcą działać oddzielnie tzn. albo działa tylko jeden albo działanie jednego zależy od aktualnego stanu drugiego przełącznika. Na tę chwilę próbuję to zrobić za pomocą funcji switch ale efekt jest podobny. Czy ktoś mógłby mnie naprowadzić w jakim kierunku iść? Poniżej ostatn kod z wykorzystaniem funkcji switch
Szkic jest bardzo roboczy, chodzi o sama zasadę. Po wgraniu szkicu działa tylko button2, po zmianie stanu pojawia się żądany komunikat, natomiast button1 nie reaguje w ogóle
Z góry dziekuję za pomoc i wyrozumiałość
Kod: Zaznacz cały
const int button1=4;//przypisanie przełączników do portów
const int button2=2;
int x; //deklaracja zmiennej użytej później w funckji stan_wl
void setup() {
pinMode(button1,INPUT);//ustawienie portów
pinMode(button2,INPUT);
Serial.begin(115200);
}
int stan_wl() { //funkcja sprawdzająca stan przełączników i przypisująca określone wartości zmiennej x
if (digitalRead(button1)==HIGH) x=1;
if (digitalRead(button1)==LOW) x=2;
if (digitalRead(button2)==HIGH) x=3;
if (digitalRead(button2)==LOW) x=4;
return(x);
}
void loop() {
// odwołanie się do funkcji stan_wl
//wykonanie określonych czynności w zależności od położenia prełacznika
switch(stan_wl()){
case 1:
delay(20);
Serial.println ("wysoki1");
while(digitalRead(button1)==HIGH);
delay(20);
break;
case 2:
delay(20);
Serial.println ("niski1");
while(digitalRead(button1)==LOW);
delay(20);
break;
case 3:
delay(20);
Serial.println ("wysoki2");
while(digitalRead(button2)==HIGH);
delay(20);
break;
case 4:
delay(20);
Serial.println ("niski2");
while(digitalRead(button2)==LOW);
delay(20);
break;
}
}