Задать вопрос
@veedaff

Дело в NRF-модуле или в коде?

Собрал я на примере небезысвестных ютуберов пару приёмник-передатчиков на китайских нано-ардуинках и таких же китайских 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. не бейте за дилетантство, лучше скиньте ссылок чем его забороть.
  • Вопрос задан
  • 130 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
nava2002
@nava2002
Инженер
Сразу подумал о питании 3.3в.
В видео подозрения подтвердились.
уверен если внимательно повторить конструкцию в ролике все должно получиться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы