When entering the brightness mode, the current value is read from the Arduino EEPROM. Two other buttons in the remote are used to increase the value and decrease the value, and adjust the LCD accordingly.
When entering the contrast mode, the current value for contrast is read from the Arduino EEPROM. Two other buttons in the remote are used to increase the value and decrease the value, and adjust the LCD accordingly.
When you exit the adjustment mode, the current settings for brightness and contrast are saved in the Arduino EEPROM. I've used addresses 0 and 1 in the EEPROM space to save the two values. The EEPROM of the Arduino ATmega 168 has 512 bytes of space and the ATmega328 has 1 K bytes of space.
The code for selecting the mode, read and write to EEPROM is as follows. Pressing a specified key in the remote will invoke the following code:
case KEYDISPLAY:
BC++;
if (BC%3==0){
lcd.setCursor(0,4);
lcd.print(" ");
EEPROM.write(BRIADDR,brightness); // Save value
EEPROM.write(CONADDR,contrast); // Save Value
}
if (BC%3==1){
lcd.setCursor(0,4);
lcd.print("BRI ");
brightness=EEPROM.read(BRIADDR); // Read value
lcd.print(brightness);
}
if (BC%3==2 ){
lcd.setCursor(0,4);
lcd.print("CON ");
contrast=EEPROM.read(CONADDR); // Read value
lcd.setCursor(8,0);
lcd.print(contrast);
}
delay(100);
break;
To adjust the brightness and contrast, we send a value to a specific address in the LCD I2C interface/controller (This is a I2C LCD from web4robot). We use the Arduino wire library. The I2C address for the LCD is 0x4C, 0xFE is a prefix indicating that it is a command and not text to be displayed. 0x03 is the command for brightness and ox04 is the command for contrast. After sending the prefix and the command, the value is sent. Brightness value is 0-255 and contrast value is 0-100. The code is as follows:
// Routines for LCD Adjustment
// For LCD backlight adjustment
void BackLight(uint8_t bright)
{
Wire.beginTransmission(0x4C);
Wire.send(0xFE);
Wire.send(0x03);
Wire.send(bright);
Wire.endTransmission();
delay(25);
}
// For LCD contrast adjustment
void Contrast(uint8_t cont)
{
Wire.beginTransmission(0x4C);
Wire.send(0xFE);
Wire.send(0x04);
Wire.send(cont);
Wire.endTransmission();
delay(25);
}
1 comment:
Great job, Please share full sketch.
Post a Comment