Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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.

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.

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().

(edytowany)
bool s = 0;

if (digitalRead(3) == LOW ) {
  if (s == 0) {
  s = 1;
  przycisk += 1;
  
  if (przycisk > 2) {
  przycisk = 1;
    }
   
    }
  delay(200);
} else {
  s = 0;
  }

To takie najprostsze

Edytowano przez farmaceuta
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..😉

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