#include <LiquidCrystal.h>
#include <LedControl.h>
#include <IRremote.h>
//add pins for sensors and actuators
int RECV_PIN = (13);
int rcode;
int seljoy = (A0);
uint8_t joyconx = (A2);
float x;
uint8_t joycony = (A1);
float y;
LedControl lc(6,4,5,1);
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
//setup rows and columns for lc
int row = 3;
int column = 3;
int row2;
int column2;
//setup lc lights on
bool LEDON1 = true;
bool LEDON2 = true;
bool LEDON3 = true;
bool LEDON4 = true;
//setup remote code values
int RUP = 4244832000;
int RDOWN = 173808000;
int RLEFT = 534839040;
int RRIGHT = 1871773440;
//sets the staring condition
bool joy = true;
void setup() {
lcdstart();
Serial.begin(9600);
IrReceiver.begin(RECV_PIN);
lcd.setCursor(0,0);
lcd.print("joystick mode");
lc.shutdown(0,false);
lc.setIntensity(0,0);
lcclear();
pinMode(seljoy, INPUT_PULLUP);
}
int joyposition(float z){
if (z>=9) {
return 7;
}
else if (z>=8) {
return 6;
}
else if (z>=7) {
return 5;
}
else if (z>=6) {
return 4;
}
else if (z<=1) {
return -1;
}
else if (z<=2) {
return 0;
}
else if (z<=3) {
return 1;
}
else if (z<=4) {
return 2;
}
else {
return 3;
}
}
void loop() {
lcclear();
set2();
square();
if (digitalRead(seljoy) == LOW) {
modeswap();
delay (500);
}
if (IrReceiver.decode()) {
rcode = IrReceiver.decodedIRData.command;
Serial.print(rcode);
IrReceiver.resume(); // ready to receive next value
if (rcode == 162) {
modeswap();
}
if (!joy) {
recmode();
}
}
if (joy) {
joymode();
}
delay(10);
}
void lcdstart() {
lcd.begin(16,2); //16 by 2 screen
lcd.print("Hello World"); // displays in an intro message
delay(500);
lcd.clear();
}
void lcclear() {
lc.clearDisplay(0);
}
void set2() {
row2 = row+1;
column2 = column+1;
}
void square() {
lc.setLed(0,row,column,LEDON1);
lc.setLed(0,row2,column,LEDON2);
lc.setLed(0,row,column2,LEDON3);
lc.setLed(0,row2,column2,LEDON4);
}
void modeswap() {
lcd.clear();
lcd.setCursor(0,0);
if (joy) {
joy = false;
row = column = 3;
lcd.print("reciver mode");
}
else {
joy = true;
lcd.print("joystick mode");
}
}
void joymode() {
//tsjoy();
x = (abs(((map(analogRead(joyconx), 0, 1023, -10, 10)) / 2) - 5));
y = (((map(analogRead(joycony), 0, 1023, -10, 10)) / 2) + 5);
row = joyposition(x);
column = joyposition(y);
}
void recmode() {
//tsrec();
if (rcode == 144 && column > -1) {
column = column - 1;
delay(250);
}
if (rcode == 224 && column < 7) {
column = column + 1;
delay(250);
}
if (rcode == 2 && row > -1) {
row = row - 1;
delay(250);
}
if (rcode == 152 && row < 7) {
row = row + 1;
delay(250);
}
if (rcode == 168) {
row = column = 3;
delay(250);
}
if (rcode == 34) {
showshape();
}
if (rcode == 194) {
showshape2();
}
}
void tsjoy() {
Serial.print("x:");
Serial.println(x);
Serial.print("y: ");
Serial.println(y);
delay(1000);
}
void tsrec() {
Serial.print("Received Code: ");
Serial.println(rcode);
Serial.print("Row: ");
Serial.println(row);
Serial.print("Column: ");
Serial.println(column);
}
void showshape() {
//Moving car
byte b1[8]= {0x00,0x00,0x00,0x00,0x18,0x3C,0x18,0x3C};
byte b2[8]= {0x00,0x00,0x00,0x18,0x3C,0x18,0x3C,0x00};
byte b3[8]= {0x00,0x00,0x18,0x3C,0x18,0x3C,0x00,0x00};
byte b4[8]= {0x00,0x18,0x3C,0x18,0x3C,0x00,0x00,0x00};
byte b5[8]= {0x18,0x3C,0x18,0x3C,0x00,0x00,0x00,0x00};
byte b6[8]= {0x3C,0x18,0x3C,0x00,0x00,0x00,0x00,0x18};
byte b7[8]= {0x18,0x3C,0x00,0x00,0x00,0x00,0x18,0x3C};
byte b8[8]= {0x3C,0x00,0x00,0x00,0x00,0x18,0x3C,0x18};
//Moving car
printByte(b1);
delay(50);
printByte(b2);
delay(50);
printByte(b3);
delay(50);
printByte(b4);
delay(50);
printByte(b5);
delay(50);
printByte(b6);
delay(50);
printByte(b7);
delay(50);
printByte(b8);
delay(50);
}
void printByte(byte character []) {
int i = 0;
for(i=0;i<8;i++)
{
lc.setRow(0,i,character[i]);
}
}
void showshape2() {
byte smile[8]= {0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};
printByte(smile);
delay(1500);
}