LCD met knoppen 11-01-2015
Een 16 tekens, 2 regel LCD met knoppen is een handig hulpmiddel voor diverse experimenten. De knoppen (gele blok) zijn verbonden met analoog 0 en het display heeft de digitale pennen 8, 9, 4, 5, 6, 7 nodig. Deze aansluitingen zijn bij standaard gebruik niet aan te passen. Er zijn 5 puls maakcontacten, drukknoppen waarvoor 1 analoog verbinding nodig is. Dat houdt in, dat er over weerstanden heen een verbinding gemaakt wordt. Hierdoor wordt het totaal van de weerstanden minder en dat is analoog te meten op de Arduino bij poort 0.
Door nu simpelweg de spanning waarde via analoog 0, te meten kan je berekenen welke schakelaar in gedrukt is. Alle weerstanden samen geven de waarde hoger dan 1000.
Bij blok 1 (analoge poorten) mis je dus de pin naar analoog 0, en ook de digitale pinnen die je nodig heb voor het LCD zijn niet op het LCD knoppendisplay, als pin te vinden.
De reset is de 6e knop, (met het grijze balkje) en die is niet software matig te gebruiken. Dat blijft dus een hardware matige reset van de Arduino.
Verder zijn alle pennen 1 op 1 doorverbonden met de Arduino. Waardoor je dus nog wel b.v. een I2C verbinding op kan zetten via analoog 4 en 5.


//Sample using LiquidCrystal library
#include < LiquidCrystal.h >

/*******************************************************

This program will test the LCD panel and the buttons
based on the example program from
Mark Bramwell, July 2010

P.Hogenstijn
********************************************************/

#include < LiquidCrystal.h >
// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define some values used by the panel and buttons
int knopwaarde;
int knop;
int menuregel = 0;
int menukeuze = 0;
int oudknop;
// read the buttons

void leesknoppen()
{
knopwaarde = analogRead(0); // read the value from the sensor
if (knopwaarde > 1000){knop=0;} // NONE;
if (knopwaarde < 50){knop=1;} // RIGHT;
if (knopwaarde>50 && knopwaarde< 200){knop=2;} // UP;
if (knopwaarde>200 && knopwaarde< 400){knop=3;}// DOWN;
if (knopwaarde>400 && knopwaarde < 600){knop=4;}// LEFT;
if (knopwaarde>600 && knopwaarde < 850){knop=5;}// btnSELECT;
}

//----------------------------------
void setup()
{
lcd.begin(16, 2); // start the library
}
//-----------------------------------
void loop()
{
leesknoppen();
if (knop==0){oudknop=knop;}
if (knop!=oudknop)
{
switch (knop)
{
case 1:
menukeuze++;
oudknop=knop;
break;
case 2:
menuregel++;
menukeuze=0;
oudknop=knop;
break;
case 3:
menuregel--;
menukeuze=0;
oudknop=knop;
break;
case 4:
menukeuze--;
oudknop=knop;
break;
case 5:
oudknop=knop;
;
break;
}
}
if (menuregel>2){menuregel=0;}
if (menuregel<0){menuregel=2;}
if (menukeuze>2){menukeuze=0;}
if (menukeuze<0){menukeuze=2;}
switch (menuregel)
{
case 0:
lcd.setCursor(0,0);
lcd.print("Regel 0");
switch (menukeuze)
{
case 0:
lcd.setCursor(0,1);
lcd.print("Keuze 0");
break;
case 1:
lcd.setCursor(0,1);
lcd.print("Keuze 1");
break;
case 2:
lcd.setCursor(0,1);
lcd.print("Keuze 2");
break;
}
break;
case 1:
lcd.setCursor(0,1);
lcd.print("Regel 1");
switch (menukeuze)
{
case 0:
lcd.setCursor(0,1);
lcd.print("Keuze 0");
break;
case 1:
lcd.setCursor(0,1);
lcd.print("Keuze 1");
break;
case 2:
lcd.setCursor(0,1);
lcd.print("Keuze 2");
break;
}
break;
case 2:
lcd.setCursor(0,0);
lcd.print("Regel 2");
switch (menukeuze)
{
case 0:
lcd.setCursor(0,1);
lcd.print("Keuze 0");
break;
case 1:
lcd.setCursor(0,1);
lcd.print("Keuze 1");
break;
case 2:
lcd.setCursor(0,1);
lcd.print("Keuze 2");
break;
}
break;
}
lcd.setCursor(10,0);
lcd.print(menuregel);
lcd.setCursor(12,0);
lcd.print(menukeuze);
}
Bronnen:
voor de LCD Module 20x4 met Backlight (blauw)
aansluiten
pin config"
wikipedia