Hi guys, my arduino uses an I2C converter on the LCD. I'm following the Tech-Zen tutorial.
http://tech-zen.tv/episodes/shows/make-it-work/episodes/keypad-input-to-an-arduino-episode-11
But as the LCD is backlit it doesn't seem to like this code.
void setup()
{
lcd.init(); // initialize the lcd
//lcd.init();
// Print a message to the LCD.
lcd.backlight();
displayCodeEntryScreen();
//setup and turn off both LEDs
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
digitalWrite(redLED, LOW);
digitalWrite(greenLED, LOW);
}
Can anyone help or tell me how to fix??
Windows 7 Professional. IDE 1.6.8.
Error Messages:
C:\Users\q\Documents\Arduino\Keypad_Basic_1\Keypad_Basic_1.ino:10:17: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char* ourCode = "1234";
- ^*
Keypad_Basic_1:29: error: invalid conversion from 'int' to 't_backlighPol' [-fpermissive]
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display - ^*
In file included from C:\Users\q\Documents\Arduino\Keypad_Basic_1\Keypad_Basic_1.ino:2:0:
C:\Users\q\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:53:4: error: initializing argument 3 of 'LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)' [-fpermissive] - LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);*
- ^*
C:\Users\q\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h: In function 'void setup()':
C:\Users\q\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:154:9: error: 'int LiquidCrystal_I2C::init()' is private - int init();*
- ^*
Keypad_Basic_1:33: error: within this context - lcd.init(); // initialize the lcd*
- ^*
exit status 1
invalid conversion from 'int' to 't_backlighPol' [-fpermissive]
Full code here:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
//constants for LEDs
int greenLED = 12;
int redLED = 13;
//set our code
char* ourCode = "1234";
int currentPosition = 0;
//define the keypad
const byte rows = 4;
const byte cols = 4;
char keys[rows][cols] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[rows] = {11,10,9,8};
byte colPins[cols] = {7,6,5,4};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
//lcd.init();
// Print a message to the LCD.
lcd.backlight();
displayCodeEntryScreen();
//setup and turn off both LEDs
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
digitalWrite(redLED, LOW);
digitalWrite(greenLED, LOW);
}
void loop()
{
int l;
char key = keypad.getKey();
if (int(key) != 0) {
lcd.setCursor(14,3);
lcd.print(" ");
lcd.setCursor(14,3);
for (l=0; l<=currentPosition; ++l)
{
lcd.print("*");
}
if (key == ourCode[currentPosition])
{
++currentPosition;
if (currentPosition == 4)
{
unlockDoor();
currentPosition = 0;
}
} else {
invalidCode();
currentPosition = 0;
}
}
}
void invalidCode()
{
digitalWrite(redLED, HIGH);
clearScreen();
lcd.setCursor(0,0);
lcd.print("********************");
lcd.setCursor(0,1);
lcd.print("** ACCESS DENIED! **");
lcd.setCursor(0,2);
lcd.print("** INVALID CODE **");
lcd.setCursor(0,3);
lcd.print("********************");
delay(5000);
digitalWrite(redLED, LOW);
displayCodeEntryScreen();
}
void unlockDoor()
{
digitalWrite(greenLED, HIGH);
clearScreen();
lcd.setCursor(0,0);
lcd.print("********************");
lcd.setCursor(0,1);
lcd.print("** ACCESS GRANTED **");
lcd.setCursor(0,2);
lcd.print("** WELCOME!! **");
lcd.setCursor(0,3);
lcd.print("********************");
//add any code to unlock the door here
delay(5000);
digitalWrite(greenLED, LOW);
displayCodeEntryScreen();
}
void displayCodeEntryScreen()
{
clearScreen();
lcd.setCursor(0,0);
lcd.print("Let's Make It Secret");
lcd.setCursor(0,1);
lcd.print("Code Project...");
lcd.setCursor(0,2);
lcd.print("Enter Secret Code:");
}
void clearScreen()
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
}