paradis313 Napisano Styczeń 13, 2021 Udostępnij Napisano Styczeń 13, 2021 Cześć. Na początku chciałbym z góry przeprosić za prawdopodobnie banalny temat ale mam z nim problem. Otóż chciałbym stworzyć program, w którym będę obsługiwał dwie diody za pomocą dwóch przycisków. Do tego muszę dołożyć (zadanie na studia) taki zapis, że jeżeli dioda 1 się świeci to włączając diodę 2 ta pierwsza gaśnie i na odwrót. Jak można takie coś rozwiązać? Byłbym wdzięczny za podpowiedzi. P.S Arduino używałem dwa lata temu i praktycznie wszystkiego zapomniałem. Wczoraj prowadzący zajęcia wymyślił sobie, że warto zrobić takie ćwiczenie jednakże praktycznie nic w tym temacie nie wytłumaczył. Oto kod: boolean buttonState1 = true; // aktualny stan zaświecenia diody int buttonPin1 = 10; //pin do odczytu stanu przycisku int led1 = 7; //pin do obsługi diody boolean buttonState2 = true; // aktualny stan zaświecenia diody int buttonPin2 = 9; //pin do odczytu stanu przycisku int led2 = 8; //pin do obsługi diody void setup() { pinMode(led1, OUTPUT); //Dioda jako wyjście pinMode(buttonPin1, INPUT_PULLUP); //Przycisk jako wejście digitalWrite(led1, HIGH); //Wyłączenie diody pinMode(led2, OUTPUT); //Dioda jako wyjście pinMode(buttonPin2, INPUT_PULLUP); //Przycisk jako wejście digitalWrite(led2, HIGH); //Wyłączenie diody } void loop() { przycisk1(); przycisk2(); } void przycisk1 () { if (digitalRead(buttonPin1) == LOW) { delay(20); //20ms na obsługę drgań styków buttonState1 = !buttonState1; //ustawienie przeciwnego stanu diody if (buttonState1 == true){ digitalWrite(led1, buttonState1); } else { digitalWrite(led1, buttonState1); } while (digitalRead(buttonPin1) == LOW); //czekamy tak długo, jak długo wciśnięty jest przycisk delay(20); //20ms na obsługę drgań styków } } void przycisk2 () { if (digitalRead(buttonPin2) == LOW) { delay(20); //20ms na obsługę drgań styków buttonState2 = !buttonState2; //ustawienie przeciwnego stanu diody if (buttonState2 == true){ digitalWrite(led2, buttonState2); } else { digitalWrite(led2, buttonState2); } while (digitalRead(buttonPin2) == LOW); //czekamy tak długo, jak długo wciśnięty jest przycisk delay(20); //20ms na obsługę drgań styków } }
Treker (Damian Szymański) Styczeń 13, 2021 Udostępnij Styczeń 13, 2021 @paradis313 witam na forum! Skoro to zadanie na studia to nie będziemy robić za Ciebie - daj znać na czym dokładnie utknąłeś to chętnie doradzimy Jak działa w praktyce Twój aktualny program i czego mu brakuje, aby działał poprawnie?
paradis313 Styczeń 13, 2021 Autor tematu Udostępnij Styczeń 13, 2021 @Treker oczywiście, nie chodzi mi o to żeby zrobić coś za mnie. Aktualnie program działa w ten sposób, że po wciśnięciu przycisku 1 włącza się / gaśnie dioda 1. Analogicznie przycisk 2 / dioda 2. Problem w tym, że nie mam bladego pojęcia jak zrealizować warunek, że jeżeli dioda 1 jest włączona to przy włączeniu diody 2, dioda 1 gaśnie. Jeżeli dioda 2 jest włączona, to przy włączeniu diody 1, dioda 2 gaśnie. Jeżeli ten zapis, który podałem oczywiście jest poprawny. Dorzucę może jeszcze screen z TinkerCADa: Jedyne co mi teraz przychodzi na myśl, to w kodzie przy załączeniu diody 1 dopisać wyłączenie diody 2. Analogicznie przy załączeniu diody 2 dopisać wyłączenie diody 1. Czy to jest dobre podejście?
paradis313 Styczeń 13, 2021 Autor tematu Udostępnij Styczeń 13, 2021 const int BT1 = 10; // Pin przycisku 1 const int BT2 = 11; // Pin przycisku 2 const int LED1 = 8; // Pin diody 1 const int LED2 = 9; // Pin diody 2 bool BT1_State = LOW; // zmienna odczytu przycisku 1 bool BT2_State = LOW; // zmienna odczytu przycisku 2 bool LED1_State = LOW; // zmienna odczytu diody 1 bool LED2_State = LOW; // zmienna odczytu diody 2 void setup() { pinMode(LED1, OUTPUT); //Dioda 1 jako wyjscie pinMode(LED2, OUTPUT); // Dioda 2 jako wyjscie pinMode(BT1, INPUT_PULLUP); // Przycisk 1 jako wejscie pinMode(BT2, INPUT_PULLUP); // Przycisk 2 jako wejscie } void loop() { // odczytywanie stanow przyciskow 1 i 2 BT1_State = digitalRead(BT1); BT2_State = digitalRead(BT2); // Warunek sprawdzajacy czy przycisk 1 jest wcisniety, jesli tak stan jest LOW if (BT1_State == LOW && LED1_State == LOW) { LED1_State = HIGH; LED2_State = LOW; } //Analogicznie przycisk 2 if (BT2_State == LOW && LED2_State == LOW) { LED2_State = HIGH; LED1_State = LOW; } digitalWrite(LED1, LED1_State); // wlacz / wylacz diode 1 digitalWrite(LED2, LED2_State); // wlacz / wylacz diode 2 } Tutaj podaje rozwiązanie problemu. Temat można zamknąć. 1
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »