Skocz do zawartości

Wykorzystanie pętli


Mabo

Pomocna odpowiedź

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

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

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

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ę »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.