Редакция кода. Требуется маленькая помощь.

Max_Max
Offline
Зарегистрирован: 23.09.2018

Доброго времени суток! В электронике разбираюсь, а вот в коде не очень.. не просил бы помощи, если бы было время. Собираю midi контроллер, хочу показать друзьям "черновой" вариант, но они через неделю уедут из города, поэтому время на вес золота - надо развести плату, распечатать, перенести на текстолит, вытравить, высверлить(какое же это муторное занятие..), залудить, распаять присобачить как-то к инструменту, настроить, а ещё в коде разбираться, к сожалению, нет времени, поэтому прошу помощи.

Есть код(из интьернета) для клавиатуры на 7 кнопок. Но там ещё присутствует энкодер, который мне не нужен. Поэтому первый банальный вопрос, если нет энкодера - это будет создавать какие-то ошибки при работе мк? И, если кому не трудно, можете подсказать какие строчки или даже самостоятельно отредактировать код так, чтобы энкодер полностью исчез из кода. Я отметил комментарием то, что предполагаю надо удалить, но сомневаюсь. Код хоть и на 263 строки, но там больше половины занимают типы данных и описание состояния кнопок. Сам код в закрепе. Заранее спасибо!
 

#define encoder0PinA 2   // удалить?
#define encoder0PinB 3   // удалить?

#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

volatile int encoder0Pos = 0;   // удалить?
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);
  
  pinMode(encoder0PinA, INPUT); 
  digitalWrite(encoder0PinA, HIGH);       
  pinMode(encoder0PinB, INPUT); 
  digitalWrite(encoder0PinB, HIGH); 

  attachInterrupt(0, rotEncoder, CHANGE);  
  
  Serial.begin(115200);
}

void rotEncoder(){
  rotating=true; 
}

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);
  
  while(rotating) {   // удалить?
    delay(2);   // удалить?
    if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) {   // удалить?  
      encoder0Pos = encoder0Pos + 5;   // удалить?
      //encoder0Pos++;   // удалить?
      if(encoder0Pos > 127) encoder0Pos = 127;   // удалить?
    } 
    else {   // удалить?                                   
      encoder0Pos = encoder0Pos - 5;   // удалить?
      //encoder0Pos--;   // удалить?
      if(encoder0Pos < 0) encoder0Pos = 0;   // удалить?
    }   // удалить?
    Serial.println(encoder0Pos,DEC);   // удалить?
    //MSB = encoder0Pos >> 8;    // Старший байт   // удалить?
    //LSB = encoder0Pos & 0xFF;  // Младший байт   // удалить?
    //Serial.println(MSB,BIN);   // удалить?
    //Serial.println(LSB,BIN);   // удалить?
    noteOn(0xB0, 0x01, encoder0Pos);  // Modulation Wheel Controller   // удалить?
    //noteOn(0xE0, MSB, LSB);    // Pitch Bend   // удалить?
    rotating=false; // Reset the flag back to false   // удалить?
    //Serial.println(encoder0Pos);   // удалить?
  }
     // удалить?
  // Нота 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;
    encoder0Pos = 0;  // Возвращаем позицию колеса в ноль
  }
  
  // Нота 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;
    encoder0Pos = 0;
  }
  
  // Нота 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;
    encoder0Pos = 0;
  }  
  
  // Нота 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;
    encoder0Pos = 0;
  }  


  // Нота 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;
    encoder0Pos = 0;
  }  
  
  // Нота 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;
    encoder0Pos = 0;
  }   
  
  // Нота 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;
    encoder0Pos = 0;
  }     
  
  
}

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


 

negavoid
Offline
Зарегистрирован: 09.07.2016

Наверное, так

#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

#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;

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);
}

 

ВН
Offline
Зарегистрирован: 25.02.2016

Max_Max пишет:
Поэтому первый банальный вопрос, если нет энкодера - это будет создавать какие-то ошибки при работе мк? 

Обработка энкодера активируется прерыванием - 0, attachInterrupt(0, rotEncoder, CHANGE); 

