#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include <IRremote.h>
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, 32,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const uint16_t colors[] = {
matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };
int x = matrix.width();
int pass = 0;
const int RECV_PIN = 34;
IRrecv receiver(RECV_PIN);
decode_results results;
char* previousResult=NULL;
int previousCode;
bool powerState = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)){
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(255);
matrix.setTextColor(colors[0]);
for(int i=0; i<256; i++){
int red = random(100,255);
int green = random(50,150);
int blue = random(100,255);
//matrix.clear();
matrix.setPixelColor(i, red, green, blue);
//matrix.show();
//delay(250);
}
matrix.show();
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("WELCOME");
display.println("SEAN'S RGB");
display.print("MACHINE");
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(0,0);
display.write("MODE");
display.display();
display.setTextSize(1);
receiver.enableIRIn();
}
void loop() {
if (receiver.decode()){
modeSelect();
receiver.resume();
}
matrix.fillScreen(0);
matrix.setCursor(x,0);
matrix.print("DAVE SMELLS LIKE DEATH");
if(--x < -132){
x=matrix.width();
if(++pass >=3) pass=0;
matrix.setTextColor(colors[pass]);
}
matrix.show();
delay(50); // this speeds up the simulation
}
void oledPrint (char* text){
display.setCursor(0,32);
display.setTextColor(SSD1306_BLACK);
Serial.println(previousResult);
display.print(previousResult);
display.print(" ");
display.print(previousCode);
display.display();
display.setCursor(0,32);
display.setTextColor(SSD1306_WHITE);
display.print(text);
display.print(" ");
display.print(receiver.decodedIRData.command);
display.display();
previousResult=text;
previousCode=receiver.decodedIRData.command;
}
void modeSelect(){
switch (receiver.decodedIRData.command) {
case 162:
oledPrint("POWER");
powerCycle();
break;
case 226:
oledPrint("MENU");
break;
case 34:
oledPrint("TEST");
break;
case 2:
oledPrint("PLUS");
break;
case 194:
oledPrint("BACK");
break;
case 224:
oledPrint("PREV.");
break;
case 168:
oledPrint("PLAY");
break;
case 144:
oledPrint("NEXT");
break;
case 104:
oledPrint("num: 0");
break;
case 152:
oledPrint("MINUS");
break;
case 176:
oledPrint("key: C");
break;
case 48:
oledPrint("num: 1");
break;
case 24:
oledPrint("num: 2");
break;
case 122:
oledPrint("num: 3");
break;
case 16:
oledPrint("num: 4");
break;
case 56:
oledPrint("num: 5");
break;
case 90:
oledPrint("num: 6");
break;
case 66:
oledPrint("num: 7");
break;
case 74:
oledPrint("num: 8");
break;
case 82:
oledPrint("num: 9");
break;
default:
oledPrint("unknown");
}
}
void powerCycle(){
}