#include <Arduino.h>
#include "RotaryEncoder.h"
RotaryEncoder *encoder = nullptr;
#define led1a 12
#define led2a 13
#define led3a 6
#define led4a 7
#define led1b 8
#define led2b 9
#define led3b 10
#define led4b 11
volatile int count = 0;
int pinSW = 4;
int pinCLK = 2;
int pinDT = 3;
void setup() {
pinMode(led1a, OUTPUT);
pinMode(led2a, OUTPUT);
pinMode(led3a, OUTPUT);
pinMode(led4a, OUTPUT);
pinMode(led1b, OUTPUT);
pinMode(led2b, OUTPUT);
pinMode(led3b, OUTPUT);
pinMode(led4b, OUTPUT);
pinMode(pinSW, INPUT_PULLUP);
digitalWrite(led1a, LOW);
digitalWrite(led2a, LOW);
digitalWrite(led3a, LOW);
digitalWrite(led4a, LOW);
digitalWrite(led1b, LOW);
digitalWrite(led2b, LOW);
digitalWrite(led3b, LOW);
digitalWrite(led4b, LOW);
Serial.begin(9600);
encoder = new RotaryEncoder(pinCLK, pinDT, RotaryEncoder::LatchMode::FOUR3);
attachInterrupt(digitalPinToInterrupt(pinCLK), checkPosition, CHANGE);
attachInterrupt(digitalPinToInterrupt(pinDT), checkPosition, CHANGE);
}
void loop() {
Serial.write(count);
if (digitalRead(pinSW) == LOW) {
stableBttnSW();
count = 0;
}
switch (count) {
case 1:
str1();
break;
case 2:
str2();
break;
case 3:
str3();
break;
case 4:
str4();
break;
case 5:
str5();
break;
case 6:
str6();
break;
case 7:
str7();
break;
case 8:
str8();
break;
case 9:
str9();
break;
case 10:
str10();
break;
case 11:
str11();
break;
case 12:
str12();
break;
case 13:
str13();
break;
case 14:
str14();
break;
case 15:
str15();
break;
case 16:
str16();
break;
case 17:
str17();
break;
case 18:
str18();
break;
case 19:
str19();
break;
case 20:
str20();
break;
case 21:
str21();
break;
case 22:
str22();
break;
case 23:
str23();
break;
case 24:
str24();
break;
case 25:
str25();
break;
case 26:
str26();
break;
case 27:
str27();
break;
case 28:
str28();
break;
case 29:
str29();
break;
case 30:
str30();
break;
}
}
void checkPosition() {
static int pos = 0;
encoder->tick();
int newPos = encoder->getPosition();
if (pos != newPos) {
int dir = (int)(encoder->getDirection());
if (dir < 0) {
if (count == 1)
count = 30;
else
count--;
if (count == -1) count = 30;
}
if (dir > 0) {
if (count == 30)
count = 1;
else
count++;
}
pos = newPos;
}
Serial.println((String)"count = " + count);
}
void stableBttnSW() {
boolean state;
boolean previousState = digitalRead(pinSW);
for (int counter = 0; counter < 10; counter++) {
state = digitalRead(pinSW);
if (state != previousState) {
counter = 0;
previousState = state;
}
}
}
// Mode strobe
void str1() {
L2bH();
L2aH();
delay(50);
L1bH();
L1aH();
delay(150);
AllLedLow();
delay(150);
L3bH();
L3aH();
delay(50);
L4bH();
L4aH();
delay(150);
AllLedLow();
}
void str2() {
L1bH();
L1aH();
L4bH();
L4aH();
delay(250);
AllLedLow();
delay(250);
L2bH();
L2aH();
L3bH();
L3aH();
delay(250);
AllLedLow();
delay(250);
}
void str3() {
L1bH();
L1aH();
delay(150);
AllLedLow();
delay(50);
L2bH();
L2aH();
delay(150);
AllLedLow();
delay(50);
L3bH();
L3aH();
delay(150);
AllLedLow();
delay(50);
L4bH();
L4aH();
delay(150);
AllLedLow();
delay(50);
L3bH();
L3aH();
delay(150);
AllLedLow();
delay(50);
L2bH();
L2aH();
delay(150);
AllLedLow();
delay(50);
}
void str4() {
L1bH();
L4aH();
delay(100);
AllLedLow();
delay(50);
L2bH();
L3aH();
delay(100);
AllLedLow();
delay(50);
L3bH();
L2aH();
delay(100);
AllLedLow();
delay(50);
L4bH();
L1aH();
delay(100);
AllLedLow();
delay(50);
L3bH();
L2aH();
delay(100);
AllLedLow();
delay(50);
L2bH();
L3aH();
delay(100);
AllLedLow();
delay(50);
}
void str5() {
L1bH();
delay(100);
AllLedLow();
delay(50);
L2bH();
delay(100);
AllLedLow();
delay(50);
L3bH();
delay(100);
AllLedLow();
delay(50);
L4bH();
delay(100);
AllLedLow();
delay(50);
L4aH();
delay(100);
AllLedLow();
delay(50);
L3aH();
delay(100);
AllLedLow();
delay(50);
L2aH();
delay(100);
AllLedLow();
delay(50);
L1aH();
delay(100);
AllLedLow();
delay(50);
}
void str6() {
L1bH();
L2bH();
delay(100);
AllLedLow();
delay(50);
L2bH();
L3bH();
delay(100);
AllLedLow();
delay(50);
L3bH();
L4bH();
delay(100);
AllLedLow();
delay(50);
L4bH();
L4aH();
delay(100);
AllLedLow();
delay(50);
L4aH();
L3aH();
delay(100);
AllLedLow();
delay(50);
L3aH();
L2aH();
delay(100);
AllLedLow();
delay(50);
L2aH();
L1aH();
delay(100);
AllLedLow();
delay(50);
L1aH();
L1bH();
delay(100);
AllLedLow();
delay(50);
}
void str7() {
L1bH();
L2bH();
L3bH();
L4bH();
delay(150);
AllLedLow();
delay(50);
L1aH();
L2aH();
L3aH();
L4aH();
delay(150);
AllLedLow();
delay(50);
}
void str8() {
for (int i = 0; i < 3; i++) {
L1bH();
L2bH();
L3bH();
L4bH();
delay(150);
AllLedLow();
delay(100);
}
for (int i = 0; i < 3; i++) {
L1aH();
L2aH();
L3aH();
L4aH();
delay(150);
AllLedLow();
delay(100);
}
}
void str9() {
str7();
str7();
str8();
}
void str10() {
L1bH();
L2bH();
L1aH();
L2aH();
delay(150);
AllLedLow();
delay(50);
L3aH();
L4aH();
L3bH();
L4bH();
delay(150);
AllLedLow();
delay(50);
}
void str11() {
for (int i = 0; i < 3; i++) {
L1bH();
L2bH();
L1aH();
L2aH();
delay(150);
AllLedLow();
delay(100);
}
for (int i = 0; i < 3; i++) {
L3aH();
L4aH();
L3bH();
L4bH();
delay(150);
AllLedLow();
delay(100);
}
}
void str12() {
str10();
str10();
str11();
}
void str13() {
L1bH();
L1aH();
L3bH();
L3aH();
delay(150);
AllLedLow();
delay(150);
L2bH();
L2aH();
L4bH();
L4aH();
delay(150);
AllLedLow();
delay(150);
}
void str14() {
L1bH();
delay(80);
L2bH();
delay(80);
L3bH();
delay(80);
L4bH();
delay(80);
L4aH();
delay(80);
L3aH();
delay(80);
L2aH();
delay(80);
L1aH();
delay(80);
L1bL();
delay(80);
L2bL();
delay(80);
L3bL();
delay(80);
L4bL();
delay(80);
L4aL();
delay(80);
L3aL();
delay(80);
L2aL();
delay(80);
L1aL();
delay(80);
}
void str15() {
L4bH();
delay(80);
L3bH();
delay(80);
L2bH();
delay(80);
L1bH();
delay(80);
L1aH();
delay(80);
L2aH();
delay(80);
L3aH();
delay(80);
L4aH();
delay(80);
L4bL();
delay(80);
L3bL();
delay(80);
L2bL();
delay(80);
L1bL();
delay(80);
L1aL();
delay(80);
L2aL();
delay(80);
L3aL();
delay(80);
L4aL();
delay(80);
}
void str16() {
str14();
str15();
}
void str17() {
L1bH();
L1aH();
delay(300);
AllLedLow();
delay(100);
L2bH();
L2aH();
delay(300);
AllLedLow();
delay(100);
L3bH();
L3aH();
delay(300);
AllLedLow();
delay(100);
L4bH();
L4aH();
delay(300);
L1bH();
L1aH();
delay(300);
L1bL();
L1aL();
delay(100);
L2bH();
L2aH();
delay(300);
L2bL();
L2aL();
delay(100);
L3bH();
L3aH();
delay(300);
L1bH();
L1aH();
delay(300);
L1bL();
L1aL();
delay(100);
L2bH();
L2aH();
delay(300);
L1bH();
L1aH();
delay(300);
AllLedLow();
delay(300);
}
void str18() {
L4bH();
L4aH();
delay(300);
AllLedLow();
delay(100);
L3bH();
L3aH();
delay(300);
AllLedLow();
delay(100);
L2bH();
L2aH();
delay(300);
AllLedLow();
delay(100);
L1bH();
L1aH();
delay(300);
L4bH();
L4aH();
delay(300);
L4bL();
L4aL();
delay(100);
L3bH();
L3aH();
delay(300);
L3bL();
L3aL();
delay(100);
L2bH();
L2aH();
delay(300);
L4bH();
L4aH();
delay(300);
L4bL();
L4aL();
delay(100);
L3bH();
L3aH();
delay(300);
L4bH();
L4aH();
delay(300);
AllLedLow();
delay(300);
}
void str19() {
str17();
str18();
str7();
str7();
}
void str20() {
L1bH();
L2bH();
L3bH();
L4bH();
delay(150);
AllLedLow();
delay(50);
L3aH();
L4aH();
L3bH();
L4bH();
delay(150);
AllLedLow();
delay(50);
L1aH();
L2aH();
L3aH();
L4aH();
delay(150);
AllLedLow();
delay(50);
L1bH();
L2bH();
L1aH();
L2aH();
delay(150);
AllLedLow();
delay(50);
}
void str21() {
str5();
delay(50);
str4();
str4();
}
void str22() {
L1bH();
delay(100);
AllLedLow();
delay(100);
L1aH();
delay(100);
AllLedLow();
delay(100);
L2bH();
delay(100);
AllLedLow();
delay(100);
L2aH();
delay(100);
AllLedLow();
delay(100);
L3bH();
delay(100);
AllLedLow();
delay(100);
L3aH();
delay(100);
AllLedLow();
delay(100);
L4bH();
delay(100);
AllLedLow();
delay(100);
L4aH();
delay(100);
AllLedLow();
delay(100);
L3bH();
delay(100);
AllLedLow();
delay(100);
L3aH();
delay(100);
AllLedLow();
delay(100);
L2bH();
delay(100);
AllLedLow();
delay(100);
L2aH();
delay(100);
AllLedLow();
delay(100);
L1bH();
delay(100);
AllLedLow();
delay(100);
L1aH();
delay(100);
AllLedLow();
delay(100);
}
void str23() {
L1bH();
delay(100);
AllLedLow();
delay(50);
L2aH();
delay(100);
AllLedLow();
delay(50);
L3bH();
delay(100);
AllLedLow();
delay(50);
L4aH();
delay(100);
AllLedLow();
delay(50);
L4bH();
delay(100);
AllLedLow();
delay(50);
L3aH();
delay(100);
AllLedLow();
delay(50);
L2bH();
delay(100);
AllLedLow();
delay(50);
L1aH();
delay(100);
AllLedLow();
delay(50);
}
void str24() {
str16();
delay(100);
for (int i = 0; i < 3; i++) {
AllLedHigh();
delay(100);
AllLedLow();
delay(150);
}
delay(200);
for (int i = 0; i < 3; i++) {
AllLedHigh();
delay(100);
AllLedLow();
delay(150);
}
}
void str25() {
L1bH();
L2bH();
delay(50);
L3aH();
L4aH();
delay(200);
AllLedLow();
delay(50);
L3bH();
L4bH();
delay(50);
L1aH();
L2aH();
delay(200);
AllLedLow();
delay(50);
}
void str26() {
for (int i = 0; i < 3; i++) {
L1bH();
L4aH();
delay(100);
AllLedLow();
delay(100);
}
for (int i = 0; i < 3; i++) {
L2bH();
L3aH();
delay(100);
AllLedLow();
delay(100);
}
for (int i = 0; i < 3; i++) {
L3bH();
L2aH();
delay(100);
AllLedLow();
delay(100);
}
for (int i = 0; i < 3; i++) {
L4bH();
L1aH();
delay(100);
AllLedLow();
delay(100);
}
for (int i = 0; i < 3; i++) {
L3bH();
L2aH();
delay(100);
AllLedLow();
delay(100);
}
for (int i = 0; i < 3; i++) {
L2bH();
L3aH();
delay(100);
AllLedLow();
delay(100);
}
}
void str27() {
for (int i = 0; i < 4; i++) {
AllLedHigh();
delay(50);
AllLedLow();
delay(120);
}
for (int i = 0; i < 3; i++) {
AllLedHigh();
delay(150);
AllLedLow();
delay(150);
}
for (int i = 0; i < 3; i++) {
AllLedHigh();
delay(250);
AllLedLow();
delay(150);
}
}
void str28() {
str7();
str7();
delay(300);
str10();
str10();
delay(300);
for (int i = 0; i < 5; i++) {
AllLedHigh();
delay(10);
AllLedLow();
delay(150);
}
delay(300);
}
void str29() {
L1bH();
L4bH();
delay(100);
AllLedLow();
delay(100);
L2aH();
L3aH();
delay(100);
AllLedLow();
delay(100);
L2bH();
L3bH();
delay(100);
AllLedLow();
delay(100);
L1aH();
L4aH();
delay(100);
AllLedLow();
delay(100);
}
void str30() {
str1();
str2();
str3();
str4();
str5();
str6();
str7();
str8();
str9();
str10();
str11();
str12();
str13();
str14();
str15();
str16();
str17();
str18();
str19();
str20();
str21();
str22();
str23();
str24();
str25();
str26();
str27();
str28();
str29();
}
void setL1a(int time) {
digitalWrite(led1a, HIGH);
delay(time);
digitalWrite(led1a, LOW);
}
void setL2a(int time) {
digitalWrite(led2a, HIGH);
delay(time);
digitalWrite(led2a, LOW);
}
void setL3a(int time) {
digitalWrite(led3a, HIGH);
delay(time);
digitalWrite(led3a, LOW);
}
void setL4a(int time) {
digitalWrite(led4a, HIGH);
delay(time);
digitalWrite(led4a, LOW);
}
void setL1b(int time) {
digitalWrite(led1b, HIGH);
delay(time);
digitalWrite(led1b, LOW);
}
void setL2b(int time) {
digitalWrite(led2b, HIGH);
delay(time);
digitalWrite(led2b, LOW);
}
void setL3b(int time) {
digitalWrite(led3b, HIGH);
delay(time);
digitalWrite(led3b, LOW);
}
void setL4b(int time) {
digitalWrite(led4b, HIGH);
delay(time);
digitalWrite(led4b, LOW);
}
void L1aH() {
digitalWrite(led1a, HIGH);
}
void L1aL() {
digitalWrite(led1a, LOW);
}
void L2aH() {
digitalWrite(led2a, HIGH);
}
void L2aL() {
digitalWrite(led2a, LOW);
}
void L3aH() {
digitalWrite(led3a, HIGH);
}
void L3aL() {
digitalWrite(led3a, LOW);
}
void L4aH() {
digitalWrite(led4a, HIGH);
}
void L4aL() {
digitalWrite(led4a, LOW);
}
void L1bH() {
digitalWrite(led1b, HIGH);
}
void L1bL() {
digitalWrite(led1b, LOW);
}
void L2bH() {
digitalWrite(led2b, HIGH);
}
void L2bL() {
digitalWrite(led2b, LOW);
}
void L3bH() {
digitalWrite(led3b, HIGH);
}
void L3bL() {
digitalWrite(led3b, LOW);
}
void L4bH() {
digitalWrite(led4b, HIGH);
}
void L4bL() {
digitalWrite(led4b, LOW);
}
void AllLedHigh() {
digitalWrite(led1b, HIGH);
digitalWrite(led2b, HIGH);
digitalWrite(led3b, HIGH);
digitalWrite(led4b, HIGH);
digitalWrite(led1a, HIGH);
digitalWrite(led2a, HIGH);
digitalWrite(led3a, HIGH);
digitalWrite(led4a, HIGH);
}
void AllLedLow() {
digitalWrite(led1b, LOW);
digitalWrite(led2b, LOW);
digitalWrite(led3b, LOW);
digitalWrite(led4b, LOW);
digitalWrite(led1a, LOW);
digitalWrite(led2a, LOW);
digitalWrite(led3a, LOW);
digitalWrite(led4a, LOW);
}
L1b
L2b
L3b
L4b
L1a
L2a
L3a
L4a