Skocz do zawartości

Arduino menu klawiatura i LCD


Pomocna odpowiedź

Napisano

 Chciałem zrobić proste menu do zgrzewarki jednak jak się okazuje nie jest to takie proste. Niby wszystko zaczęło działać poprawnie, ale gdy chciałbym, żeby było funkcjonalne i za pomocą potencjometru chciałem przypisywać zmiennym jakieś wartości okazuję się, że nie działa to tak jak powinno. Ogólnie potencjometr dodany tam tylko dlatego, że nie wiedziałem jak mógłbym przypisywać wartości zmiennym za pomocą 'keypada'. Chodzi o to ze jak w case 3 ustawiam wartość zmiennej, następnie chciałbym przejść do kolejnego, case'a w którym wyświetli mi się wartość, którą przed chwilą ustawiałem, i wartość którą będę właśnie ustawiał (case 5). Mam nadzieję, że w miarę jasno to opisałem.  Zajrzyjcie do tego co już zdążyłem napisać, mam nadzieję, że da się z tego zrobić coś fajnego z waszą pomocą. Z góry dzięki. @SOYER @ethanak

#include <LiquidCrystal_I2C.h>
#include <Keypad.h>

LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display

const byte ROWS = 4; // ile wierszy
const byte COLS = 4; //ile kolumn
 
byte colPins[COLS] = {5, 4, 3, 2}; //piny wierszy
byte rowPins[ROWS] = {9, 8, 7, 6}; //piny kolum
 
char keys[ROWS][COLS] = { //mapowanie klawiatury
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

Keypad klawiatura = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initializacja klawiatury

int A = 0;
bool lock = 0;



void setup() {
  pinMode(A0, INPUT);
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("Zgrzewara");
  lcd.setCursor(1,1);
  lcd.print("Mateusz Czarny");
  delay(2000);
        

}

void loop() {
  menuGlowne();
}
void menuGlowne(){
    char klawisz = klawiatura.getKey();
    int odczyt;
    int d = 0;
    int c = 0;
    int g = 0;
        
  switch (A)
  {
    case 0:
        lcd.clear();
        lcd.print("Wybierz tryb  <> ");
        lcd.setCursor(3,1);
        lcd.print(">A <B");
        delay(150);
        if(klawisz == 'A'){
        A++;
        }
        break;
    case 1:
      
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(">Tryb 1");
        lcd.setCursor(0,1);
        lcd.print("Tryb 2");
        delay(150);
        if(klawisz == '#'){
          A = 3;
        }
        if(klawisz == 'A'){
        A++;
        }
        break;
    case 2:
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Tryb 1");
        lcd.setCursor(0,1);
        lcd.print(">Tryb 2");  
        delay(150);    
        if(klawisz == '#'){
          A = 4;
        }
        if(klawisz == 'B'){
        A--;
        }
        break;
    case 3:
        odczyt = analogRead(A0);
        d = map(odczyt, 0, 1023, 0, 200);
        c = d;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("1.");
        lcd.setCursor(0,1);
        lcd.print("Czas:"); 
        lcd.setCursor(5,1);
        lcd.print(c);
        delay(150);
        
        if(klawisz == 'B'){
        A=1;
        }
        if(klawisz == '#'){
          A = 5;
        }
        break;
    case 4:
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("2.");
        lcd.setCursor(0,1);
        lcd.print("Czas:"); 
        lcd.setCursor(0,6);
        lcd.print(klawisz);
        delay(150);
        if(klawisz == 'B'){
        A=2;
        }
        break;
    case 5:
        odczyt = analogRead(A0);
        g = map(odczyt, 0, 1023, 0, 50);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("1.");
        lcd.setCursor(0,1);
        lcd.print("Czas:"); 
        lcd.setCursor(5,1);
        lcd.print(c);
        lcd.setCursor(9,1);
        lcd.print("Czas:"); 
        lcd.print(g);
        delay(150);
        
        if(klawisz == 'B'){
        A=1;
        }
        break;
      }   
}

 

Do ustawiania wartości lepiej używać enkodera niż potencjometru, mógłbyś go wtedy też używać do poruszania się po menu. Enkoder z clickiem i nie potrzebujesz klawiatury, wystarcza jedno pokrętło.

  • Lubię! 2

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