Arduino Polska Forum

Pełna wersja: Migotanie LCD 20x4 I2C
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Witam!!
Jestem w trakcie tworzenia programu do pomiaru poziomu cieczy w zbiorniku.
Dane otrzymane z pomiarów czujnika odległości mają być wyświetlane na ekranie LCD 20x4 I2C.
Chciałbym aby podświetlenie ekranu LCD włączało się na jakiś czas po wciśnięciu tactswitcha.
Do wykonania tego skorzystałem z funkcji millis(). 
Wszystko byłoby super ale niestety zmienna odczytująca  wartość z czujnika odległości ma na końcu delay. 
Powoduje ono, że ekran mogę włączyć dopiero gdy minie to opóźnienie.
Aby to zlikwidować ponownie sięgnąłem po millis(). 
Włączanie następuje od razu po naciśnięciu - ale pojawił się inny problem - którego niestety nie jestem w stanie ominąć  Sad
Otóż wyświetlane wartości pulsują (jak się domyślam jest to efekt lcd.clear) i są mało czytelne.
Czy jest jakiś sposób aby pozbyć się tego problemu??
W takim przypadku lcd.clear(); zastępuję następującą kombinacją:

Ustawiam kursor na odpowiedniej pozycji czyli: setCursor(x, y);
Następnie wyświetlam to co mam do wyświetlenia czyli: lcd.print(dane);
Na koniec wymazuję ewentualne znaki z poprzedniego zapisu wyświetlając spacje, czyli: lcd.print("    ");

Pozdr.
Niestety jak wpisuję w swój kod Twoją sugestie (na próbę tylko w wierszu z %):

     
Kod:
lcd.setCursor(0,0);
      lcd.print("Poziom E");
      print_histogram(hCieczyCm);
      lcd.setCursor(19,0);
      lcd.print("F");
      lcd.setCursor(0,1);
      procent = (hCieczyCm / H_WYSOKOSC) *100;
      lcd.print("Wyp.  ");
      lcd.print(procent);
      lcd.print ("% - ");
      lcd.setCursor(6,1);
      lcd.print ("   ");
      litry = floor(POJEMNOSC_SZAMBA * hCieczyCm * 10);
      // lcd.print(litry);
      // lcd.print("L ");
      szesc = litry * 0.0010;
      lcd.print(szesc);
      lcd.print ("m3");
      lcd.setCursor(0,2);
      lcd.print("Wys.cieczy  ");     
      lcd.print(hCieczyCm);
      lcd.print("cm");
      lcd.setCursor(0,3);
      lcd.print("Prog.napel. ");     
      lcd.print(prognoza);
      lcd.print("dni");}

to niestety znika mi zupełnie wartość procentowa (pokazują się puste pola).

Nie wiem również jak zrobić odświeżanie paska postępu.
Po usunięciu lcd.clear pozostają części paska na ekranie.

[attachment=226]
Kod:
lcd.setCursor(4,2);  
    lcd.print(procent);
      lcd.print ("% - ");
      lcd.setCursor(6,1);
      lcd.print ("   ");
Co do odświeżanie wklej cały kod to cos poradzimy.
"to niestety znika mi zupełnie wartość procentowa (pokazują się puste pola)."

Odpowiedz na to.
Ty używasz lcd.clean to przez to ci miga lcd tak się nie robi.
(22-10-2016, 23:07)adix napisał(a): [ -> ]"to niestety znika mi zupełnie wartość procentowa (pokazują się puste pola)."

odpowiedz na to

Po prostu znika np 70% - 1,90 m3 i pokazuje się jedynie   % - 1,90m3
A bo może w tym momencie wartość zmiennej jest 0 sprawdziłeś to.
(22-10-2016, 23:09)pioga napisał(a): [ -> ]
(22-10-2016, 23:07)adix napisał(a): [ -> ]"to niestety znika mi zupełnie wartość procentowa (pokazują się puste pola)."

odpowiedz na to

Po prostu znika np 70% - 1,90 m3 i pokazuje się jedynie   % - 1,90m3

Po wprowadzeniu zasugerowanego przez Ciebie wpisu na wyświetlaczu pojawia się to:
(22-10-2016, 23:13)adix napisał(a): [ -> ]A bo może w tym momencie wartość zmiennej jest 0 sprawdziłeś to.


Jeżeli wartość byłaby 0 to ekran zmienia się na informację o pustym zbiorniku.
http://forum.arduinopolska.com/watek-jak...u-do-postu
Popraw posty wedlug mojego poradnika !!!
Kod:
lcd.setCursor(5,2);  
   lcd.print(procent);
     lcd.print ("% - ");
     lcd.setCursor(6,1);
     lcd.print ("   ");
sprubuj tak
Stron: 1 2