// UPDATED AS OF "Thursday 09/03/2023" @ "17:00"
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <LedControl.h>
#include <IRremote.h>
#define joyX A0
#define joyY A1
#define SEL 35
#define IR_RECEIVE_PIN 33
#define IR_BUTTON_POWER 162
#define IR_BUTTON_UP 2
#define IR_BUTTON_DOWN 152
#define IR_BUTTON_LEFT 224
#define IR_BUTTON_RIGHT 144
int xValue, yValue, UD, LR, button;
int x_coordinate = 3;
int y_coordinate = 3;
LiquidCrystal lcd (12,11,5,4,3,2);
LedControl lc=LedControl(27,31,29,1);
void setup() {
Serial.begin(9600);
IrReceiver.begin(IR_RECEIVE_PIN);
pinMode(SEL, INPUT_PULLUP);
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
lcd.begin(16,2);
lcd.print("Reddu Dottu");
lcd.setCursor(0,1);
lcd.print("Mode: ");
if (EEPROM.read(9) == 255) {
EEPROM.write(9,1);
lcd.print("Joystick !");
}
else if (EEPROM.read(9) == 1) {
lcd.print("Joystick !");
}
else if (EEPROM.read(9) == 2) {
lcd.print ("Remote ->");
}
}
void loop() {
//JOYYYYYYYY
if (EEPROM.read(9) == 1){
//Reading X and Y values from joystick
UD = analogRead(A1);
LR = analogRead(A0);
int x_translate = map(LR, 0, 1023, 0, 8); //This maps the values
int y_translate = map(UD, 0, 1023, 8, 0);
lc.clearDisplay(0);
lc.setLed(0,y_translate,x_translate,true);
lc.setLed(0,y_translate-1,x_translate,true);
lc.setLed(0,y_translate,x_translate-1,true);
lc.setLed(0,y_translate-1,x_translate-1,true);
button = digitalRead(SEL);
if (button == 0){
x_coordinate = 3;
y_coordinate = 3;
EEPROM.write(9,2);
lcd.setCursor(6,6);
lcd.print (" ");
lcd.setCursor(6,6);
lcd.print("Remote ->");
}
if (IrReceiver.decode()) {
IrReceiver.resume();
int command = IrReceiver.decodedIRData.command;
switch (command) {
case IR_BUTTON_POWER: {
Serial.println("POWER");
x_coordinate = 3;
y_coordinate = 3;
EEPROM.write(9,2);
lcd.setCursor(6,6);
lcd.print (" ");
lcd.setCursor(6,6);
lcd.print("Remote ->");
break;
}
}
}
// not in shutdown mode
delay(50);
}
//Remote time
if (EEPROM.read(9) == 2){
lc.clearDisplay(0);
lc.setLed(0,y_coordinate,x_coordinate,true);
lc.setLed(0,y_coordinate,x_coordinate+1,true);
lc.setLed(0,y_coordinate+1,x_coordinate,true);
lc.setLed(0,y_coordinate+1,x_coordinate+1,true);
if (IrReceiver.decode()) {
IrReceiver.resume();
int command = IrReceiver.decodedIRData.command;
switch (command) {
case IR_BUTTON_UP: {
Serial.println("UP");
if (y_coordinate >= 0){
y_coordinate = y_coordinate - 1;
}
break;
}
case IR_BUTTON_DOWN: {
Serial.println("DOWN");
if (y_coordinate <=6){
y_coordinate = y_coordinate + 1;
}
break;
}
case IR_BUTTON_LEFT: {
Serial.println("LEFT");
if (x_coordinate <= 6){
x_coordinate = x_coordinate + 1;
}
break;
}
case IR_BUTTON_RIGHT: {
Serial.println("RIGHT");
if (x_coordinate >= 0){
x_coordinate = x_coordinate -1;
}
break;
}
case IR_BUTTON_POWER: {
Serial.println("POWER");
x_coordinate = 3;
y_coordinate = 3;
EEPROM.write(9,1);
lcd.setCursor(6,6);
lcd.print (" ");
lcd.setCursor(6,6);
lcd.print("Joystick !");
break;
}
default: {
Serial.println("Button not recognized");
}
}
}
button = digitalRead(SEL);
if (button == 0){
EEPROM.write(9,1);
lcd.print (" ");
lcd.setCursor(6,6);
lcd.print("Joystick !");
}
delay (50);
}
}