/*
https://forum.arduino.cc/t/need-help-with-my-code/1264514
*/
//Code for 14-seg Mini Lightbar | Code setup 9/19/2023 - Updated 10/2/2023 ***Uses IR Receiver and remote***
//the led pin array
const byte leds[] = {52,53,50,51,48,49,46,47,44,45,42,43,40.41};
#include <IRremote.h>
#define IR_RECEIVE_PIN 8
#define IR_BUTTON_1 48
#define IR_BUTTON_2 24
#define IR_BUTTON_3 133
#define IR_BUTTON_PLAY_PAUSE 168
//construct IRrecv object..
IRrecv receiver(IR_RECEIVE_PIN);
unsigned long lastStep = 0;
unsigned long intervalStep = 50;
byte stateStep = 0;
byte ledAni = 0;
byte aniStep = 0;
bool aniDone = true;
void setup() {
Serial.begin(9600);
Serial.println("Ready");
receiver.enableIRIn(); // Start the receiver
// IrReceiver.begin(IR_RECEIVE_PIN);
for (int i = 0; i < sizeof(leds); i++){
pinMode(leds[i], OUTPUT);
}
}
void loop() {
if (receiver.decode()) {
int command = receiver.decodedIRData.command;
receiver.resume();
Serial.println(command);
switch (command){
case IR_BUTTON_1: aniDone = false;
ledAni = 1;
aniStep = 0;
break;
case IR_BUTTON_2: aniDone = false;
ledAni = 2;
aniStep = 0;
break;
}
}
if (!aniDone){
switch (ledAni){
case 1: ledAni1();
break;
case 2: ledAni2();
break;
}
}
}
void ledAni1(){
unsigned long now = millis();
if (now - lastStep >= intervalStep){
lastStep = now;
switch (aniStep){
case 0: case 2: case 4:
digitalWrite(leds[0], HIGH);
digitalWrite(leds[1], HIGH);
digitalWrite(leds[3], HIGH);
if (aniStep == 4){
intervalStep = 150; //break
} else{
intervalStep = 50;
}
break;
case 1: case 3: case 5:
digitalWrite(leds[0], LOW);
digitalWrite(leds[1], LOW);
digitalWrite(leds[3], LOW);
intervalStep = 50;
break;
case 6: case 8: case 10:
digitalWrite(leds[2], HIGH);
digitalWrite(leds[4], HIGH);
digitalWrite(leds[5], HIGH);
if (aniStep == 10){
intervalStep = 150; //break
} else{
intervalStep = 50;
}
break;
case 7: case 9: case 11:
digitalWrite(leds[2], LOW);
digitalWrite(leds[4], LOW);
digitalWrite(leds[5], LOW);
intervalStep = 50;
break;
case 12: aniDone = true;
aniStep = 0;
break;
}
aniStep++;
}
}
void ledAni2(){
unsigned long now = millis();
if (now - lastStep >= intervalStep){
lastStep = now;
switch (aniStep){
case 0: case 2: case 4:
digitalWrite(leds[0], HIGH);
digitalWrite(leds[1], HIGH);
digitalWrite(leds[3], HIGH);
if (aniStep == 4){
intervalStep = 150; //break
} else{
intervalStep = 50;
}
break;
case 1: case 3: case 5:
digitalWrite(leds[0], LOW);
digitalWrite(leds[1], LOW);
digitalWrite(leds[3], LOW);
intervalStep = 50;
break;
case 6: case 8: case 10:
digitalWrite(leds[2], HIGH);
digitalWrite(leds[4], HIGH);
digitalWrite(leds[5], HIGH);
if (aniStep == 10){
intervalStep = 150; //break
} else{
intervalStep = 50;
}
break;
case 7: case 9: case 11:
digitalWrite(leds[2], LOW);
digitalWrite(leds[4], LOW);
digitalWrite(leds[5], LOW);
intervalStep = 50;
break;
case 12: aniDone = true;
aniStep = 0;
break;
}
aniStep++;
}
}