Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // Midi pedál k ovládání BOSS VF-1
  2. // Krátkým stiskem vybere nástroj 1-8/9-16 dle zvolené banky
  3. // banky se přepínají podržením libovolného tlačítka po dobu 2 sec
  4.  
  5. #include <MIDI.h>
  6. MIDI_CREATE_DEFAULT_INSTANCE();
  7.  
  8. int Tlacitko1 = A0;    // Definice proměnných pro 8 tlačítek
  9. int Tlacitko2 = A1;
  10. int Tlacitko3 = A2;
  11. int Tlacitko4 = A3;    
  12. int Tlacitko5 = A4;
  13. int Tlacitko6 = A5;
  14. 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;
  15. int Tlacitko8 = A7;
  16.  
  17. int Led1 = 2;       // Definice proměnných pro 8 LED
  18. int Led2 = 3;
  19. int Led3 = 4;          
  20. int Led4 = 5;
  21. int Led5 = 6;          
  22. int Led6 = 7;
  23. int Led7 = 8;          
  24. int Led8 = 9;
  25. int LedBanka1 = 10;
  26. int LedBanka2 = 11;
  27.  
  28. int U_Tlacitko1;   // Definice proměnných pro 8 tlačítek - aktuální hodnoty
  29. int U_Tlacitko2;
  30. int U_Tlacitko3;
  31. int U_Tlacitko4;
  32. int U_Tlacitko5;
  33. int U_Tlacitko6;
  34. int U_Tlacitko7;
  35. int U_Tlacitko8;
  36.  
  37. int U_Tlacitko1_old = 0;   // Definice proměnných pro 8 tlačítek - minulé hodnoty
  38. int U_Tlacitko2_old = 0;
  39. int U_Tlacitko3_old = 0;
  40. int U_Tlacitko4_old = 0;
  41. int U_Tlacitko5_old = 0;
  42. int U_Tlacitko6_old = 0;
  43. int U_Tlacitko7_old = 0;
  44. int U_Tlacitko8_old = 0;
  45.  
  46. unsigned long cas1;
  47. unsigned long cas2;
  48. boolean bank1 = true;  // Nastavení banky1 jako výchozí
  49. boolean bank1_old = true;
  50. int num = 0;
  51. int num_old = 0;
  52. int Program = 0;
  53.  
  54.  
  55. // -----------------------------------------------------------------------------------
  56. void setup() {
  57.   MIDI.begin();          // initialise MIDI
  58.   pinMode(Led1, OUTPUT);   // Nastavení pinů jako výstupy
  59.   pinMode(Led2, OUTPUT);
  60.   pinMode(Led3, OUTPUT);
  61.   pinMode(Led4, OUTPUT);
  62.   pinMode(Led5, OUTPUT);
  63.   pinMode(Led6, OUTPUT);
  64.   pinMode(Led7, OUTPUT);
  65.   pinMode(Led8, OUTPUT);
  66.   pinMode(LedBanka1, OUTPUT);
  67.   pinMode(LedBanka2, OUTPUT);
  68.   pinMode(Tlacitko7, INPUT); // u nepoškozeného Arduino smazat tento řádek
  69.   cas1 = millis();
  70.   cas2 = millis();
  71.  
  72.   MIDI.sendProgramChange(0,1);  // aktivace výchozího stavu
  73.   digitalWrite(Led1, HIGH);
  74.   digitalWrite(LedBanka1, HIGH);
  75. }
  76. // ------------------------------------------------------------------------------------
  77. void loop() {
  78. // 1) Načtení hodnot tlačítek do proměnných  
  79.   U_Tlacitko1 = analogRead(Tlacitko1);  
  80.   U_Tlacitko2 = analogRead(Tlacitko2);
  81.   U_Tlacitko3 = analogRead(Tlacitko3);
  82.   U_Tlacitko4 = analogRead(Tlacitko4);
  83.   U_Tlacitko5 = analogRead(Tlacitko5);  
  84.   U_Tlacitko6 = analogRead(Tlacitko6);
  85.   U_Tlacitko7 = digitalRead(Tlacitko7); // u nepoškozeného Arduina: U_Tlacitko7 = analogRead(Tlacitko7);
  86.   U_Tlacitko8 = analogRead(Tlacitko8);
  87.  
  88. // 2) Převod na logické stavy, 0-vypnuto, 1-zapnuto
  89.   if (U_Tlacitko1 < 200) {
  90.     U_Tlacitko1 = 1;
  91.   }
  92.   else {
  93.     U_Tlacitko1 = 0;
  94.   }
  95.   // ---------------------
  96.   if (U_Tlacitko2 < 200) {
  97.     U_Tlacitko2 = 1;
  98.   }
  99.   else {
  100.     U_Tlacitko2 = 0;
  101.   }
  102.   // ---------------------  
  103.   if (U_Tlacitko3 < 200) {
  104.     U_Tlacitko3 = 1;
  105.   }
  106.   else {
  107.     U_Tlacitko3 = 0;
  108.   }
  109.   // ---------------------
  110.   if (U_Tlacitko4 < 200) {
  111.     U_Tlacitko4 = 1;
  112.   }
  113.   else {
  114.     U_Tlacitko4 = 0;
  115.   }
  116.   // ---------------------
  117.   if (U_Tlacitko5 < 200) {
  118.     U_Tlacitko5 = 1;
  119.   }
  120.   else {
  121.     U_Tlacitko5 = 0;
  122.   }
  123.   // ---------------------
  124.   if (U_Tlacitko6 < 200) {
  125.     U_Tlacitko6 = 1;
  126.   }
  127.   else {
  128.     U_Tlacitko6 = 0;
  129.   }
  130.   // ---------------------
  131.   if (U_Tlacitko7 == 0) {    // u nepoškozeného Arduina: U_Tlacitko7 < 200
  132.     U_Tlacitko7 = 1;
  133.   }
  134.   else {
  135.     U_Tlacitko7 = 0;
  136.   }
  137.   // ---------------------
  138.   if (U_Tlacitko8 > 800) {
  139.     U_Tlacitko8 = 1;
  140.   }
  141.   else {
  142.     U_Tlacitko8 = 0;
  143.   }
  144.   // ---------------------
  145.  
  146. // 3) Ošetření zákmitů, vyhodnocení změny a uložení do paměti
  147.   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) {
  148.    
  149.     // 4) Vyhodnocení
  150.     if (U_Tlacitko1 == 1) {
  151.       num = 1;
  152.     }
  153.        
  154.     if (U_Tlacitko2 == 1) {
  155.       if (num_old != 2) {
  156.       num = 2;
  157.       }
  158.       if (num_old == 2) {
  159.       num = 1;
  160.       }
  161.     }
  162.    
  163.     if (U_Tlacitko3 == 1) {
  164.      if (num_old != 3) {
  165.       num = 3;
  166.       }
  167.       if (num_old == 3) {
  168.       num = 1;      
  169.       }
  170.     }
  171.    
  172.     if (U_Tlacitko4 == 1) {
  173.       if (num_old != 4) {
  174.       num = 4;
  175.       }
  176.       if (num_old == 4) {
  177.       num = 1;
  178.       }
  179.     }
  180.    
  181.     if (U_Tlacitko5 == 1) {
  182.       if (num_old != 5) {
  183.       num = 5;
  184.       }
  185.       if (num_old == 5) {
  186.       num = 1;
  187.       }
  188.     }
  189.    
  190.     if (U_Tlacitko6 == 1) {
  191.       if (num_old != 6) {
  192.       num = 6;
  193.       }
  194.       if (num_old == 6) {
  195.       num = 1;
  196.       }
  197.     }
  198.    
  199.     if (U_Tlacitko7 == 1) {
  200.       if (num_old != 7) {
  201.       num = 7;
  202.       }
  203.       if (num_old == 7) {
  204.       num = 1;
  205.       }
  206.     }
  207.    
  208.     if (U_Tlacitko8 == 1) {
  209.       if (num_old != 8) {
  210.       num = 8;
  211.       }
  212.       if (num_old == 8) {
  213.       num = 1;
  214.       }
  215.     }
  216.    
  217.     // 5) Aktivace LED --------------------------------------------
  218.     digitalWrite(Led1, LOW);  
  219.     digitalWrite(Led2, LOW);
  220.     digitalWrite(Led3, LOW);
  221.     digitalWrite(Led4, LOW);
  222.     digitalWrite(Led5, LOW);
  223.     digitalWrite(Led6, LOW);
  224.     digitalWrite(Led7, LOW);
  225.     digitalWrite(Led8, LOW);
  226.     digitalWrite(num + 1, HIGH);
  227.    
  228.     if (bank1 == true) {
  229.     Program = 0;
  230.     digitalWrite(LedBanka1, HIGH);
  231.     digitalWrite(LedBanka2, LOW);
  232.     }
  233.  
  234.     if (bank1 == false) {
  235.     Program = 8;
  236.     digitalWrite(LedBanka1, LOW);
  237.     digitalWrite(LedBanka2, HIGH);
  238.     }
  239.    
  240.     // 6) Aktivace MIDI ---------------------------------------------
  241.     MIDI.sendProgramChange(num - 1 + Program,1);
  242.    
  243.     bank1_old = bank1;
  244.     U_Tlacitko1_old = U_Tlacitko1;
  245.     U_Tlacitko2_old = U_Tlacitko2;
  246.     U_Tlacitko3_old = U_Tlacitko3;
  247.     U_Tlacitko4_old = U_Tlacitko4;
  248.     U_Tlacitko5_old = U_Tlacitko5;
  249.     U_Tlacitko6_old = U_Tlacitko6;
  250.     U_Tlacitko7_old = U_Tlacitko7;
  251.     U_Tlacitko8_old = U_Tlacitko8;
  252.     delay(100);  // ošetření zákmitů (ms)
  253.   }
  254.  
  255. // 5) Měření 2 sec sepnutí pro přepínání banky
  256.   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) {
  257.     cas1 = millis();
  258.     if (cas1 > cas2 + 2000) {
  259.       bank1 = !bank1;
  260.       cas2 = cas1;
  261.     }
  262.   }
  263.   else {
  264.     cas2 = millis();
  265.     num_old = num;
  266.   }
  267.  
  268. }