которому соответствует определенная нога проца  в зависимости от вида ардуины. см. табличку http://arduino.ru/Reference/AttachInterrupt

и условие CHANGE  - прерывание вызывается при смене значения на порту, с LOW на HIGH и наоборот.

т.е. чтобы функция обработки rotEncoder  не запускалась, требуется найти нужную ногу и притянуть ее к земле или питанию

 

Max_Max
Offline
Зарегистрирован: 23.09.2018

Спасибо за помощь! А не подскажете, этот код можно использовать не с кнопкой, а датчиком холла? И как определить в мониторе порта работоспособность скетча? Я запускаю монитор, а мне выдаёт сплошные знаки меньше. При поднесении магнита ничего не меняется.

negavoid пишет:

Наверное, так

#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

#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;

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);
}

 

 

Max_Max
Offline
Зарегистрирован: 23.09.2018

Спасибо за помощь! А не подскажете, этот код можно использовать не с кнопкой, а датчиком холла? И как определить в мониторе порта работоспособность скетча? Я запускаю монитор, а мне выдаёт сплошные знаки меньше. При поднесении магнита ничего не меняется.

ВН пишет:

Max_Max пишет:
Поэтому первый банальный вопрос, если нет энкодера - это будет создавать какие-то ошибки при работе мк? 

Обработка энкодера активируется прерыванием - 0, attachInterrupt(0, rotEncoder, CHANGE); 

которому соответствует определенная нога проца  в зависимости от вида ардуины. см. табличку http://arduino.ru/Reference/AttachInterrupt

и условие CHANGE  - прерывание вызывается при смене значения на порту, с LOW на HIGH и наоборот.

т.е. чтобы функция обработки rotEncoder  не запускалась, требуется найти нужную ногу и притянуть ее к земле или питанию

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ужасный код.

Max_Max, Вы уверены, что он работает именно так, как Вам нужно?

negavoid
Offline
Зарегистрирован: 09.07.2016

Можно и с датчиком Холла, только придётся чуть дописать код.

Проверить работоспособность можно так - закоротите проводком (а-ля кнопка) любой пин от 4 до 10 с пином +5 вольт - монитор порта должен отображать другие символы. И при таком коде резисторы придётся добавлять к кнопкам, а то они гуляют, или же переписать код с INPUT на INPUT_PULLUP, тогда можно будет обойтись без внешних резисторов. 

Max_Max
Offline
Зарегистрирован: 23.09.2018

andriano пишет:

Ужасный код.

Max_Max, Вы уверены, что он работает именно так, как Вам нужно?

Честно сказать не знаю. Схему взял тут https://cxem.net/arduino/arduino29.php
Первое что попалось. Надеюсь на форуме нет правил по поводу публикаций сторонних сайтов.

Max_Max
Offline
Зарегистрирован: 23.09.2018

negavoid пишет:

Можно и с датчиком Холла, только придётся чуть дописать код.

Проверить работоспособность можно так - закоротите проводком (а-ля кнопка) любой пин от 4 до 10 с пином +5 вольт - монитор порта должен отображать другие символы. И при таком коде резисторы придётся добавлять к кнопкам, а то они гуляют, или же переписать код с INPUT на INPUT_PULLUP, тогда можно будет обойтись без внешних резисторов. 

Спасибо. Разобрался как проверить в мониторе. Вот на этом сайте( https://www.drive2.ru/c/494452853985771732/ ) кто-то рассказывает как работает датчик на баяне(тоже на баян хочу повесить), но без детального разбора. Я думал, что датчик Холла можно подключить, как кнопку. Подключил по рисунку(ниже) с сайта, но он даёт нескончаемую "<<<...", тобишь датчик всё время в 1(проверял на кнопке - 1 дает по нажатию), а надо наоборот. Поэтому не подскажете что надо в коде изменить? Или где об этом можно почитать.
ce1408ds-1920.jpg

P.S. Есть ли на этом форуме спйлеры, чтобы картинку спрятать?