// Midi pedál k ovládání BOSS VF-1
// Krátkým stiskem vybere nástroj 1-8/9-16 dle zvolené banky
// banky se přepínají podržením libovolného tlačítka po dobu 2 sec
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
int Tlacitko1 = A0; // Definice proměnných pro 8 tlačítek
int Tlacitko2 = A1;
int Tlacitko3 = A2;
int Tlacitko4 = A3;
int Tlacitko5 = A4;
int Tlacitko6 = A5;
int Tlacitko7 = 12; // moje Arduino mělo vadný vstup A6, proto je zde použit digitální vstup D12, normmálně zde má být: int Tlacitko7 = A6;
int Tlacitko8 = A7;
int Led1 = 2; // Definice proměnných pro 8 LED
int Led2 = 3;
int Led3 = 4;
int Led4 = 5;
int Led5 = 6;
int Led6 = 7;
int Led7 = 8;
int Led8 = 9;
int LedBanka1 = 10;
int LedBanka2 = 11;
int U_Tlacitko1; // Definice proměnných pro 8 tlačítek - aktuální hodnoty
int U_Tlacitko2;
int U_Tlacitko3;
int U_Tlacitko4;
int U_Tlacitko5;
int U_Tlacitko6;
int U_Tlacitko7;
int U_Tlacitko8;
int U_Tlacitko1_old = 0; // Definice proměnných pro 8 tlačítek - minulé hodnoty
int U_Tlacitko2_old = 0;
int U_Tlacitko3_old = 0;
int U_Tlacitko4_old = 0;
int U_Tlacitko5_old = 0;
int U_Tlacitko6_old = 0;
int U_Tlacitko7_old = 0;
int U_Tlacitko8_old = 0;
unsigned long cas1;
unsigned long cas2;
boolean bank1 = true; // Nastavení banky1 jako výchozí
boolean bank1_old = true;
int num = 0;
int num_old = 0;
int Program = 0;
// -----------------------------------------------------------------------------------
void setup() {
MIDI.begin(); // initialise MIDI
pinMode(Led1, OUTPUT); // Nastavení pinů jako výstupy
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
pinMode(Led4, OUTPUT);
pinMode(Led5, OUTPUT);
pinMode(Led6, OUTPUT);
pinMode(Led7, OUTPUT);
pinMode(Led8, OUTPUT);
pinMode(LedBanka1, OUTPUT);
pinMode(LedBanka2, OUTPUT);
pinMode(Tlacitko7, INPUT); // u nepoškozeného Arduino smazat tento řádek
cas1 = millis();
cas2 = millis();
MIDI.sendProgramChange(0,1); // aktivace výchozího stavu
digitalWrite(Led1, HIGH);
digitalWrite(LedBanka1, HIGH);
}
// ------------------------------------------------------------------------------------
void loop() {
// 1) Načtení hodnot tlačítek do proměnných
U_Tlacitko1 = analogRead(Tlacitko1);
U_Tlacitko2 = analogRead(Tlacitko2);
U_Tlacitko3 = analogRead(Tlacitko3);
U_Tlacitko4 = analogRead(Tlacitko4);
U_Tlacitko5 = analogRead(Tlacitko5);
U_Tlacitko6 = analogRead(Tlacitko6);
U_Tlacitko7 = digitalRead(Tlacitko7); // u nepoškozeného Arduina: U_Tlacitko7 = analogRead(Tlacitko7);
U_Tlacitko8 = analogRead(Tlacitko8);
// 2) Převod na logické stavy, 0-vypnuto, 1-zapnuto
if (U_Tlacitko1 < 200) {
U_Tlacitko1 = 1;
}
else {
U_Tlacitko1 = 0;
}
// ---------------------
if (U_Tlacitko2 < 200) {
U_Tlacitko2 = 1;
}
else {
U_Tlacitko2 = 0;
}
// ---------------------
if (U_Tlacitko3 < 200) {
U_Tlacitko3 = 1;
}
else {
U_Tlacitko3 = 0;
}
// ---------------------
if (U_Tlacitko4 < 200) {
U_Tlacitko4 = 1;
}
else {
U_Tlacitko4 = 0;
}
// ---------------------
if (U_Tlacitko5 < 200) {
U_Tlacitko5 = 1;
}
else {
U_Tlacitko5 = 0;
}
// ---------------------
if (U_Tlacitko6 < 200) {
U_Tlacitko6 = 1;
}
else {
U_Tlacitko6 = 0;
}
// ---------------------
if (U_Tlacitko7 == 0) { // u nepoškozeného Arduina: U_Tlacitko7 < 200
U_Tlacitko7 = 1;
}
else {
U_Tlacitko7 = 0;
}
// ---------------------
if (U_Tlacitko8 > 800) {
U_Tlacitko8 = 1;
}
else {
U_Tlacitko8 = 0;
}
// ---------------------
// 3) Ošetření zákmitů, vyhodnocení změny a uložení do paměti
if (U_Tlacitko1 != U_Tlacitko1_old || U_Tlacitko2 != U_Tlacitko2_old || U_Tlacitko3 != U_Tlacitko3_old || U_Tlacitko4 != U_Tlacitko4_old || U_Tlacitko5 != U_Tlacitko5_old || U_Tlacitko6 != U_Tlacitko6_old || U_Tlacitko7 != U_Tlacitko7_old || U_Tlacitko8 != U_Tlacitko8_old || bank1 != bank1_old) {
// 4) Vyhodnocení
if (U_Tlacitko1 == 1) {
num = 1;
}
if (U_Tlacitko2 == 1) {
if (num_old != 2) {
num = 2;
}
if (num_old == 2) {
num = 1;
}
}
if (U_Tlacitko3 == 1) {
if (num_old != 3) {
num = 3;
}
if (num_old == 3) {
num = 1;
}
}
if (U_Tlacitko4 == 1) {
if (num_old != 4) {
num = 4;
}
if (num_old == 4) {
num = 1;
}
}
if (U_Tlacitko5 == 1) {
if (num_old != 5) {
num = 5;
}
if (num_old == 5) {
num = 1;
}
}
if (U_Tlacitko6 == 1) {
if (num_old != 6) {
num = 6;
}
if (num_old == 6) {
num = 1;
}
}
if (U_Tlacitko7 == 1) {
if (num_old != 7) {
num = 7;
}
if (num_old == 7) {
num = 1;
}
}
if (U_Tlacitko8 == 1) {
if (num_old != 8) {
num = 8;
}
if (num_old == 8) {
num = 1;
}
}
// 5) Aktivace LED --------------------------------------------
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
digitalWrite(Led5, LOW);
digitalWrite(Led6, LOW);
digitalWrite(Led7, LOW);
digitalWrite(Led8, LOW);
digitalWrite(num + 1, HIGH);
if (bank1 == true) {
Program = 0;
digitalWrite(LedBanka1, HIGH);
digitalWrite(LedBanka2, LOW);
}
if (bank1 == false) {
Program = 8;
digitalWrite(LedBanka1, LOW);
digitalWrite(LedBanka2, HIGH);
}
// 6) Aktivace MIDI ---------------------------------------------
MIDI.sendProgramChange(num - 1 + Program,1);
bank1_old = bank1;
U_Tlacitko1_old = U_Tlacitko1;
U_Tlacitko2_old = U_Tlacitko2;
U_Tlacitko3_old = U_Tlacitko3;
U_Tlacitko4_old = U_Tlacitko4;
U_Tlacitko5_old = U_Tlacitko5;
U_Tlacitko6_old = U_Tlacitko6;
U_Tlacitko7_old = U_Tlacitko7;
U_Tlacitko8_old = U_Tlacitko8;
delay(100); // ošetření zákmitů (ms)
}
// 5) Měření 2 sec sepnutí pro přepínání banky
if (U_Tlacitko1 == 1 || U_Tlacitko2 == 1 || U_Tlacitko3 == 1 || U_Tlacitko4 == 1 || U_Tlacitko5 == 1 || U_Tlacitko6 == 1 || U_Tlacitko7 == 1 || U_Tlacitko8 == 1) {
cas1 = millis();
if (cas1 > cas2 + 2000) {
bank1 = !bank1;
cas2 = cas1;
}
}
else {
cas2 = millis();
num_old = num;
}
}