дребезг ноты

Тема в разделе "Arduino & Shields", создана пользователем Hard_user, 8 сен 2018.

  1. Hard_user

    Hard_user Нуб

    Делаю миди контролер беспровода.
    Кнопку нажимаешь нота зажимается кнопку отпускаю нота тухнет.
    Ну вот только у меня дрожит нота.
    Приемник
    Код (C++):
    /*
      Тестирование производилось на Arduino IDE 1.6.11
      Дата тестирования 07.10.2016г.
    */

    #include <SoftwareSerial.h>// import the serial library
    #include <MIDI.h>  // INclude MIDI library
    MIDI_CREATE_DEFAULT_INSTANCE();
    #include <midi_Defs.h>
    #include <midi_Message.h>
    #include <midi_Namespace.h>
    #include <midi_Settings.h>
    #include <SPI.h>                          // Подключаем библиотеку SPI
    #include <nRF24L01.h>                     // Подключаем библиотеку nRF24L01
    #include <RF24.h>                         // Подключаем библиотеку RF24
    int data[1];                              // Создаём массив для приёма данных
    RF24 radio(9,10);                         // Указываем номера выводов nRF24L01+ (CE, CSN)
    int LED = 3;                              // Создаем переменную SW1 и указываем номер вывода
    void setup(void){
        Serial.begin(31250);  // default midi speed rate
      delay(1000);          // Ждем 1с
      pinMode(LED,OUTPUT);        // Устанавливаем вывод 3 на выход
      radio.begin();                          // Инициируем работу nRF24L01+
      radio.setChannel(100);                  // Указываем канал передачи (от 0 до 126)
      radio.setDataRate (RF24_1MBPS);         // Указываем скорость передачи (250KBPS, 1MBPS, 2MBPS)
      radio.setPALevel(RF24_PA_HIGH);         // Указываем мощность передатчика (MIN=-18dBm, LOW=-12dBm, HIGH=-6dBm, MAX=0dBm)
      radio.openReadingPipe(1,0x0123456789LL);// Задаем идентификатором 0x1234567890LL для передачи данных данных
      radio.startListening  ();
    }
    void loop(void)
    {
      if (radio.available()){     // Если в буфере поступили данные
          radio.read(data, 1);      // Считываем данные с массива data и задаем количество считываемых байт              
          if(data[0] == 123){                 // Если в массиве data значение 123
             digitalWrite(LED, HIGH);
             MIDI.sendNoteOn(36,127,1);}        // Включаем светодиод
                                   // Ждем 10мс
       }
      else{           // Если в массиве data другое значение
          digitalWrite(LED, LOW);
          MIDI.sendNoteOff(36,0,1);// Выключаем светодиод
                 // Ждем 10мс
       }
     
    }
    Передатчик
    Код (C++):
    /*
      Тестирование производилось на Arduino IDE 1.6.11
      Дата тестирования 07.10.2016г.
    */

    #include <SPI.h>                        // Подключаем библиотеку SPI
    #include <nRF24L01.h>                   // Подключаем библиотеку nRF24L01
    #include <RF24.h>                       // Подключаем библиотеку RF24
    int data[1];                            // Создаём массив для приёма данных
    RF24 radio(9,10);                       // Указываем номера выводов nRF24L01+ (CE, CSN)
    int button = 7;                         // Создаем переменную button и указываем номер вывода
    void setup(void){
      pinMode(button, INPUT);    // Устанавливаем вывод 7 на вход
      radio.begin();                        // Инициируем работу nRF24L01+
      radio.setChannel(100);                // Указываем канал передачи (от 0 до 126)
      radio.setDataRate (RF24_1MBPS);       // Указываем скорость передачи (250KBPS, 1MBPS, 2MBPS)
      radio.setPALevel(RF24_PA_HIGH);       // Указываем мощность передатчика (MIN=-18dBm, LOW=-12dBm, HIGH=-6dBm, MAX=0dBm)
      radio.openWritingPipe(0x0123456789LL);// Задаем идентификатором 0x0123456789LL для передачи данных данных
    }
    void loop(void)
    {
      if (digitalRead(button) == LOW){     // Считываем переменную "button", если HIGH идем дальше, если LOW зацикливаемся                    
      data[0] = 123;                        // Записываем значение 123 в массив data
      radio.write(data, 1);}                // Отправляем данные из массива data
    }
     
  2. Mitrandir

    Mitrandir Гуру

  3. Hard_user

    Hard_user Нуб

    Как банально)
    там дело не в дребезге кнопки
    Там включение ноты происходит постоянно
     
  4. Mitrandir

    Mitrandir Гуру

    как нота может дребезжать если она постоянно включена?
     
  5. Hard_user

    Hard_user Нуб

    потому что цикл не останавливается.
    и каждый новый цикл слышно ее включение.
     
  6. Hard_user

    Hard_user Нуб

    или передача идет постоянно
    На прошлой версии по блютуз решилось все устранением отправки множества символов до одного.
    как в коде выше.
     
  7. Hard_user

    Hard_user Нуб

    Код (C++):
    int button = 4;
    int oldstate=4;
    void setup() {
      Serial.begin(9600);
      pinMode(button, INPUT);
    }

    void loop(){
      {
    if(digitalRead(button) == LOW)//если кнопка нажата ...  
    {  
    Serial.println('R');//отправляем 'R' в сериал попт
     
    while (digitalRead(button)!=HIGH) {delay(1);} // не выходим из цикла пока кнопка не отпущена.
    }
    if(digitalRead(button) == HIGH)//если кнопка отжажата ...
    {
    Serial.println('N');//включаем светодиод
    }
    }}
     
  8. parovoZZ

    parovoZZ Гуру

    Ну выйди из цикла брейком.