/*Author: BehindTheSciences.com */ #include // import the serial library #include #define trigPin 5 #define echoPin 6 #define RS 12 #define RW 2 #define EN 11 #define VO 13 #define D4 7 #define D5 8 #define D6 9 #define D7 10 SoftwareSerial ser(3, 4); // RX, TX int i = 1; // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 7, 8, 9, 10); void setup() { // Run Once Setup code ser.begin(9600); Serial.begin(9600); pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT); pinMode(A4, INPUT); pinMode(A5, INPUT); pinMode(A6, INPUT); pinMode(A7, INPUT); /*Initialisation of the LCD */ pinMode(D4, OUTPUT); pinMode(D5, OUTPUT); pinMode(D6, OUTPUT); pinMode(D7, OUTPUT); pinMode(EN, OUTPUT); digitalWrite(EN, HIGH); pinMode(RS, OUTPUT); digitalWrite(RS, LOW); pinMode(VO, OUTPUT); digitalWrite(VO, LOW); pinMode(RW, OUTPUT); digitalWrite(RW, LOW); delay(20); digitalWrite(D7, LOW); digitalWrite(D6, LOW); digitalWrite(D5, HIGH); digitalWrite(D4, HIGH); delay(10); digitalWrite(D7, LOW); digitalWrite(D6, LOW); digitalWrite(D5, HIGH); digitalWrite(D4, LOW); digitalWrite(D7, LOW); digitalWrite(D6, LOW); digitalWrite(D5, HIGH); digitalWrite(D4, LOW); digitalWrite(D7, HIGH); digitalWrite(D6, HIGH); digitalWrite(D7, LOW); digitalWrite(D6, LOW); digitalWrite(D5, LOW); digitalWrite(D4, LOW); digitalWrite(D7, HIGH); digitalWrite(D6, LOW); digitalWrite(D5, LOW); digitalWrite(D4, LOW); digitalWrite(D7, LOW); digitalWrite(D6, LOW); digitalWrite(D5, LOW); digitalWrite(D4, LOW); digitalWrite(D7, LOW); digitalWrite(D6, LOW); digitalWrite(D5, LOW); digitalWrite(D4, HIGH); digitalWrite(D7, LOW); digitalWrite(D6, LOW); digitalWrite(D5, LOW); digitalWrite(D4, LOW); digitalWrite(D7, LOW); digitalWrite(D6, HIGH); digitalWrite(D5, HIGH); digitalWrite(D4, HIGH); /*-----------------------*/ lcd.begin(16, 2); // Print a message to the LCD. lcd.setCursor(3, 0); lcd.print("Behind The"); lcd.setCursor(4, 1); lcd.print("Sciences"); delay(3000); lcd.clear(); lcd.setCursor(1, 0); lcd.print("Key Pressed:"); } void loop() { lcd.setCursor(i, 1); int key = getinp(); //Get key press if any if (key!=0xff) //if a key was pressed { i = i + 1; //index used to move the LCD cursor by 1. if (key == 15) { lcd.clear(); lcd.setCursor(1, 0); lcd.print("Key Pressed:"); i = 1; } else { lcd.print(key); //Print the pressed key delay(100); } } delay(100); } /*Function to scan matrix keypad for key presses*/ int getKey() { int c =0xFF; /*Set all columns to low */ digitalWrite(A0,HIGH); digitalWrite(A1,HIGH); digitalWrite(A2,HIGH); digitalWrite(A3,HIGH); /*Set Column 4 to low */ digitalWrite(A0,LOW); //C4 /*Read all rows one by one */ if(analogRead(A4)== LOW) c=0x0D; //R4 if(analogRead(A5)== LOW) c=0x0C; //R3 if(analogRead(A6)== LOW) c=0x0B; //R2 if(analogRead(A7)== LOW) c=0x0A; //R1 /*Set Column 3 to low */ digitalWrite(A0,HIGH); //C4 digitalWrite(A1,LOW); //C3 /*Read all rows one by one */ if(analogRead(A4)== LOW) c=0x0E; //R4 if(analogRead(A5)== LOW) c=9; //R3 if(analogRead(A6)== LOW) c=6; //R2 if(analogRead(A7)== LOW) c=3; //R1 /*Set Column 2 to low */ digitalWrite(A1,HIGH); //C3 digitalWrite(A2,LOW); //C2 /*Read all rows one by one */ if(analogRead(A4)== LOW) c=0; //R4 if(analogRead(A5)== LOW) c=8; //R3 if(analogRead(A6)== LOW) c=5; //R2 if(analogRead(A7)== LOW) c=2; //R1 /*Set Column 1 to low */ digitalWrite(A2,HIGH); //C2 digitalWrite(A3,LOW); //C1 /*Read all rows one by one */ if(analogRead(A4)== LOW) c=15; //R4 if(analogRead(A5)== LOW) c=7; //R3 if(analogRead(A6)== LOW) c=4; //R2 if(analogRead(A7)== LOW) c=1; //R1 return c; } /*Function to get input key pressed*/ int getinp() { int n; //value to store key press int d; //value used to temporarily store keypress n = 0xFF; while (n == 0xFF) //waits for keypress { n = getKey(); //Accessing the getKey() function d = n; //give value of key pressed to d while (d != 0xFF) //loop waits for the user to release the button { d = getKey(); // Scans keypad for a keypress } delay(300); // debouncing time } return n; //return value of key pressed }