Project
Dependencies: Hotboards_keypad TextLCD eeprom
main.cpp
- Committer:
- shivanandgowdakr
- Date:
- 2018-10-23
- Revision:
- 0:194ff03a2e6a
- Child:
- 1:1894419d5def
File content as of revision 0:194ff03a2e6a:
#include "mbed.h"
#include "LCDDisplay.h"
#include "i2ceeprom.h"
#include "Hotboards_keypad.h"
#include "Hotboards_keypad.h"
// Defines the keys array with it's respective number of rows & cols,
// and with the value of each key
char keys[ 4 ][ 4 ] =
{
{ '1' , '2' , '3' , 'A' },
{ '4' , '5' , '6' , 'B' },
{ '7' , '8' , '9' , 'C' },
{ '*' , '0' , '#' , 'D' }
};
// Defines the pins connected to the rows
DigitalInOut rowPins[ 4 ] = {D4,D5,D6,D7 };
// Defines the pins connected to the cols
DigitalInOut colPins[ 4 ] = { D8,D9,D10,D11};
//connect to the column pinouts of the keypad
Keypad keypad( makeKeymap( keys ), rowPins, colPins,4,4);
DigitalIn Mode1(PC_8);
DigitalIn Mode2(PC_6);
DigitalIn Mode3(PC_5);
//DigitalIn Mode4(PC_5);
//DigitalIn Mode5(PC_8);
//DigitalIn Mode6(PC_6);
bool PasswordStatus=false;
int mode=0;
DigitalIn Start(PA_12);
DigitalIn Stop(PA_11);
DigitalIn Reset(PB_12);
DigitalOut GreenLight(PB_1);
DigitalOut YellowLight(PB_15);
DigitalOut RedLight(PB_14);
DigitalOut SpareLight(PB_13);
DigitalOut Buzzer(PC_13);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
uint32_t Current_Mode=0;
float G_time=0;
float Y_time=0;
float R_time=0;
uint8_t StartButtonPressed=0;
uint8_t StopButtonPressed=0;
uint8_t ReStartButtonPressed=0;
Timer timer;
Timer timerred;
//Thread EveryOneSec;
void keypadEvent(KeypadEvent key);
bool ReadEachLightTime(int mode,char *mmss);
bool ReadAllTimesofEachMode(int MODE,char *Greentime,char *Yellowtime,char *Redtime);
void ExtractTimesinSecs(char *greentime,char *yellowtime,char *redtime,float *grntim,float *yeltim,float *redtim);
void SaveTimes(int Mode,float GreenTime,float YellowTime,float RedTime);
void CalculateTimeElapsed(float TimeElapsed, char *TimeStr);
bool PasswordAcceptance();
int ModeSelectTochange();
void fn(char rkey);
int main()
{
bool start=false;
Mode1.mode(PullUp);
Mode2.mode(PullUp);
Mode3.mode(PullUp);
// Mode4.mode(PullUp);
// Mode5.mode(PullUp);
// Mode6.mode(PullUp);
bool lcdflag=true;
Start.mode(PullUp);
Stop.mode(PullUp);
Reset.mode(PullUp);
float timeElapsed=0;
char buff[6]= {'\0'};
char Buffer[17]= {'\0'};
Clear_LCD();
Display_LCD(0,0," Initialising ");
SpareLight=1;
GreenLight=1;
YellowLight=1;
RedLight=1;
wait(1);
Clear_LCD();
//Current_Mode=1;
Display_LCD(0,0,"Select Mode Or");
Display_LCD(0,1,"Press Start ");
G_time=20;
Y_time=5;
R_time=10;
char key;
while(1) {
key=keypad.getKey();
if(key)
{
if(key=='*')
{
PasswordStatus=PasswordAcceptance();
}
if(PasswordStatus==true)
{
PasswordStatus=false;
mode= ModeSelectTochange();
if(mode>=1 && mode <=6)
{
fn((char)(mode+0x30));
mode=0;
}
else
{
Display_LCD(0,0," Invalid Mode ");
Display_LCD(0,1,"Mode b/w 1-6 ");
wait(2);
Clear_LCD();
Display_LCD(0,0,"Select Mode Or");
Display_LCD(0,1,"Press Start ");
}
}
else if(key=='A')
{
printf("Started \r\n");
StartButtonPressed=1;
StopButtonPressed=0;
ReStartButtonPressed=0;
printf("Started ************ %d \r\n",StartButtonPressed);
printf("Started ############## %d \r\n",StopButtonPressed);
printf("Started 88888888888888%d \r\n",ReStartButtonPressed);
timer.start();
}
else if(key=='B')
{
StartButtonPressed=0;
StopButtonPressed=1;
ReStartButtonPressed=0;
printf("Stopped \r\n");
wait(0.2);
}
else if(key=='C')
{
StartButtonPressed=0;
StopButtonPressed=0;
ReStartButtonPressed=1;
timer.stop();
printf("Reset \r\n");
wait(0.2);
}
else if(key=='D')
{
Clear_LCD();
Display_LCD(0,0,"Choose Mode");
wait(0.5);
char tempkey=keypad.waitForKey();
if(tempkey>=0x31 && tempkey<=0x36)
{
char Buff[20]={'\0'};
sprintf(Buff,"Current Mode %c",tempkey);
Display_LCD(0,1,Buff);
Current_Mode=(int)(tempkey-0x30);
wait(1);
Clear_LCD();
}
else
{
Display_LCD(0,0,"Invld Mod Entrd");
wait(1);
Clear_LCD();
}
}
else
{}
}
// if(Mode1==0)
if(Current_Mode==1)
{
printf("Am here in Mode 1\r\n");
G_time=20;
Y_time=5;
R_time=10;
// ReadCorresspondingTimes(Current_Mode,&G_time,&Y_time,&R_time);
printf("Current MOde 1 \r\n");
// Display_LCD(0,1,"Mode: 1");
Y_time=Y_time+G_time;
R_time=R_time+Y_time;
wait(0.2);
}
// if(Mode2==0)
if(Current_Mode==2)
{
G_time=2;
Y_time=5;
R_time=1;
Current_Mode=2;
// ReadCorresspondingTimes(Current_Mode,&G_time,&Y_time,&R_time);
printf("Current MOde 2 \r\n");
// Display_LCD(0,1,"Mode: 2");
Y_time=Y_time+G_time;
R_time=R_time+Y_time;
wait(0.1);
}
// if(Mode3==0)
if(Current_Mode==3)
{
G_time=12;
Y_time=5;
R_time=10;
Current_Mode=3;
// ReadCorresspondingTimes(Current_Mode,&G_time,&Y_time,&R_time);
printf("Current MOde 3 \r\n");
// Display_LCD(0,1,"Mode: 3");
Y_time=Y_time+G_time;
R_time=R_time+Y_time;
wait(0.1);
}
// if(Mode4==0)
if(Current_Mode==4)
{
G_time=20;
Y_time=5;
R_time=10;
Current_Mode=4;
// ReadCorresspondingTimes(Current_Mode,&G_time,&Y_time,&R_time);
printf("Current MOde 1 \r\n");
Display_LCD(0,1,"Mode: 4");
Y_time=Y_time+G_time;
R_time=R_time+Y_time;
wait(0.2);
}
//
if(Current_Mode==5)
{
G_time=2;
Y_time=5;
R_time=1;
Current_Mode=5;
printf("Current MOde 2 \r\n");
// ReadCorresspondingTimes(Current_Mode,&G_time,&Y_time,&R_time);
Display_LCD(0,1,"Mode: 5");
Y_time=Y_time+G_time;
R_time=R_time+Y_time;
wait(0.2);
}
//
// if(Mode6==0)
if(Current_Mode==6)
{
G_time=12;
Y_time=5;
R_time=10;
Current_Mode=3;
printf("Current MOde 3 \r\n");
// ReadCorresspondingTimes(Current_Mode,&G_time,&Y_time,&R_time);
Display_LCD(0,1,"Mode: 6");
Y_time=Y_time+G_time;
R_time=R_time+Y_time;
wait(0.2);
}
if(Start==0)
{
printf("Started \r\n");
StartButtonPressed=1;
StopButtonPressed=0;
ReStartButtonPressed=0;
printf("Started ************ %d \r\n",StartButtonPressed);
printf("Started ############## %d \r\n",StopButtonPressed);
printf("Started 88888888888888%d \r\n",ReStartButtonPressed);
timer.start();
}
if(Stop==0)
{
StartButtonPressed=0;
StopButtonPressed=1;
ReStartButtonPressed=0;
printf("Stopped \r\n");
wait(0.2);
}
if(Reset==0)
{
StartButtonPressed=0;
StopButtonPressed=0;
ReStartButtonPressed=1;
timer.stop();
printf("Reset \r\n");
wait(0.2);
}
if(StartButtonPressed==1 && StopButtonPressed==0 && ReStartButtonPressed==0 ) {
printf(" Read Time %f\r\n",timer.read()); //while
if(timer.read()<=G_time ) {
if(lcdflag==true)
{
Clear_LCD();
lcdflag=false;
}
// timer.start();
printf(" Read Time %f\r\n",timer.read());
Display_LCD(0,0,"Green Light ");
GreenLight=0;
YellowLight=1;
RedLight=1;
wait(0.1);
} else if( timer.read()>G_time && timer.read()<=Y_time ) {
Display_LCD(0,0,"Yellow Light ");
GreenLight=1;
YellowLight=0;
RedLight=1;
wait(0.1);
printf(" Read Time %f\r\n",timer.read());
}
else if( timer.read()>Y_time && timer.read()<=R_time )
{
Display_LCD(0,0,"Red Light ");
GreenLight=1;
YellowLight=1;
RedLight=0;
timerred.start();
wait(0.1);
printf(" Read Time %f\r\n",timer.read());
}
//else if(timer.read()>R_time) {
// Display_LCD(0,0,"Time Lmt Excded ");
// GreenLight=1;
// YellowLight=1;
// RedLight=1;
// wait(0.2);
//
//
// }
}
// timeElapsed=timer.read();
// CalculateTimeElapsed(timeElapsed,buff);
if(StartButtonPressed==0 && StopButtonPressed==1 && ReStartButtonPressed==0 ) {
timeElapsed=timer.read();
timer.stop();
printf("Total Time = %f\r\n",timeElapsed);
CalculateTimeElapsed(timeElapsed,buff);
sprintf(Buffer,"Total Time %s",buff);
Display_LCD(0,0,Buffer);
memset(Buffer,'\0',17);
timeElapsed=timerred.read();
timerred.stop();
CalculateTimeElapsed(timeElapsed,buff);
memset(Buffer,'\0',17);
sprintf(Buffer,"Tim af Red %s",buff);
Display_LCD(0,1,Buffer);
memset(Buffer,'\0',17);
wait(0.1);
// /******************************************/
// ReStartButtonPressed=1;
// StartButtonPressed=0;
// StopButtonPressed=0;
// /******************************************/
}
if(StartButtonPressed==0 && StopButtonPressed==0 && ReStartButtonPressed==1 ) {
Display_LCD(0,0,"Done Resetting");
StartButtonPressed=0;
StopButtonPressed=0;
ReStartButtonPressed=0;
Clear_LCD();
}
if(StartButtonPressed==0 && StopButtonPressed==0 && ReStartButtonPressed==0 ) {
GreenLight=1;
YellowLight=1;
RedLight=1;
timer.reset();
timerred.reset();
// printf(" Last Line\r\n");
Display_LCD(0,0,"Select Mode Or");
Display_LCD(0,1,"Press Start ");
lcdflag=true;
}
}
}
void ReadTimes()
{
char rkey;
char Str[5]= {'\0'};
char Star[5]={'\0'};
char text[5]={'\0'};
char GreenTime[6]={'\0'};
char YellowTime[6]={'\0'};
char RedTime[6]={'\0'};
bool Staus=false;
rkey=keypad.waitForKey();
switch(rkey)
{
case '1':
{
Staus=ReadAllTimesofEachMode(1,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
SaveTimes(1,GTIME,YTIME,RTIME);
}
Staus=false;
}
break;
case '2':
{
Staus=ReadAllTimesofEachMode(2,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
SaveTimes(2,GTIME,YTIME,RTIME);
}
Staus=false;
}
break;
case '3':
{
Staus=ReadAllTimesofEachMode(3,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
SaveTimes(3,GTIME,YTIME,RTIME);
}
Staus=false;
}
break;
case '4':
{
Staus=ReadAllTimesofEachMode(4,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
SaveTimes(4,GTIME,YTIME,RTIME);
}
Staus=false;
}
break;
case '5':
{
Staus=ReadAllTimesofEachMode(5,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
SaveTimes(5,GTIME,YTIME,RTIME);
}
Staus=false;
}
break;
case '6':
{
Staus=ReadAllTimesofEachMode(6,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
SaveTimes(6,GTIME,YTIME,RTIME);
}
Staus=false;
}
break;
default:
{
printf("No Mode\r\n");
Clear_LCD();
Display_LCD(0,0," InValid Mode ");
}
}
}
bool ReadEachLightTime(int mode,char *mmss,char *lightTimeName)
{
Clear_LCD();
char Buffer[17]= {'\0'};
char Buffer1[17]="Entr Time Mode:";
char Buffer2[17]="Tim MM:SS";
uint8_t index1=0;
char key='\0';
char str[6]= {'\0'};
Clear_LCD();
sprintf(Buffer,"%s%d",Buffer1,mode);
Display_LCD(0,0,Buffer);
memset(Buffer,'\0',16);
sprintf(Buffer,"%s %s",lightTimeName,Buffer2);
Display_LCD(0,1,Buffer);
wait(3);
Clear_LCD();
Display_LCD(0,0,"Press # Set ");
Display_LCD(0,1,"Prss * to Exit ");
key=keypad.waitForKey();
if(key=='#') {
Clear_LCD();
Display_LCD(0,0,"MM:SS ");
index1=0;
while(index1==0 ||(index1<=4 && key !='#' && key!='*')) {
key=keypad.waitForKey();
str[index1]=key;
if(index1==2) {
str[index1]=':';
index1++;
str[index1]=key;
}
index1++;
Display_LCD(0,0,"MM:SS ");
Display_LCD(0,1,"MM:SS ");
Display_LCD(0,1,str);
}
Clear_LCD();
Display_LCD(0,0,"Saving Mode ");
Display_LCD(0,1,str);
memcpy(mmss,str,5);
mmss[6]='\0';
wait(1);
Clear_LCD();
return true;
} else if(key=='*'){
Display_LCD(0,0,"Mode Not Set ");
Display_LCD(0,1,"Retains PrevMode");
return false;
}
}
bool ReadAllTimesofEachMode(int MODE,char *Greentime,char *Yellowtime,char *Redtime)
{
bool Greenflag=false,Yellowflag=false,Redflag=false;
Greenflag=ReadEachLightTime(MODE,Greentime,"Green");
if(Greenflag==true) {
Yellowflag=ReadEachLightTime(MODE,Yellowtime,"Yellow");
if(Yellowflag==true) {
Redflag=ReadEachLightTime(MODE,Redtime,"Red");
if(Redflag==true) {
return true;
} else {
return false;
}
} else {
return false;
}
} else
return false;
}
void ExtractTimesinSecs(char *greentime,char *yellowtime,char *redtime,float *grntim,float *yeltim,float *redtim)
{
int mins,secs;
if( greentime[2]==':') {
mins=(( greentime[0]-0x30)*10)+(greentime[1]-0x30);
secs=((greentime[3]-0x30)*10)+(greentime[4]-0x30);
}
*grntim=mins*60+secs;
if( yellowtime[2]==':') {
mins=(( yellowtime[0]-0x30)*10)+(yellowtime[1]-0x30);
secs=((yellowtime[3]-0x30)*10)+(yellowtime[4]-0x30);
}
*yeltim=mins*60+secs;
if( redtime[2]==':') {
mins=(( redtime[0]-0x30)*10)+(redtime[1]-0x30);
secs=((redtime[3]-0x30)*10)+(redtime[4]-0x30);
}
*redtim=mins*60+secs;
}
void SaveTimes(int Mode,float GreenTime,float YellowTime,float RedTime)
{
bool flag=false;
flag=WriteCorresspondingTimes(Mode, GreenTime,YellowTime,RedTime);
{
if(flag==true) {
Clear_LCD();
Display_LCD(0,0," Mode Save Success");
wait(1);
} else {
Clear_LCD();
Display_LCD(0,0," Mode Save Failure");
wait(1);
}
}
}
void CalculateTimeElapsed(float TimeElapsed, char *TimeStr)
{
memset(TimeStr,'\0',sizeof TimeStr);
int mins=(int)TimeElapsed/60;
int secs=(int)TimeElapsed%60;
sprintf(TimeStr,"%2d:%02d",mins,secs);
}
bool PasswordAcceptance()
{
Clear_LCD();
Display_LCD(0,0,"Enter Password ");
char PasswordStr[5]={'\0'};
char temp='\0';
temp=keypad.waitForKey();
PasswordStr[0]=temp;
Display_LCD(0,1,PasswordStr);
temp=keypad.waitForKey();
PasswordStr[1]=temp;
Display_LCD(0,1,PasswordStr);
temp=keypad.waitForKey();
PasswordStr[2]=temp;
Display_LCD(0,1,PasswordStr);
temp=keypad.waitForKey();
PasswordStr[3]=temp;
Display_LCD(0,1,PasswordStr);
printf("Password Str %s\r\n",PasswordStr);
if(PasswordStr[0]=='1' && PasswordStr[1] =='1' && PasswordStr[2]=='1' && PasswordStr[3]=='1')
{
Display_LCD(0,0,"Accepted ");
printf("Accepted\r\n");
return true;
}
return false;
}
int ModeSelectTochange()
{
Clear_LCD();
Display_LCD(0,0,"Select Mode 1-6 ");
char str[2]={'\0'};
char temp='\0';
temp=keypad.waitForKey();
if(temp>=0x31 && temp<=0x36)
{
Display_LCD(0,1,"Mode Is: ");
str[0]=temp;
Display_LCD(9,1,str);
wait(1);
return (temp-0x30);
}
Display_LCD(0,0,"Invalid Mode");
return -1;
}
void fn(char rkey)
{
char GreenTime[10]={'\0'},YellowTime[10]={'\0'},RedTime[10]={'\0'};
bool Staus=false;
switch(rkey)
{
case '1':
{
Staus=ReadAllTimesofEachMode(1,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
// SaveTimes(1,GTIME,YTIME,RTIME);
Display_LCD(0,0,"Done Saving ");
Display_LCD(0,1,"Mode Saved");
wait(1);
Clear_LCD();
}
Staus=false;
}
break;
case '2':
{
Staus=ReadAllTimesofEachMode(2,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
// SaveTimes(2,GTIME,YTIME,RTIME);
Display_LCD(0,0,"Done Saving ");
Display_LCD(0,1,"Mode Saved");
wait(1);
Clear_LCD();
}
Staus=false;
}
break;
case '3':
{
Staus=ReadAllTimesofEachMode(3,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
// SaveTimes(3,GTIME,YTIME,RTIME);
Display_LCD(0,0,"Done Saving ");
Display_LCD(0,1,"Mode Saved");
wait(1);
Clear_LCD();
}
Staus=false;
}
break;
case '4':
{
Staus=ReadAllTimesofEachMode(4,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
// SaveTimes(4,GTIME,YTIME,RTIME);
Display_LCD(0,0,"Done Saving ");
Display_LCD(0,1,"Mode Saved");
wait(1);
Clear_LCD();
}
Staus=false;
}
break;
case '5':
{
Staus=ReadAllTimesofEachMode(5,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
// SaveTimes(5,GTIME,YTIME,RTIME);
Display_LCD(0,0,"Done Saving ");
Display_LCD(0,1,"Mode Saved");
wait(1);
Clear_LCD();
}
Staus=false;
}
break;
case '6':
{
Staus=ReadAllTimesofEachMode(6,GreenTime,YellowTime,RedTime);
if(Staus==true)
{
float GTIME=0,YTIME=0,RTIME=0;
ExtractTimesinSecs(GreenTime,YellowTime,RedTime,>IME,&YTIME,&RTIME);
// SaveTimes(6,GTIME,YTIME,RTIME);
Display_LCD(0,0,"Done Saving ");
Display_LCD(0,1,"Mode Saved");
wait(1);
Clear_LCD();
}
Staus=false;
}
break;
default:
Display_LCD(0,0,"No Mode saved");
Display_LCD(0,1,"Retns Prev Mode");
wait(1);
Clear_LCD();
printf("No Mode\r\n");
}
}