#include <IRremote.h>
#include <LiquidCrystal.h>
#include <LedControl.h>
#define LED_CS 12
#define LED_DIN 13
#define LED_CLK 38
#define JOY_VERT A0
#define JOY_HORZ A1
#define JOY_SEL 32
IRrecv receiver(30);
LiquidCrystal lcd(7, 6, 22, 24, 26, 28);
LedControl LED_Disp(13, 38, 12, 1);
int Y;
int X;
bool RemoteOrJoystick = true; //true = Remote, false = Joystick
bool joyHeld;
void setup() {
lcd.begin(16,2);
lcd.print("State: ");
lcd.setCursor(0, 7);
lcd.print("Remote");
lcd.setCursor(0, 7);
LED_Disp.clearDisplay(0);
receiver.enableIRIn();
pinMode(JOY_VERT, INPUT);
pinMode(JOY_HORZ, INPUT);
pinMode(JOY_SEL, INPUT_PULLUP);
Y = 3;
X = 3;
}
void loop() {
LED_Disp.setLed(0,X,Y,true);
LED_Disp.setLed(0,X + 1,Y,true);
LED_Disp.setLed(0,X,Y + 1,true);
LED_Disp.setLed(0,X + 1,Y + 1,true);
if(digitalRead(JOY_SEL) == HIGH){
joyHeld = false;
}
if (digitalRead(JOY_SEL) == LOW && joyHeld != true) {
if(RemoteOrJoystick == false){
RemoteOrJoystick = true;
lcd.print(" ");
lcd.setCursor(0, 7);
lcd.print("Remote");
lcd.setCursor(0, 7);
}
else{
RemoteOrJoystick = false;
lcd.print(" ");
lcd.setCursor(0, 7);
lcd.print("Joystick");
lcd.setCursor(0, 7);
}
joyHeld = true;
}
if (receiver.decode()){
if(receiver.decodedIRData.command == 162){
if(RemoteOrJoystick == false){
RemoteOrJoystick = true;
lcd.print(" ");
lcd.setCursor(0, 7);
lcd.print("Remote");
lcd.setCursor(0, 7);
}
else{
RemoteOrJoystick = false;
lcd.print(" ");
lcd.setCursor(0, 7);
lcd.print("Joystick");
lcd.setCursor(0, 7);
}
}
if(RemoteOrJoystick == true){
if (receiver.decode()){
switch(receiver.decodedIRData.command){
case 2:
LED_Disp.clearDisplay(0);
if (X > -1){X-=1;}
break;
case 224:
LED_Disp.clearDisplay(0);
if (Y < 7){Y+=1;}
break;
case 144:
LED_Disp.clearDisplay(0);
if (Y > -1){Y-=1;}
break;
case 152:
LED_Disp.clearDisplay(0);
if (X < 7){X+=1;}
break;
}
}
}
receiver.resume();
}
if (RemoteOrJoystick == false){
int horz = analogRead(JOY_HORZ);
int vert = analogRead(JOY_VERT);
X = map(vert, 0, 1023, 7, -1);
Y = map(horz, 0, 1023, -1, 7);
LED_Disp.clearDisplay(0);
}
}