//https://wokwi.com/projects/400989601730176001
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
const uint8_t ROWS = 4;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t colPins[COLS] = { 5, 4, 3, 2 };
// Pins connected to C1, C2, C3, C4
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 };
// Pins connected to R1, R2, R3, R4
LiquidCrystal_I2C lcd(0x27, 20, 4);
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const int LED_CC1 = A0;
int LED_stateCC1 = 0;
const int LED_CC2 = A1;
int LED_stateCC2 = 0;
const int LED_CC3 = A2;
int LED_stateCC3 = 0;
const int LED_CC4 = A3;
int LED_stateCC4 = 0;
const int LED_CC5 = 10;
int LED_stateCC5 = 0;
const int LED_CC6 = 11;
int LED_stateCC6 = 0;
int delay_bounce = 55;
void setup() {
Serial.begin(9600);
pinMode(LED_CC1, OUTPUT);
pinMode(LED_CC2, OUTPUT);
pinMode(LED_CC3, OUTPUT);
pinMode(LED_CC4, OUTPUT);
pinMode(LED_CC5, OUTPUT);
pinMode(LED_CC6, OUTPUT);
//pinMode(12, INPUT); //LED TAP TEMPO
//pinMode(13, INPUT); //TAP TEMPO
lcd.init();
lcd.backlight();
lcd.setCursor(5, 1);
lcd.print("ELEKTRONIK");
lcd.setCursor(6, 2);
lcd.print("NASIONAL");
digitalWrite(LED_CC1, LED_stateCC1);
checkLED_stateCC1();
digitalWrite(LED_CC2, LED_stateCC2);
checkLED_stateCC2();
digitalWrite(LED_CC3, LED_stateCC3);
checkLED_stateCC3();
digitalWrite(LED_CC4, LED_stateCC4);
checkLED_stateCC4();
digitalWrite(LED_CC5, LED_stateCC5);
checkLED_stateCC5();
digitalWrite(LED_CC6, LED_stateCC6);
checkLED_stateCC6();
}
void loop() {
for (int bank = 0; bank < 6;) {
char key = keypad.getKey();
if (key == '9') { //BANK UP
bank++;
lcd.clear();
lcd.setCursor(0, 2);
lcd.print("bank UP");
lcd.setCursor(0, 3);
lcd.print("choose a preset");
delay(delay_bounce);
if (bank > 5) {
bank = 0;
}
}
if (key == '0') { //BANK DOWN
bank--;
lcd.clear();
lcd.setCursor(0, 2);
lcd.print("bank DOWN");
lcd.setCursor(0, 3);
lcd.print("choose a preset");
delay(delay_bounce);
if (bank < 0) {
bank = 5;
}
}
if (key == 'A') {
if (LED_stateCC1 == 0) {
digitalWrite(LED_CC1, 1);
LED_stateCC1 = 1;
Serial.println("PRE module ON");
Serial.println(LED_stateCC1);
} else {
digitalWrite(LED_CC1, 0);
LED_stateCC1 = 0;
Serial.println("PRE module OFF");
Serial.println(LED_stateCC1);
}
}
if (key == 'B') {
if (LED_stateCC2 == 0) {
digitalWrite(LED_CC2, 1);
LED_stateCC2 = 1;
Serial.println("DST module ON");
Serial.println(LED_stateCC2);
} else {
digitalWrite(LED_CC2, 0);
LED_stateCC2 = 0;
Serial.println("DST module OFF");
Serial.println(LED_stateCC2);
}
}
if (key == 'C') {
if (LED_stateCC3 == 0) {
digitalWrite(LED_CC3, 1);
LED_stateCC3 = 1;
Serial.println("EQ module ON");
} else {
digitalWrite(LED_CC3, 0);
LED_stateCC3 = 0;
Serial.println("EQ module OFF");
}
}
if (key == 'D') {
if (LED_stateCC4 == 0) {
digitalWrite(LED_CC4, 1);
LED_stateCC4 = 1;
Serial.println("MOD module ON");
} else {
digitalWrite(LED_CC4, 0);
LED_stateCC4 = 0;
Serial.println("MOD module OFF");
}
}
if (key == '*') {
if (LED_stateCC5 == 0) {
digitalWrite(LED_CC5, 1);
LED_stateCC5 = 1;
Serial.println("DLY module ON");
} else {
digitalWrite(LED_CC5, 0);
LED_stateCC5 = 0;
Serial.println("DLY module OFF");
}
}
if (key == '#') {
if (LED_stateCC6 == 0) {
digitalWrite(LED_CC6, 1);
LED_stateCC6 = 1;
Serial.println("RVB module ON");
} else {
digitalWrite(LED_CC6, 0);
LED_stateCC6 = 0;
Serial.println("RVB module OFF");
}
}
digitalWrite(LED_CC1, LED_stateCC1);
EEPROM.update(11, LED_stateCC1);
digitalWrite(LED_CC2, LED_stateCC2);
EEPROM.update(22, LED_stateCC2);
digitalWrite(LED_CC3, LED_stateCC3);
EEPROM.update(33, LED_stateCC3);
digitalWrite(LED_CC4, LED_stateCC4);
EEPROM.update(44, LED_stateCC4);
digitalWrite(LED_CC5, LED_stateCC5);
EEPROM.update(55, LED_stateCC5);
digitalWrite(LED_CC6, LED_stateCC6);
EEPROM.update(66, LED_stateCC6);
switch (bank) {
case 0:
//selectbank = 0;
if (key == '1') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 1");
EEPROM.read(11);
EEPROM.read(22);
EEPROM.read(33);
EEPROM.read(44);
EEPROM.read(55);
EEPROM.read(66);
}
if (key == '2') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 2");
EEPROM.read(11);
EEPROM.read(22);
EEPROM.read(33);
EEPROM.read(44);
EEPROM.read(55);
EEPROM.read(66);
}
if (key == '3') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 3");
EEPROM.read(11);
EEPROM.read(22);
EEPROM.read(33);
EEPROM.read(44);
EEPROM.read(55);
EEPROM.read(66);
}
if (key == '4') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 4");
EEPROM.read(11);
EEPROM.read(22);
EEPROM.read(33);
EEPROM.read(44);
EEPROM.read(55);
EEPROM.read(66);
}
if (key == '5') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 5");
EEPROM.read(11);
EEPROM.read(22);
EEPROM.read(33);
EEPROM.read(44);
EEPROM.read(55);
EEPROM.read(66);
}
if (key == '6') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 6");
EEPROM.read(11);
EEPROM.read(22);
EEPROM.read(33);
EEPROM.read(44);
EEPROM.read(55);
EEPROM.read(66);
}
if (key == '7') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 7");
EEPROM.read(11);
EEPROM.read(22);
EEPROM.read(33);
EEPROM.read(44);
EEPROM.read(55);
EEPROM.read(66);
}
if (key == '8') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 8");
EEPROM.read(11);
EEPROM.read(22);
EEPROM.read(33);
EEPROM.read(44);
EEPROM.read(55);
EEPROM.read(66);
}
break;
case 1:
//selectbank = 1;
if (key == '1') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 9");
}
if (key == '2') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 10");
}
if (key == '3') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 11");
}
if (key == '4') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 12");
}
if (key == '5') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 13");
}
if (key == '6') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 14");
}
if (key == '7') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 15");
}
if (key == '8') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 16");
}
break;
case 2:
//selectbank = 2;
if (key == '1') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 17");
}
if (key == '2') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 18");
}
if (key == '3') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 19");
}
if (key == '4') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 20");
}
if (key == '5') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 21");
}
if (key == '6') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 22");
}
if (key == '7') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 23");
}
if (key == '8') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 24");
}
break;
case 3:
//selectbank = 3;
if (key == '1') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 25");
}
if (key == '2') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 26");
}
if (key == '3') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 27");
}
if (key == '4') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 28");
}
if (key == '5') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 29");
}
if (key == '6') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 30");
}
if (key == '7') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 31");
}
if (key == '8') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 32");
}
break;
case 4:
//selectbank = 4;
if (key == '1') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 33");
}
if (key == '2') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 34");
}
if (key == '3') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 35");
}
if (key == '4') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 36");
}
if (key == '5') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 37");
}
if (key == '6') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 38");
}
if (key == '7') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 39");
}
if (key == '8') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 40");
}
break;
case 5:
//selectbank = 5;
if (key == '1') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 41");
}
if (key == '2') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 42");
}
if (key == '3') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 43");
}
if (key == '4') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 44");
}
if (key == '5') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 45");
}
if (key == '6') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 46");
}
if (key == '7') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 47");
}
if (key == '8') {
delay(delay_bounce);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("preset 48");
}
break;
}
}
}
void checkLED_stateCC1() {
Serial.println("LED status after restart: ");
LED_stateCC1 = EEPROM.read(11);
if(LED_stateCC1 == 1) {
Serial.println ("ON");
digitalWrite(LED_CC1, HIGH);
}
if(LED_stateCC1 == 0) {
Serial.println ("OFF");
digitalWrite(LED_CC1, LOW);
}
}
void checkLED_stateCC2() {
Serial.println("LED status after restart: ");
LED_stateCC2 = EEPROM.read(22);
if(LED_stateCC2 == 1) {
Serial.println ("ON");
digitalWrite(LED_CC2, HIGH);
}
if(LED_stateCC2 == 0) {
Serial.println ("OFF");
digitalWrite(LED_CC2, LOW);
}
}
void checkLED_stateCC3() {
Serial.println("LED status after restart: ");
LED_stateCC3 = EEPROM.read(33);
if(LED_stateCC3 == 1) {
Serial.println ("ON");
digitalWrite(LED_CC3, HIGH);
}
if(LED_stateCC3 == 0) {
Serial.println ("OFF");
digitalWrite(LED_CC3, LOW);
}
}
void checkLED_stateCC4() {
Serial.println("LED status after restart: ");
LED_stateCC4 = EEPROM.read(44);
if(LED_stateCC4 == 1) {
Serial.println ("ON");
digitalWrite(LED_CC4, HIGH);
}
if(LED_stateCC4 == 0) {
Serial.println ("OFF");
digitalWrite(LED_CC4, LOW);
}
}
void checkLED_stateCC5() {
Serial.println("LED status after restart: ");
LED_stateCC5 = EEPROM.read(55);
if(LED_stateCC5 == 1) {
Serial.println ("ON");
digitalWrite(LED_CC5, HIGH);
}
if(LED_stateCC5 == 0) {
Serial.println ("OFF");
digitalWrite(LED_CC5, LOW);
}
}
void checkLED_stateCC6() {
Serial.println("LED status after restart: ");
LED_stateCC6 = EEPROM.read(66);
if(LED_stateCC6 == 1) {
Serial.println ("ON");
digitalWrite(LED_CC6, HIGH);
}
if(LED_stateCC6 == 0) {
Serial.println ("OFF");
digitalWrite(LED_CC6, LOW);
}
}