#include <LiquidCrystal.h>
#define BUTTON_UP 0x08
#define BUTTON_DOWN 0x04
#define BUTTON_LEFT 0x10
#define BUTTON_RIGHT 0x02
#define BUTTON_SELECT 0x01
#define BL_OFF 0
#define RED 1
#define GREEN 2
#define YELLOW 3
#define BLUE 4
#define PURPLE 5
#define TEAL 6
#define WHITE 7
#define LCD_Backlight 10
#define Red 6
#define Green 5
#define Blue 3
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
uint8_t readButtons();
void setBacklight(uint8_t status);
uint8_t readButtons() {
uint8_t reply = 0x00;
float select_voltage = analogRead(0) * (5.0 / 1023.0);
float up_voltage = analogRead(2) * (5.0 / 1023.0);
float down_voltage = analogRead(3) * (5.0 / 1023.0);
float right_voltage = analogRead(4) * (5.0 / 1023.0);
float left_voltage = analogRead(1) * (5.0 / 1023.0);
if(right_voltage == 0) reply |= (1UL << 1);//BUTTON_RIGHT
if(up_voltage == 0) reply |= (1UL << 3);//BUTTON_UP
if(down_voltage == 0) reply |= (1UL << 2);//BUTTON_DOWN
if(left_voltage == 0) reply |= (1UL << 4);//BUTTON_LEFT
if(select_voltage == 0) reply |= (1UL << 0);//BUTTON_SELECT
return reply;
}
// Function to set the backlight (RGB LED here)
void setBacklight(uint8_t status) {
//Set LED RGB light by providing rgb values (0-255)
switch(status){
case BL_OFF:
{
analogWrite(Red, 0);
analogWrite(Green, 0);
analogWrite(Blue, 0);
break;
}
case WHITE:
{
analogWrite(Red, 255);
analogWrite(Green, 255);
analogWrite(Blue, 255);
break;
}
case RED:
{
analogWrite(Red, 255);
analogWrite(Green, 0);
analogWrite(Blue, 0);
break;
}
case GREEN:
{
analogWrite(Red, 0);
analogWrite(Green, 255);
analogWrite(Blue, 0);
break;
}
case BLUE:
{
analogWrite(Red, 0);
analogWrite(Green, 0);
analogWrite(Blue, 255);
break;
}
case YELLOW:
{
analogWrite(Red, 255);
analogWrite(Green, 255);
analogWrite(Blue, 0);
break;
}
case PURPLE:
{
analogWrite(Red, 128);
analogWrite(Green, 0);
analogWrite(Blue, 128);
break;
}
case TEAL:
{
analogWrite(Red, 0);
analogWrite(Green, 128);
analogWrite(Blue, 128);
break;
}
}
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(LCD_Backlight, OUTPUT);
digitalWrite(LCD_Backlight, HIGH);
lcd.clear();
pinMode(Red, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT);
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Basilan buton:");
lcd.setCursor(0, 1);
byte pressedButton = readButtons();
if(pressedButton & BUTTON_RIGHT){
lcd.print(" Sag ");
setBacklight(RED);
}
if(pressedButton & BUTTON_UP){
lcd.print(" Yukari ");
setBacklight(GREEN);
}
if(pressedButton & BUTTON_DOWN){
lcd.print(" Asagi ");
setBacklight(BLUE);
}
if(pressedButton & BUTTON_LEFT){
lcd.print(" sol ");
setBacklight(YELLOW);
}
if(pressedButton & BUTTON_SELECT){
lcd.print(" Seciniz ");
setBacklight(PURPLE);
}
if(!pressedButton){
lcd.print(" ");
setBacklight(WHITE);
}
}