Stránka 1 z 1

Keypad na LCD 16x2

Napsal: 25 bře 2018, 20:36
od anton49
Dobrý den, jsem začátečník a potřebuji radu.
Zapojení: Klavesníce 4x4 – Arduino UNO – převodník I2C – LCD 16x2.
Na prvním řádku mám natrvdo text.
Až sem je všechno v pořádku. Problém: potřebuji na druhý řádek dostat číselnou řadu, kterou pošlu z klávesnice a mít možnost tuto řadu vynulovat.

#include <LiquidCrystal_I2C.h>

#include <Wire.h>

#include <Keypad.h>



const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9,8,7,6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5,4,3,2}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27,16,2);

void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" VOR_____NDB ");

}

void loop(){
char key = customKeypad.getKey();
lcd.setCursor(1,1);


díky za radu

Re: Keypad na LCD 16x2

Napsal: 26 bře 2018, 06:57
od gilhad

Kód: Vybrat vše


void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" VOR_____NDB ");
lcd.setCursor(0,1);
}

void loop(){
char key = customKeypad.getKey();
lcd.print(char);
if (char == "#") {
	lcd.setCursor(0,1);
	lcd.print("                ");
	lcd.setCursor(0,1);
	};
};


Re: Keypad na LCD 16x2

Napsal: 26 bře 2018, 14:58
od HaVecko
Tak tak, přepsat mezerami.

Re: Keypad na LCD 16x2

Napsal: 26 bře 2018, 16:25
od gilhad
ehm, pochopitelne

Kód: Vybrat vše

lcd.print(key);
if (key == "#")
(To je tak, kdyz clovek pise, zatimco by mel uz davno jit spat)

Re: Keypad na LCD 16x2

Napsal: 26 bře 2018, 18:00
od anton49
ISO C++ forbids comparison between pointer and integer [-fpermissive]

if (key == "#")

Re: Keypad na LCD 16x2

Napsal: 26 bře 2018, 20:13
od SkullKeep
anton49 píše:
26 bře 2018, 18:00
ISO C++ forbids comparison between pointer and integer [-fpermissive]

if (key == "#")
Zkusit prepsat na

Kód: Vybrat vše

if (key == '#')
protoze konstanta char je znak (' ')a ne textove pole(" ").

Re: Keypad na LCD 16x2

Napsal: 26 bře 2018, 21:41
od anton49
díky, pomohlo to. Jen na Keypad to nereaguje :)

Re: Keypad na LCD 16x2

Napsal: 27 bře 2018, 18:39
od anton49
void setup()
{

LiquidCrystal_I2C lcd(0x27,16,2);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" VOR_____NDB ");
lcd.setCursor(0,1);

}

void loop(){
char customKey = customKeypad.getKey();

if (customKey) {
lcd.print(customKey);
lcd.backlight();



} };

Už to funguje. Ještě potřebuji jednu radu. Jak vymazat druhý řádek, abych na něj mohl znova psát.

Re: Keypad na LCD 16x2

Napsal: 27 bře 2018, 19:45
od SkullKeep
Snad pomocí funkce se smyčkou:

Kód: Vybrat vše

void vymaz_radek();{
for ( byte i=0; i<16;i++)
{
lcd.setCursor(i,1); // toto posune kurzor o kus dal
lcd.print(" "); // prepsani znaku
}
lcd.setCursor(0,1); // zpet na zacatek
}