Собрал я на примере
небезысвестных ютуберов пару приёмник-передатчиков на китайских нано-ардуинках и таких же китайских
NRF24L01 .
Основной идеей было - между ними передавать MIDI-сигнал в качестве управляющего и, с его помощью, собственно, управлять свечением RGB-светяшки.
Первым делом попробовал без беспроводных соединений. Работает, никаких вопросов.
(Делал как
здесь)
Потом отдельно попытался перекинуть ШИМ-сигнал на пару пинов приёмника.
Всё работает вопреки словам, что NRF'кам необходимы отдельные источники питания.
(Кривое видео с телефона, что оно худо-бедно работает,
прилагается)
Попытка объединить эти две технологии не дала никакого результата (либо я чего-то упустил.)
Код передатчика:
#include <SPI.h> // библиотека для работы с шиной SPI
#include "nRF24L01.h" // библиотека радиомодуля
#include "RF24.h" // ещё библиотека радиомодуля
#include <MIDI.h>
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
byte a;
MIDI_CREATE_DEFAULT_INSTANCE();
void setup() {
MIDI.begin(MIDI_CHANNEL_OMNI);
MIDI.setHandleControlChange(CCFunction);
radio.begin(); // активировать модуль
radio.setAutoAck(1); // режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); // (время между попыткой достучаться, число попыток)
radio.enableAckPayload(); // разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); // размер пакета, в байтах
radio.openWritingPipe(address[0]); // мы - труба 0, открываем канал для передачи данных
radio.setChannel(0x60); // выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_MAX);
radio.setDataRate (RF24_1MBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
radio.powerUp(); // начать работу
radio.stopListening(); // не слушаем радиоэфир, мы передатчик
}
void CCFunction(byte channel, byte number, byte value){
switch (number){
case 22:
radio.write(&value, sizeof(value));
break;
}
}
void loop() {
MIDI.read();
}
Код приёмника:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <MIDI.h>
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
#define LedRed 3
byte a;
void setup() {
Serial.begin(9600);
radio.begin(); // активировать модуль
radio.setAutoAck(1); // режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); // (время между попыткой достучаться, число попыток)
radio.enableAckPayload(); // разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); // размер пакета, в байтах
radio.openReadingPipe(1, address[0]); // хотим слушать трубу 0
radio.setChannel(0x60); // выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_MAX); // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_1MBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
//должна быть одинакова на приёмнике и передатчике!
//при самой низкой скорости имеем самую высокую чувствительность и дальность!!
radio.powerUp(); // начать работу
radio.startListening(); // начинаем слушать эфир, мы приёмный модуль
}
void loop() {
byte pipeNo;
while(radio.available(&pipeNo)){
radio.read(&a, sizeof(a));
analogWrite(LedRed, a);
}
}
P.S. не бейте за дилетантство, лучше скиньте ссылок чем его забороть.