//GANWORKS CHANNEL LOOPER V6 2019-10-21
//mode = 1: Loop 1
//mode = 2: Loop 2
//mode = 3: Loop 3
//mode = 4: Loop 1+2
//mode = 5: Loop 1+3
//mode = 6: Loop 2+3
//mode = 7: Loop 1+2+3
#include <EEPROM.h>
//Inputs
byte pbbypass = 10;
byte pband = 11;
byte pbor = 12;
//Outputs
byte relais1 = 2;
byte relais2 = 3;
byte relais3 = 4;
byte relais4 = 5;
byte relais5 = 6;
byte relais6 = 7;
byte relais7 = 8;
byte relais8 = 9;
byte ledbypass = 14;
byte ledloop1 = 15;
byte ledloop2 = 16;
byte ledloop3 = 17;
byte ledand = 18;
byte ledor = 19;
//Variables
byte modebypass = EEPROM.read(0); //Start Pedal at defined bypass-mode
byte mode = EEPROM.read(1); //Start Pedal at defined mode
byte lastandmode = EEPROM.read(2); //Start or-mode at defined or-mode
byte lastormode = EEPROM.read(3); //Start and-mode at defined and-mode
byte debug = 1; //Set 1 for Serial Monitor Debug
void setup() {
//Set valid values if necessary
if (modebypass > 1) modebypass = 1;
if ((mode == 0) || (mode > 7)) mode = 7;
if (lastandmode < 4) lastandmode = 7;
if ((lastormode == 0) || (lastormode > 3)) lastormode = 1;
//Set Inputs
pinMode(pbbypass, INPUT_PULLUP);
pinMode(pband, INPUT_PULLUP);
pinMode(pbor, INPUT_PULLUP);
//Set Output Relaise
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
pinMode(relais4, OUTPUT);
pinMode(relais5, OUTPUT);
pinMode(relais6, OUTPUT);
pinMode(relais7, OUTPUT);
pinMode(relais8, OUTPUT);
//Set Output LEDs
pinMode(ledbypass, OUTPUT);
pinMode(ledloop1, OUTPUT);
pinMode(ledloop2, OUTPUT);
pinMode(ledloop3, OUTPUT);
pinMode(ledand, OUTPUT);
pinMode(ledor, OUTPUT);
if (debug == 1) Serial.begin(9600);
//Run Start-Mode defined above
if (modebypass == 1) bypass();
setMode();
}
void loop() {
//Pushbutton Bypass
if (digitalRead(pbbypass) == 1){
switch(modebypass){
case 0:
modebypass = 1;
bypass();
break;
case 1:
modebypass = 0;
break;
}
eepromupdate();
while (digitalRead(pbbypass) == 1) {
setMode();
}
}
//Pushbuttor Or
if (digitalRead(pbor) == 1){
switch(mode) {
case 1:
case 2:
mode++; //increase mode
break;
case 3:
mode = 1; //switch from highest to lowest or-mode
break;
case 4:
case 5:
case 6:
case 7:
lastandmode = mode; //safe last and-mode
mode = lastormode; //switch to last or-mode
break;
}
eepromupdate();
while (digitalRead(pbor) == 1) {
setMode();
}
}
//Pushbutton and
if (digitalRead(pband) == 1){
switch(mode) {
case 1:
case 2:
case 3:
lastormode = mode; //safe last or-mode
mode = lastandmode; //switch to last and-mode
break;
case 4:
case 5:
case 6:
mode++; //increase mode
break;
case 7:
mode = 4; //switch from highest to lowest and-mode
break;
}
eepromupdate();
while (digitalRead(pband) == 1) {
setMode();
}
}
}
void setMode() {
switch(mode) {
case 1:
mode1();
break;
case 2:
mode2();
break;
case 3:
mode3();
break;
case 4:
mode4();
break;
case 5:
mode5();
break;
case 6:
mode6();
break;
case 7:
mode7();
break;
}
if (debug == 1) serialmonitor();
}
void bypass() { //Bypass
digitalWrite(ledbypass, HIGH);
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
digitalWrite(relais3, LOW);
digitalWrite(relais4, LOW);
digitalWrite(relais5, LOW);
digitalWrite(relais6, LOW);
}
void mode1() { //Loop 1
digitalWrite(ledloop1, HIGH);
digitalWrite(ledloop2, LOW);
digitalWrite(ledloop3, LOW);
digitalWrite(ledand, LOW);
digitalWrite(ledor, HIGH);
if (modebypass == 0){
digitalWrite(ledbypass, LOW);
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, LOW);
digitalWrite(relais4, LOW);
digitalWrite(relais5, LOW);
digitalWrite(relais6, LOW);
}
}
void mode2() { //Loop 2
digitalWrite(ledloop1, LOW);
digitalWrite(ledloop2, HIGH);
digitalWrite(ledloop3, LOW);
digitalWrite(ledand, LOW);
digitalWrite(ledor, HIGH);
if (modebypass == 0){
digitalWrite(ledbypass, LOW);
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
digitalWrite(relais5, LOW);
digitalWrite(relais6, LOW);
}
}
void mode3() { //Loop 3
digitalWrite(ledloop1, LOW);
digitalWrite(ledloop2, LOW);
digitalWrite(ledloop3, HIGH);
digitalWrite(ledand, LOW);
digitalWrite(ledor, HIGH);
if (modebypass == 0){
digitalWrite(ledbypass, LOW);
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
digitalWrite(relais3, LOW);
digitalWrite(relais4, LOW);
digitalWrite(relais5, HIGH);
digitalWrite(relais6, HIGH);
}
}
void mode4() { //Loop 1+2
digitalWrite(ledloop1, HIGH);
digitalWrite(ledloop2, HIGH);
digitalWrite(ledloop3, LOW);
digitalWrite(ledand, HIGH);
digitalWrite(ledor, LOW);
if (modebypass == 0){
digitalWrite(ledbypass, LOW);
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
digitalWrite(relais5, LOW);
digitalWrite(relais6, LOW);
}
}
void mode5() { //Loop 1+3
digitalWrite(ledloop1, HIGH);
digitalWrite(ledloop2, LOW);
digitalWrite(ledloop3, HIGH);
digitalWrite(ledand, HIGH);
digitalWrite(ledor, LOW);
if (modebypass == 0){
digitalWrite(ledbypass, LOW);
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, LOW);
digitalWrite(relais4, LOW);
digitalWrite(relais5, HIGH);
digitalWrite(relais6, HIGH);
}
}
void mode6() { //Loop 2+3
digitalWrite(ledloop1, LOW);
digitalWrite(ledloop2, HIGH);
digitalWrite(ledloop3, HIGH);
digitalWrite(ledand, HIGH);
digitalWrite(ledor, LOW);
if (modebypass == 0){
digitalWrite(ledbypass, LOW);
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
digitalWrite(relais5, HIGH);
digitalWrite(relais6, HIGH);
}
}
void mode7() { //Loop 1+2+3
digitalWrite(ledloop1, HIGH);
digitalWrite(ledloop2, HIGH);
digitalWrite(ledloop3, HIGH);
digitalWrite(ledand, HIGH);
digitalWrite(ledor, LOW);
if (modebypass == 0){
digitalWrite(ledbypass, LOW);
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
digitalWrite(relais5, HIGH);
digitalWrite(relais6, HIGH);
}
}
void eepromupdate() {
EEPROM.update(0, modebypass);
EEPROM.update(1, mode);
EEPROM.update(2, lastandmode);
EEPROM.update(3, lastormode);
}
void serialmonitor() { //Serial Monitor Debug
//hier sind diverse Serial.print (gelöscht wegen 9000 Zeichen Limit)
}