#include <LiquidCrystal.h>
#include <LedControl.h>
#include <IRremote.h>
#define DIN 9
#define CS 10
#define CLK 8
#define Yaxis A1
#define Xaxis A2
#define SEL 13
#define DOUT 7
LiquidCrystal lcd(12,11,5,4,3,2);
LedControl lc(DIN, CLK, CS, 1);
IRrecv rec(DOUT);
int mode = 0;
void setup() {
lcd.begin(16,2);
lcd.clear();
lcd.print("Mode: Joystick");
lc.shutdown(0, false);
lc.clearDisplay(0);
lc.setIntensity(0, 8);
pinMode(Yaxis, INPUT);
pinMode(Xaxis, INPUT);
pinMode(SEL, INPUT_PULLUP);
rec.enableIRIn();
}
void loop() {
if(!mode){
joystickMode();
}
else if(mode){
irMode();
}
delay(100);
}
void drawSquare(int row, int col){
lc.clearDisplay(0);
lc.setLed(0, row, col, true);
lc.setLed(0, row, col+1, true);
lc.setLed(0, row+1, col, true);
lc.setLed(0, row+1, col+1, true);
}
void joystickMode(){
int ir = 0;
while(1){
ir = 0;
if(rec.decode()){
ir = rec.decodedIRData.command;
rec.resume();
}
if(!digitalRead(SEL) || ir == 162){
break;
}
int x = map(analogRead(Xaxis), 0, 1023, -1, 7);
int y = map(analogRead(Yaxis), 0, 1023, 7, -1);
drawSquare(x, y);
delay(100);
}
lcd.clear();
lcd.print("Mode: Remote");
mode = 1;
}
void irMode(){
int ir = 0;
int row = 3;
int col = 3;
while(1){
ir = 0;
if(rec.decode()){
ir = rec.decodedIRData.command;
rec.resume();
}
if(!digitalRead(SEL) || ir == 162){
break;
}
if(ir == 2 && row > -1){
row--;
}
else if(ir == 152 && row < 7){
row++;
}
else if(ir == 224 && col < 7){
col++;
}
else if(ir == 144 && col > -1){
col--;
}
drawSquare(row, col);
delay(100);
}
lcd.clear();
lcd.print("Mode: Joystick");
mode = 0;
}