midi контроллер на UNO

En Gi
Offline
Зарегистрирован: 12.01.2017

Начинающий нихрена на не понимающий. Бьюсь с кодом для контроллера, уже голова болит от информации перелопаченой за пару месяцев.

Подскажите люди умные, как мне запихать в этот скетч потенциометры?!


byte val = 0;
#define note_C 0x3C  // C4
#define note_D 0x3E  // D4
#define note_E 0x40  // E4
#define note_F 0x41  // F4
#define note_G 0x43  // G4
#define note_A 0x45  // A4
#define note_B 0x47  // B4

static boolean rotating=false;

#define switch_C  4
#define switch_D  5
#define switch_E  6
#define switch_F  7
#define switch_G  8
#define switch_A  9
#define switch_B  10


int buttonState_C = 0;
int buttonState_D = 0;
int buttonState_E = 0;
int buttonState_F = 0;
int buttonState_G = 0;
int buttonState_A = 0;
int buttonState_B = 0;


int note_C_send_off = false;
int note_C_send_on = false;
int note_D_send_off = false;
int note_D_send_on = false;
int note_E_send_off = false;
int note_E_send_on = false;
int note_F_send_off = false;
int note_F_send_on = false;
int note_G_send_off = false;
int note_G_send_on = false;
int note_A_send_off = false;
int note_A_send_on = false;
int note_B_send_off = false;
int note_B_send_on = false;
//byte MSB; 
//unsigned int LSB;

void setup()
{
  pinMode(switch_C, INPUT);
  pinMode(switch_D, INPUT);
  pinMode(switch_E, INPUT);
  pinMode(switch_F, INPUT);
  pinMode(switch_G, INPUT);
  pinMode(switch_A, INPUT);
  pinMode(switch_B, INPUT);
  Serial.begin(115200);
}


void loop()
{
  buttonState_C = digitalRead(switch_C);
  buttonState_D = digitalRead(switch_D);
  buttonState_E = digitalRead(switch_E);
  buttonState_F = digitalRead(switch_F);
  buttonState_G = digitalRead(switch_G);
  buttonState_A = digitalRead(switch_A);
  buttonState_B = digitalRead(switch_B);
  
  
  // Нота C
  if (buttonState_C == HIGH && note_C_send_on == false)  // Нажатие клавиши
  {
    noteOn(0x90, note_C, 0x7F);
    note_C_send_on = true;    // Команда Note On послана
    note_C_send_off = false;  // Команда Note Off не послана 
  }
  else if (buttonState_C == HIGH && note_C_send_on == true)  // Если клавиша удерживается
  {
    noteOn(0x00, note_C, 0x7F);
    note_C_send_on = true;
    note_C_send_off = false;
  }
  else if (buttonState_C == LOW && note_C_send_off == false)  // Если клавишу отпустили
  {
    noteOn(0x90, note_C, 0x00);
    note_C_send_on = false;
    note_C_send_off = true;
   
  }
  
  // Нота D
  if (buttonState_D == HIGH && note_D_send_on == false)
  {
    noteOn(0x90, note_D, 0x7F);
    note_D_send_on = true;
    note_D_send_off = false;
  }
  else if (buttonState_D == HIGH && note_D_send_on == true)
  {
    noteOn(0x00, note_D, 0x7F);
    note_D_send_on = true;
    note_D_send_off = false;
  }
  else if (buttonState_D == LOW && note_D_send_off == false)
  {
    noteOn(0x90, note_D, 0x00);
    note_D_send_on = false;
    note_D_send_off = true;
   
  }
  
  // Нота E
  if (buttonState_E == HIGH && note_E_send_on == false)
  {
    noteOn(0x90, note_E, 0x7F);
    note_E_send_on = true;
    note_E_send_off = false;
  }
  else if (buttonState_E == HIGH && note_E_send_on == true)
  {
    noteOn(0x00, note_E, 0x7F);
    note_E_send_on = true;
    note_E_send_off = false;
  }
  else if (buttonState_E == LOW && note_E_send_off == false)
  {
    noteOn(0x90, note_E, 0x00);
    note_E_send_on = false;
    note_E_send_off = true;
   
  }  
  
  // Нота F
  if (buttonState_F == HIGH && note_F_send_on == false)
  {
    noteOn(0x90, note_F, 0x7F);
    note_F_send_on = true;
    note_F_send_off = false;
  }
  else if (buttonState_F == HIGH && note_F_send_on == true)
  {
    noteOn(0x00, note_F, 0x7F);
    note_F_send_on = true;
    note_F_send_off = false;
  }
  else if (buttonState_F == LOW && note_F_send_off == false)
  {
    noteOn(0x90, note_F, 0x00);
    note_F_send_on = false;
    note_F_send_off = true;
   
  }  


  // Нота G
  if (buttonState_G == HIGH && note_G_send_on == false)
  {
    noteOn(0x90, note_G, 0x7F);
    note_G_send_on = true;
    note_G_send_off = false;
  }
  else if (buttonState_G == HIGH && note_G_send_on == true)
  {
    noteOn(0x00, note_G, 0x7F);
    note_G_send_on = true;
    note_G_send_off = false;
  }
  else if (buttonState_G == LOW && note_G_send_off == false)
  {
    noteOn(0x90, note_G, 0x00);
    note_G_send_on = false;
    note_G_send_off = true;
   
  }  
  
  // Нота A
  if (buttonState_A == HIGH && note_A_send_on == false)
  {
    noteOn(0x90, note_A, 0x7F);
    note_A_send_on = true;
    note_A_send_off = false;
  }
  else if (buttonState_A == HIGH && note_A_send_on == true)
  {
    noteOn(0x00, note_A, 0x7F);
    note_A_send_on = true;
    note_A_send_off = false;
  }
  else if (buttonState_A == LOW && note_A_send_off == false)
  {
    noteOn(0x90, note_A, 0x00);
    note_A_send_on = false;
    note_A_send_off = true;
  
  }   
  
  // Нота B
  if (buttonState_B == HIGH && note_B_send_on == false)
  {
    noteOn(0x90, note_B, 0x7F);
    note_B_send_on = true;
    note_B_send_off = false;
  }
  else if (buttonState_B == HIGH && note_B_send_on == true)
  {
    noteOn(0x00, note_B, 0x7F);
    note_B_send_on = true;
    note_B_send_off = false;
  }
  else if (buttonState_B == LOW && note_B_send_off == false)
  {
    noteOn(0x90, note_B, 0x00);
    note_B_send_on = false;
    note_B_send_off = true;
  
  }     
  
  
}

void noteOn(int cmd, int pitch, int velocity) {
   Serial.write(cmd);
   Serial.write(pitch);
   Serial.write(velocity);
   delay(20);
}

 

sslobodyan
Offline
Зарегистрирован: 28.09.2016

Нда, за несколько месяцев разбирательств вы задаете очень крутой вопрос. Отвечаю - измените этот скетч в любом редакторе. Другой ответ как запихать потенциометры вы навряд ли получите. Бросайте это дело, не ваше оно.

En Gi
Offline
Зарегистрирован: 12.01.2017

Спасибо, умный человек. Всего вам доброго.