//
//**********************************************************************
//** HALLO WORLD med LCD-display.
**
//** Hvordan styrer man display på linje, og cursor-possition ?
**
//** de OZ6YM, Palle, april 2015
**
//**
**
//** I dette program ser vi på, hvordan man tilslutter et
**
//** LCD-display, hvordan man styrer, linjer og kolonner, samt
**
//** udskriver tekst på displayet.
**
//** Desuden styrer vi 5 knapper og danner en MENU med blot
**
//** en enkelt ANALOG port, samt måler spændingen på de
5
**
//** knapper, og udskriver på
displayet
**
//**********************************************************************
// include the library code:
**
//**********************************************************************
#include
<LiquidCrystal.h>
// initialize biblioteket til LCD-DISPLAYET
//**********************************************************************
//** Vælg de pinde på LCD der skal bruges
**
//**********************************************************************
// LiquidCrystal lcd(RS, E, D4, D5, D6, D7)
**
//**********************************************************************
LiquidCrystal lcd(3,4,6,7,8,9);
// standard for OZ6YM, Palle
const int
colums = 20;
// 16 eller 20 karakterer pr. linje
const int
rows = 4;
// 2 eller 4 linjer
//**********************************************************************
//************ tællere der benyttes i programmet *********************
//**********************************************************************
int
analogPin = A3;
// port der læser knapperne
int
KNAP;
// Variabel til læsning af knap-nummeret
float
voltage = 0;
float
val = 0;
float REF;
//**********************************************************************
void setup()
{
//**********************************************************************
Serial.begin(9600);
// aktiveres hvis man skal DEBUGGE program
//**********************************************************************
//***** Initialicer LCD med antal collonner og linjer
******
//**********************************************************************
//** setup() benyttes i begyndelse af et program til at initialicere
//** variable, der kun skal køres een gang i programmet
lcd.begin(colums, rows);
lcd.setCursor(0,0);
lcd.print("Hello World de OZ6YM");
// Print
lcd.setCursor(1,1);
lcd.print("MENU-system ");
lcd.setCursor(0,2);
lcd.print("Vaelg 1 af 5 knapper ");
lcd.setCursor(7,3);
lcd.print("VER.1.0 ");
delay(2000);
// vis meddelelse i 2 sekunder
lcd.clear();
//--> CLEAR diaplay
REF = 4.98;
// MIN SPÆNDING ER IKKE HELT STABIL 5 Volt
}
//**********************************************************************
//** END af SETUP **
//**********************************************************************
//**********************************************************************
//** HOVED LOOP, HER HVOR ALTING STYRES FRA **
//** LOOP-routinen skal være så kort som muligt, for at holde et **
//** godt overblik over, hvad der sker i programmet **
//**********************************************************************
void
loop()
{
checkKnap();
// Er der trykket på en KNAP ?
switch
(KNAP) {
// Linien herunder udføres som DEFAULT, når der ikke skal ske noget
**
//**********************************************************************
case 102:
lcd.setCursor(3,0); lcd.print("MENU oversigt:");
break;
//**********************************************************************
//** Udfør MENUPUNKTER **
//**********************************************************************
case 0:
lcd.setCursor(2,1); lcd.print("MenuPunkt 1");
// Her kan indsættes en Procedure til servicering af Menupunkt 1
break;
case 51:
lcd.setCursor(2,1); lcd.print("MenuPunkt 2");
// Her kan indsættes en Procedure til servicering af Menupunkt 2
break;
case 68: lcd.setCursor(2,1);
lcd.print("MenuPunkt 3");
// Her kan indsættes en Procedure til servicering af Menupunkt 3
break;
case 76: lcd.setCursor(2,1);
lcd.print("MenuPunkt 4");
// Her kan indsættes en Procedure til servicering af Menupunkt 4
break;
case 81: lcd.setCursor(2,1);
lcd.print("MenuPunkt 5");
// Her kan indsættes en Procedure til servicering af Menupunkt 5
break;
}
}
//**********************************************************************
//**
END af HOVED LOOP
**
//**********************************************************************
//**********************************************************************
//** Check om der er trykket på en KNAP, og læs analogporten ind
**
//**********************************************************************
void
checkKnap()
{
//**********************************************************************
// Den analoge port kan antage værdier mellem 0 og 1023.
**
// Tag det læste tal, divider med 10, og smid decimaldelen væk(int)
**
// hvis der ikke er trykket på en knap, vil dette tal altid være 102 **
// +- støj-ændring, som kan gå under 1020.
**
// Med 5 knapper vil tallene der returneres være: 0, 51. 68, 76, 81
**
// selvfølgelig afhængiet af, hvilke modstandsværdier der er brugt
**
// Modstands-decaden består af 5 modstande på hver 1 K Ohm.
**
// derfor vil Menupunkt 1 altid blive aflæst som værende 0,
**
// da den er direkte målepunkt.
**
// Menupunkt 2 vil være 50 % af spændingen,
**
// Menupunkt 3 vil være 66 % af spændingen,
**
// Menupunkt 4 vil være 75 % af spændingen,
**
// Menupunkt 5 vil være 80 % af spændingen 5 volt, som er Refferance **
//**********************************************************************
KNAP = int(analogRead(analogPin)/10);
// Læs analog-port
// På grund af støj/spændingsændring af forsyningen, testes på om
**
// tallet er under 100, istedet for 102 **
// *********************************************************************
if
( KNAP <= 100 )
// test om KNAP er trykket
{
// der er trykket på en knap
// Her indlæses spændingen i VOLT
float
voltage = analogRead(analogPin) * (REF / 1024.0);
// Hvis din REFspænding ikke er præcis 5 volt,
finindstil den - til 1024
// Hvis knappen stadig er trykket, da TEST porten igen,
// indtil HAN slipper KNAPpen
Test: if (
int(analogRead(analogPin)/10)
<= 100 ) { goto Test;}
// Check om spændingen har ændret sig
if ( voltage != val) {
float val = voltage; }
// Udskriv på ny, hvis spændingen har ændret sig
lcd.setCursor(1,3);
lcd.print("KNAP-VOLT: = "); lcd.print(voltage);
// Serial.print("Volt: ");Serial.println(voltage);
// Serial.println(KNAP);
}
}
//**********************************************************************
//** END af checkKnap() **
//**********************************************************************
//**********************************************************************
//** END of PROGRAM **
//**********************************************************************