/*
www.santy.cz
Dil 4 - LCD modul - část 2
*/
//Test využívá knihovnu LiquidCrystal
#include <LiquidCrystal.h>
/*******************************************************
Tento program testuje LCD modul 1602 a jeho tlačítka
úprava © Aleš Müller, Březen 2014,
Verze 2
********************************************************/
// využité piny na desce Arduino
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// definice hodnot pro použití s panelem a tlačítky
static int btnPUSHED = 0; // počítadlo stisknutí všech tlačítek
boolean btnPUSH = false; // signalizace právě/stále stisknutého tlačítka
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// tato funkce čte hodnotu tlačítek
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // čteme hodnotu ze senzoru
// střední hodnota tlačítek je zhruba tato: 0, 144, 329, 504, 741
// přidáme cca 50 k těmto hodnotám a zkontrolujeme zda jsme blízko
if (adc_key_in > 1000) return btnNONE; // kontrolujeme nejprve tuto možnost, protože to je nejčastější stav
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
return btnNONE; // pokus nic z toho neodpovídá, vracíme tuto hodnotu
}
void setup()
{
lcd.begin(16, 2); // start knihovny pro LCD
lcd.setCursor(0,0); // sloupec 0 , řádek 0
lcd.print(" www.santy.cz "); // jednoduchý výpis na LCD
lcd.setCursor(0,1); // sloupec 0 , řádek 1
lcd.print("1602 LCD Keypad");
delay(5000); // pauza 5 sec
lcd.clear(); // vymažeme displej
lcd.setCursor(0,0);
lcd.print("Stiskni tlacitko");
}
void loop()
{
lcd.setCursor(12,1); // přesuneme kurzor na druhý řádek a znak č.13 (vše číslováno od nuly!)
lcd.print(millis()/1000); // vypíšeme počet sekund od spuštění zařízení
lcd.setCursor(0,1); // vrátíme zpět na začátek druhého řádku
lcd_key = read_LCD_buttons(); // přečteme stav tlačítek
switch (lcd_key) // dle toho, které je stisknuto vypíšeme akci
{
case btnRIGHT: // ošetříme stav při stisku tlačítka DOPRAVA
{
if(btnPUSH) break; // pokud už je tlačítko stisknuto, neprovádíme
lcd.print("Doprava "); // vypíšeme které tlačítko bylo stisknuto
btnPUSH = true; // nastavíme, že je stisknuto některé tlačítko
btnPUSHED++; // přičteme jedničku k počtu stisknutí tlačítek
lcd.print(btnPUSHED, DEC); // vypíšeme počet stiknutí na LCD displej
break;
}
case btnLEFT:
{
if(btnPUSH) break;
lcd.print("Doleva ");
btnPUSHED++;
lcd.print(btnPUSHED, DEC);
btnPUSH = true;
break;
}
case btnUP:
{
if(btnPUSH) break;
lcd.print("Nahoru ");
btnPUSHED++;
lcd.print(btnPUSHED, DEC);
btnPUSH = true;
break;
}
case btnDOWN:
{
if(btnPUSH) break;
lcd.print("Dolu ");
btnPUSHED++;
lcd.print(btnPUSHED, DEC);
btnPUSH = true;
break;
}
case btnSELECT:
{
if(btnPUSH) break;
lcd.print("Volba ");
btnPUSHED++;
lcd.print(btnPUSHED, DEC);
btnPUSH = true;
break;
}
case btnNONE:
{
lcd.print("- nic - ");
lcd.print(btnPUSHED, DEC);
btnPUSH = false;
break;
}
}
}