#include <LiquidCrystal_I2C.h>
#define rled A0
#define bled A1
LiquidCrystal_I2C lcd(0x27,20,4);
unsigned int Pin[12]={11,2,3,4,5,6,7,8,9,10,13,12};
String name[12]={"0","1","2","3","4","5","6","7","8","9","dlt","Enter"};
uint8_t counter;
const unsigned long meterTimeOut=100000;
unsigned long pretime;
char receivedToken[20];
void setup()
{
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
lcd.init();
lcd.backlight();
loadingScreen();
Serial.begin(9600); //set serial communication for diagnosisi
for(int i=0;i<=11;i++) //to set all led pin as output and inialite to low
{
pinMode(Pin[i],OUTPUT);
digitalWrite(Pin[i],LOW);
}
Serial.println("setupdone now ready to receive token");
counter =0;
digitalWrite(rled,HIGH);
}
void loop()
{
homescreen();
digitalWrite(bled,LOW);
if (Serial.available())
{
String fNum =Serial.readString();
Serial.print("received :");
Serial.println(fNum);
if(fNum.toInt() == 2) //THIS IS WAKEUP SOUND
{
digitalWrite(bled,HIGH);
press("16");
counter=0;
Serial.print("READY TO RECEIVE YOUR TOKEN NUMBER");
receiveKey();
}
lcd.clear();
}
}
void receiveKey()
{
pretime=millis();
updateToken();
while(millis()-pretime < meterTimeOut)
{
if (Serial.available())
{
String cNum =Serial.readString();
Serial.print("received :");
Serial.println(cNum);
if(cNum.toInt() == 15)
{
if(counter > 0)
{
press(cNum);
counter--;
lcd.setCursor(counter,2);
lcd.print(" ");
lcd.setCursor(counter,2);
}
}
else
{
if(press(cNum)==HIGH)
{
counter++;
// receivedToken[counter]=(cNum.toInt()-5)+'0';
}
}
if(counter==20)
{
press("16");
counter=0;
succeedDisplay();
for (int i = 0; i < 20; i++)
{
receivedToken[i] = '\0';
}
break;
}
Serial.print("count is :");
Serial.println(counter);
}
}
Serial.print("LOOP FOR RECEIVING TOKEN TERMINATED");
}
bool press(String codeId)
{
uint8_t pinNumber;
String pinName;
switch(codeId.toInt())
{
case 5:
pinNumber =Pin[0];
pinName=name[0];
break;
case 6:
pinNumber = Pin[1];
pinName=name[1];
break;
case 7:
pinNumber = Pin[2];
pinName=name[2];
break;
case 8:
pinNumber = Pin[3];
pinName=name[3];
break;
case 9:
pinNumber = Pin[4];
pinName=name[4];
break;
case 10:
pinNumber = Pin[5];
pinName=name[5];
break;
case 11:
pinNumber = Pin[6];
pinName=name[6];
break;
case 12:
pinNumber = Pin[7];
pinName=name[7];
break;
case 13:
pinNumber = Pin[8];
pinName=name[8];
break;
case 14:
pinNumber = Pin[9];
pinName=name[9];
break;
case 15:
pinNumber = Pin[10];
pinName=name[10];
break;
case 16:
pinNumber = Pin[11];
pinName=name[11];
break;
default:
return LOW;
}
digitalWrite(pinNumber,HIGH);
Serial.print("Pin ");
Serial.print(pinName);
if(pinName!="dlt" && pinName!="Enter")
lcd.print(pinName);
Serial.println(" is pressed");
delay(500);
digitalWrite(pinNumber,LOW);
delay(500);
//updateToken();
return HIGH;
}
void loadingScreen()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VOICE BASE AUTOMATIC");
lcd.setCursor(0,1);
lcd.print("ELECTRIC TOKEN ENTRY");
lcd.setCursor(0,2);
lcd.print(" SYSTEM INITIALIZE ");
lcd.setCursor(0,3);
lcd.print("PLEASE WAIT");
for(int k=11;k<20;k++)
{
lcd.setCursor(k,3);
lcd.print(".");
delay(500);
}
}
void homescreen()
{
//lcd.clear();
lcd.setCursor(0,0);
lcd.print("VOICE BASE AUTOMATIC");
lcd.setCursor(0,1);
lcd.print("ELECTRIC TOKEN ENTRY");
lcd.setCursor(0,2);
lcd.print("SAY WAKE-UP SOUND TO");
lcd.setCursor(0,3);
lcd.print("INITIATE TOKEN ENRTY");
}
void updateToken()
{
String Token;
for(uint8_t i=0;i<20;i++)
{
Token=Token+String(receivedToken[i]);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("TOKEN RECEIVED IS: ");
lcd.setCursor(0,1);
lcd.print("--------<<>>--------");
//lcd.print(Token);
lcd.setCursor(0,3);
lcd.print("--------<<>>--------");
lcd.setCursor(0,2);
}
void succeedDisplay()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("TOKEN RECEIVED IS: ");
lcd.setCursor(0,1);
lcd.print("--------<<>>--------");
lcd.setCursor(0,2);
lcd.print(" TOKEN ACCEPTED ");
lcd.setCursor(0,3);
lcd.print("--------<<>>--------");
delay(3000);
}