Mabo Napisano Marzec 26, 2016 Udostępnij Napisano Marzec 26, 2016 Mam zagwozdkę - próbuję napisać kod który umożliwi zmianę wyświetlanego tekstu po wpisaniu odpowiedniej sekwencji znaków w monitorze. Na razie taka zmiana jest ustawiona dla pierwszej pozycji MWS; po ponownym wpisaniu zaczyna naprzemiennie wyświetlacz oba przewidziane zestawy znaków (OFF i RDY) zamiast tylko ten drugi. Niestety mam z tym problem - będę wdzięczny za wskazówki jak to rozwiązać. #include <Wire.h> // standardowa biblioteka Arduino #include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Ustawienie adresu ukladu na 0x27 int wypelnienie = 0; int zmiana = 1; String odebraneDane = ""; void setup(){ Serial.begin(9600); lcd.begin(16,2); // Inicjalizacja LCD 2x16 lcd.backlight(); // zalaczenie podwietlenia lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna) lcd.print("OFF OFF OFF OFF"); lcd.setCursor(0,1); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("MWS JMR RWR DISP"); } void loop(){ if(Serial.available() >0){ odebraneDane = Serial.readStringUntil('\n'); } if (odebraneDane == "MWS") { if (wypelnienie == 0) { lcd.setCursor(0,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("RDY"); wypelnienie = wypelnienie + zmiana; delay(1000); } if (wypelnienie == 1) { lcd.setCursor(0,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("OFF"); wypelnienie = 0; delay(1000); } } if (odebraneDane == "JMR") { lcd.setCursor(4,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("RDY"); } if (odebraneDane == "RWR") { lcd.setCursor(8,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("RDY"); } if (odebraneDane == "DISP") { lcd.setCursor(12,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("RDY"); } } Link do komentarza Share on other sites More sharing options...
deshipu Marzec 26, 2016 Udostępnij Marzec 26, 2016 Nie czyścisz odebraneDane nigdzie, więc jak nie wpisano nic nowego, to nadal zwierają "MWS". Link do komentarza Share on other sites More sharing options...
Mabo Marzec 27, 2016 Autor tematu Udostępnij Marzec 27, 2016 Fakt. Teraz czyści - pojawił się inny zgryz: przy wpisaniu MWS wyświetla zapis RDY i od razu OFF - czemu nie wychodzi z pętli po spełnieniu warunku i realizuje kolejną? #include <Wire.h> // standardowa biblioteka Arduino #include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Ustawienie adresu ukladu na 0x27 int wypelnienie = 0; int zmiana = 1; String odebraneDane = ""; void setup(){ Serial.begin(9600); lcd.begin(16,2); // Inicjalizacja LCD 2x16 lcd.backlight(); // zalaczenie podwietlenia lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna) lcd.print("OFF OFF OFF OFF"); lcd.setCursor(0,1); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("MWS JMR RWR DISP"); } void loop(){ Serial.println(odebraneDane); if(Serial.available() >0){ odebraneDane = Serial.readStringUntil('\n'); } if (odebraneDane == "MWS") { if (wypelnienie == 0) { lcd.setCursor(0,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("RDY"); wypelnienie = wypelnienie + zmiana; odebraneDane = ""; delay(1000); } if (wypelnienie == 1) { lcd.setCursor(0,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("OFF"); wypelnienie = 0; odebraneDane = ""; delay(1000); } } if (odebraneDane == "JMR") { lcd.setCursor(4,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("RDY"); odebraneDane = ""; } if (odebraneDane == "RWR") { lcd.setCursor(8,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("RDY"); odebraneDane = ""; } if (odebraneDane == "DISP") { lcd.setCursor(12,0); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna) lcd.print("RDY"); odebraneDane = ""; } } Link do komentarza Share on other sites More sharing options...
deshipu Marzec 27, 2016 Udostępnij Marzec 27, 2016 A czemu miałby? Przecież mu nie kazałeś. Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Mabo Marzec 27, 2016 Autor tematu Udostępnij Marzec 27, 2016 Sorry, ale jestem jeszcze zielony. Jaką pętle powinienem zastosować / ewentualnie istniejącą jak zmodyfikować? Link do komentarza Share on other sites More sharing options...
deshipu Marzec 27, 2016 Udostępnij Marzec 27, 2016 Jeśli nie chcesz, żeby się reszta pętli wykonywała po dopasowaniu pierwszego warunku, to albo umieść całą resztę w klauzuli "else", albo każ mu zacząć od początku http://www.learncpp.com/cpp-tutorial/58-break-and-continue/ 1 Link do komentarza Share on other sites More sharing options...
Kaczy Marzec 27, 2016 Udostępnij Marzec 27, 2016 wypelnienie = wypelnienie + zmiana; odebraneDane = ""; delay(1000); } if (wypelnienie == 1) { Tutaj podczas wyświetlanie "RDY" dodajesz zmienną "zmiana" do zmiennej "wypelnienie (0+1=1) Przez co skrypt wykonując się dalej widziw wypelnienie = 1 zamiast 0. 1 Link do komentarza Share on other sites More sharing options...
Mabo Marzec 27, 2016 Autor tematu Udostępnij Marzec 27, 2016 Dzięki Panowie - już wszystko działa 🙂 Link do komentarza Share on other sites More sharing options...
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ę »