Делаю миди контролер беспровода. Кнопку нажимаешь нота зажимается кнопку отпускаю нота тухнет. Ну вот только у меня дрожит нота. Приемник Код (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 }
вот видео где рассказано как правильно кнопку считывать: http://wiki.amperka.ru/видеоуроки:2-кнопки-pwm-функции
или передача идет постоянно На прошлой версии по блютуз решилось все устранением отправки множества символов до одного. как в коде выше.
Код (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');//включаем светодиод } }}