Skocz do zawartości

Zmiana danych wyświetlanych na ekranie LCD po kliknięciu przycisku


Januszxd

Pomocna odpowiedź

Dzień dobry, nie za bardzo potrafię poradzić sobie z jednym problemem. Mianowicie chciałem na wyświetlaczu LCD najpierw wyświetlać w jednej linijce pomiar temperatury, a w drugiej pomiar wilgotności. Natomiast po kliknięciu przycisku chciałem, żeby wyświetlacz się wyczyścił i pokazał w pierwszej linijce pomiar ciśnienia, a w drugiej pomiar wysokości. Do tej pory wymyśliłem taki kod(dla testów, jeszcze bez podłączania czujników), ale niestety nie działa on tak jak chce. Wyświetlacz jedynie miga napisem "siemano" i nie reaguje na przycisk.

#include <Wire.h>
#include "rgb_lcd.h"

rgb_lcd lcd;

int przycisk = 1;

void setup() {
   lcd.begin(16, 2);
   pinMode(3, INPUT_PULLUP);
}
void loop() {
  
 if (przycisk == 1) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("siemano");
  }
 if (przycisk == 2) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("kolano");
 }
 
if (digitalRead(3) == LOW) {
  while (true) {
  przycisk = przycisk + 1;
  if (przycisk > 2) {
  przycisk = 1;
  break;
  }
 }

  }
}

Czy ktoś mógłby powiedzieć jak należy rozwiązać ten problem?

Z góry dzięki za pomoc.

Link do komentarza
Share on other sites

Kiedy wciskasz przycisk, Twój program w kółko zmienia wartość zmiennej przycisk od 1 do 3. Aby rozwiązać problem, możesz np. wykorzystać przerwanie i w funkcji obsługiwanej przez nie zwiększać wartość zmiennej przycisk o 1 w momencie wciśnięcia przycisku:

attachInterrupt(digitalPinToInterrupt(3),przyciskPlus,Falling);

void przyciskPlus(){
  przycisk++;
}

a następnie w pętli głównej sprawdzać wartość zmiennej przycisk i jeżeli jest większa od 2, zmniejszać ją do 1.

Link do komentarza
Share on other sites

Przede wszystkim błąd w założeniach. Kod ma reagować na zmianę stanu przycisku (tzn. nie był wciśnięty a teraz jest) a nie na to, że jest wciśnięty.

Można się bawić w dodatkowe zmienne (wybacz, już parę razy o tym na forum pisałem, szósty raz nie będę) ale najprościej będzie użyć bibliotekę Bounce2 i metodę fell().

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

1 minutę temu, ethanak napisał:

@farmaceuta na pewno prostsze niż


if (guzik.fell()) przycisk = 3 - przycisk;

?

Nie no jasne ze ze prostrza twoja wersja...ja nic o bounce nie wspominam bo szczerze nigdy nie korzystalem, ale jak najbardziej kolega zrobi tak jak piszesz bo faktycznie strasznie to prosto wyglada..😉

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.