• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Migotanie LCD 20x4 I2C
#1
Question 
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??
 
Odpowiedź
#2
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.
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#3
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.

   
 
Odpowiedź
#4
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.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
"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.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#6
(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
 
Odpowiedź
#7
A bo może w tym momencie wartość zmiennej jest 0 sprawdziłeś to.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#8
(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:


Załączone pliki Miniatury
   
 
Odpowiedź
#9
(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.
 
Odpowiedź
#10
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
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości