Mati2004 Napisano Styczeń 27, 2022 Udostępnij Napisano Styczeń 27, 2022 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; } }
SOYER Styczeń 27, 2022 Udostępnij Styczeń 27, 2022 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. 2
Pomocna odpowiedź
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ę »