Go Down

Topic: Yet another LCD Menu Question. (Read 2 times) previous topic - next topic

Peter Hall

Hey guys,

I've been looking at loads of examples and i just cant get my head around them, calling different .h files and bits and pieces.

I want to put an LCD Screen and a 3 Button menu in my car.
i have a 16x2 LCD and 3 Large Tactile Switches all connected to the arduino, buttons are connected to Digital Input 8,9,10 and have 4 delays connected to 1,6,7 and 13.

Simple Menu:
--------------------------------
|First
|Second
|Third
|Fouth
--------------------------------

Button 1 = Up
Button 2 = Select
Button 3 = Down

All i want to do is to be able to select an option and turn a relay on and to select it again to turn it off. :)

I Used this http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1273469106/all to try and make i work and its gone all to pot, any chance anyone could have a look at it please ?

Yeah i am a newbie, altho i should walk before i should run, but any help would be really appriciated?

Many Thanks :)

This is my altered code:


#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int rly1Pin =  6;
int rly2Pin =  7;
int rly3Pin =  13;
int rly4Pin =  1;
int prognumber = 1;
int line = 1;

int down = 8;
int select = 9;
int up = 10;

void menu();
void LCDclear();
void LCDfirst();
void LCDsecond();
void LCDmenudisplay();

void first();
void second();
void third();
void fourth();

void setup() {
 lcd.begin(16, 2);
 menu();
}

void loop() {
 //nothing to loop but is required in every sketch.
}

void LCDclear(){
 lcd.print(0xFE, BYTE);      
 lcd.clear();
}

void LCDfirst(){
 lcd.print(0xFE, BYTE);
lcd.setCursor(0, 0); // bottom left
}
void LCDsecond(){
 lcd.print(0xFE, BYTE);
lcd.setCursor(0, 1); // bottom left
}

void menu() {
 while(digitalRead(up) == HIGH or digitalRead(down) == HIGH or digitalRead(select) == HIGH){};
 delay(50);
 LCDclear();
 LCDfirst();
 if(prognumber > 1){
 prognumber--;
 }
 else{
   prognumber == 1;
 }
 LCDmenudisplay();
 LCDsecond();
 prognumber++;
 LCDmenudisplay();
 if(line == 1){
 lcd.print(0xFE, BYTE);
 lcd.print(143, BYTE);
 lcd.print("<");
 }
 else {
 lcd.print(0xFE, BYTE);
 lcd.print(207, BYTE);
 lcd.print("<");
 }
 while(digitalRead(up) == LOW && digitalRead(down) == LOW && digitalRead(select) == LOW){}
 if(digitalRead(down) == HIGH){
 line++;
 if(line > 2){
 line = 2;
 prognumber++;
 if(prognumber > 4){
 prognumber = 5;
 }
 }
 menu();
 }
 else if(digitalRead(up) == HIGH){
 line--;
 if(line < 1){
 line = 1;
 prognumber--;
 }
 menu();
 }
 else if(digitalRead(select) == HIGH){
 if(line == 1){
   prognumber--;
 }
 switch (prognumber) {                  
 case 1:                                
   first();
   break;                              
 case 2:
   second();
   break;
 case 3:
   third();
   break;
 case 4:
   fourth();
   break;
 default:
   first();
 }
 }
}

void LCDmenudisplay() {
 switch (prognumber) {                  
 case 1:                                
   lcd.print("First");  
   break;                              
 case 2:
   lcd.print("Second");
   break;
 case 3:
   lcd.print("Third");
   break;
 case 4:
   lcd.print("Fourth");
   break;
 }
 
}

void first() {
 digitalWrite(rly1Pin, HIGH);
 menu();
}

void second() {
   digitalWrite(rly2Pin, HIGH);
 menu();
}

void third() {
   digitalWrite(rly3Pin, HIGH);
 menu();
}
void fourth() {
   digitalWrite(rly4Pin, HIGH);
 menu();
}




Go Up