Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal.h>
- #include <IRremote.h>
- #include <FastLED.h>
- /*Global vars that multiple classes need
- * Probably not the best way to do this
- */
- LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
- #define NUM_LEDS 300
- CRGB leds[NUM_LEDS];
- CRGBPalette16 currentPalette;
- class LCDHandler{
- const int backlight = 13;
- int lcdState = HIGH;
- int currentMode = 0;
- public:
- LCDHandler(){
- pinMode(backlight, OUTPUT);
- startLCD();
- }
- inline void startLCD() {
- digitalWrite(backlight, HIGH);
- lcd.begin(16, 2);
- lcd.print(F("Mode: "));
- lcd.setCursor(0, 1);
- lcd.print(F("The Science Bros"));
- }
- //takes a string and prints to the LCD with a specified delay
- inline void printToLCD(String word, int delayTime, int row) {
- //centers cursor
- lcd.setCursor((16 - word.length()) / 2, row);
- int l = word.length() + 1;
- char phrase[l];
- word.toCharArray(phrase, l);
- for (int i; i < l - 1; i++) {
- lcd.print(phrase[i]);
- delay(delayTime);
- }
- }
- inline void modeToLCD(int mode) {
- currentMode = mode;
- switch (mode) {
- case 1:
- lcd.print(F("RAINBSMOOTH"));
- break;
- case 2:
- lcd.print(F("RAINBSTRIPE"));
- break;
- case 3:
- lcd.print(F("SOLID RED "));
- break;
- case 4:
- lcd.print(F("SOLID BLUE "));
- break;
- case 5:
- lcd.print(F("SOLID GREEN"));
- break;
- case 6:
- lcd.print(F("SOLIDPURPLE"));
- break;
- case 7:
- lcd.print(F("SOLIDYELLOW"));
- break;
- case 8:
- lcd.print(F("MUSICRAINBO"));
- break;
- case 9:
- lcd.print(F("TSBGRAPHSND"));
- break;
- case 10:
- lcd.print(F("TSBMSCREACT"));
- break;
- default: break;
- }
- }
- inline void checkState() {
- digitalWrite(backlight, lcdState);
- if (lcdState == LOW) {
- lcdState = HIGH;
- digitalWrite(backlight, lcdState);
- lcd.begin(16, 2);
- printToLCD(F("WELCOME"), 100, 0);
- printToLCD("BACK!", 100, 1);
- currentMode = 1;
- delay(1000);
- FastLED.show();
- startLCD();
- } else {
- lcd.clear();
- printToLCD(F("GOODBYE"), 250, 0);
- delay(750);
- lcd.noDisplay();
- for (int i = 0; i < NUM_LEDS; i++) {
- leds[i].setRGB(0, 0, 0);
- }
- FastLED.show();
- lcdState = LOW;
- }
- }
- int getCurrentMode(){
- return currentMode;
- }
- };
- const int irReceiverPin = 3;
- IRrecv irrecv(irReceiverPin); //Creates a variable of type IRrecv
- class IRHandler{
- unsigned long previousMillis;
- const int receiverDelay = 50;
- decode_results results; // define resultsas
- LCDHandler lcdHandler;
- public:
- IRHandler() {
- previousMillis = 0;
- irrecv.enableIRIn(); // enable ir receiver module
- }
- void Update(unsigned long currentMillis){
- int cMode = lcdHandler.getCurrentMode();
- if (irrecv.decode(&results))
- {
- if(translateIR().substring(0,5).equals("POWER")){
- lcdHandler.checkState();
- }
- else if(translateIR().substring(0,2).equals("UP")){
- if(cMode == 9)
- lcdHandler.modeToLCD(0);
- else
- lcdHandler.modeToLCD(cMode + 1);
- }
- else if(translateIR().substring(0,4).equals("DOWN")){
- if(cMode == 0)
- lcdHandler.modeToLCD(9);
- else
- lcdHandler.modeToLCD(cMode + 1);
- }
- else if(translateIR().toInt() >= 1 && translateIR().toInt() <= 10){
- lcdHandler.modeToLCD(translateIR().toInt());
- }
- }
- lcd.setCursor(5,0);
- lcd.print(translateIR());
- if(currentMillis - previousMillis >= receiverDelay){
- irrecv.resume();
- previousMillis = currentMillis;
- }
- }
- // takes action based on IR code received
- //F() tells the compiler to keep the strings in PROGMEM rather than SRAM
- String translateIR() {
- switch (results.value)
- {
- case 0xE318261B: return F(("POWER ")); break;
- case 0xEE886D7F: return F(("FUNC/STOP ")); break;
- case 0x511DBB: return F(("VOL+ ")); break;
- case 0x52A3D41F: return F(("FAST BACK ")); break;
- case 0xD7E84B1B: return F(("PAUSE ")); break;
- case 0x20FE4DBB: return F(("FAST NEXT ")); break;
- case 0xF076C13B: return F(("DOWN ")); break;
- case 0xA3C8EDDB: return F(("VOL- ")); break;
- case 0xE5CFBD7F: return F(("UP ")); break;
- case 0x97483BFB: return F(("EQ ")); break;
- case 0xF0C41643: return F(("ST/REP ")); break;
- case 0xC101E57B: return F(("1 ")); break;
- case 0x9716BE3F: return F(("2 ")); break;
- case 0x3D9AE3F7: return F(("3 ")); break;
- case 0x6182021B: return F(("4 ")); break;
- case 0x8C22657B: return F(("5 ")); break;
- case 0x488F3CBB: return F(("6 ")); break;
- case 0x449E79F: return F(("7 ")); break;
- case 0x32C6FDF7: return F(("8 ")); break;
- case 0x1BC0157B: return F(("9 ")); break;
- case 0x3EC3FC1B: return F(("10 ")); break;
- case 0xFFFFFFFF: return F(("REPEAT ")); break;
- default:
- return F(("OTHER "));
- }
- }
- };
- class LEDHandler{
- #define LED_PIN 6
- #define COLOR_ORDER GRB
- #define RAINBOW_DURATION 50
- #define RAINBOW_STRIPE_DURATION 1
- #define MUSIC_RAINBOW_DURATION 10
- #define BRIGHTNESS 200
- #define FRAMES_PER_SECOND 60
- TBlendType currentBlending;
- int currentMode = 0;
- int currentHue = 0;
- unsigned long rainbowMillis, rainbowStripeMillis, musicRainbowMillis;
- LCDHandler lcdHandler;
- public:
- LEDHandler(){
- FastLED.addLeds<WS2811, LED_PIN, COLOR_ORDER>(leds, 300).setCorrection(TypicalLEDStrip);
- currentPalette = RainbowColors_p;
- currentBlending = LINEARBLEND;
- }
- void Update(unsigned long currentMillis){
- int cMode = lcdHandler.getCurrentMode();
- if(cMode == 1 && currentMillis - 0 >= RAINBOW_DURATION){
- rainbowMillis = currentMillis;
- if(currentHue <= 255){
- fillHSV(currentHue);
- ++currentHue;
- }
- else
- currentHue = 0;
- }
- else if(cMode == 2 && currentMillis - rainbowStripeMillis >= RAINBOW_STRIPE_DURATION){
- rainbowStripeMillis = currentMillis;
- static uint8_t startIndex = 0;
- startIndex = startIndex + 1; //Motion speed
- FillLEDsFromPaletteColors(startIndex);
- FastLED.show();
- }
- else if(cMode == 3){
- fillHSV(HUE_RED);
- }
- else if(cMode == 3){
- fillHSV(HUE_BLUE);
- }
- else if(cMode == 4){
- fillHSV(HUE_GREEN);
- }
- else if(cMode == 5){
- fillHSV(HUE_PURPLE);
- }
- else if(cMode == 6){
- fillHSV(HUE_YELLOW);
- }
- }
- void fillHSV(int hue){
- for(int i = 0; i < NUM_LEDS; i++){
- leds[i].setHSV(hue, 255, 255);
- }
- FastLED.show();
- }
- void FillLEDsFromPaletteColors(uint8_t colorIndex)
- {
- uint8_t brightness = 255;
- for (int i = 0; i < 300; i++) {
- leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
- colorIndex += 3;
- }
- }
- };
- IRHandler irHandler;
- LEDHandler ledHandler;
- void setup() {
- Serial.begin(9600);
- // OCR0A = 0xAF;
- // TIMSK0 |= _BV(OCIE0A);
- }
- void loop(){
- unsigned long currentMillis = millis();
- irHandler.Update(currentMillis);
- ledHandler.Update(currentMillis);
- }
- //SIGNAL(TIMER0_COMPA_vect)
- //{
- //
- // Serial.println(millis());
- //
- //
- //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement