Vixen+Arduino+nrf24l01, нужна помощь

Нет ответов
maori
Offline
Зарегистрирован: 30.11.2015

Всем привет! с ардуинками работаю не так давно, прошу простить за кривой код)

Суть задачи: Передача данных из программы Vixen Light 3 через радиопередатчики с одной ардуины на другую. Общая цель - управление RGB светодиодной лентой на расстоянии. Из Vixen получаем значения цветов в определенную секунду и шлем эти данные на другой конец. Пока работаю без RGB лента, просто считываю данные в серийник второй ардуины.

т е Vixen -> com port -> arduino uno -> nrf24l01 --------- nrf24l01 -> arduino uno -> com port

Данные Vixen отправляет в формате "+>" и дальше 8 бит

Проштудировав форум все таки завел радиомодули.Передают все гладко без потерь. Начал воевать с Vixen 3, столкнулся с проблемой что данные передаются недостаточно верно.

Код передатчика:

#include  <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

#define MAX_CHANNELS 6

int ch;
int state;
int chVal[MAX_CHANNELS] = {0};
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
enum states
{
  IDLE,
  DELIM,
  READ,
  DISP
};

void setup()
{
  state = IDLE;
  ch = 0;
  Serial.begin(57600);
  radio.begin();
  radio.openWritingPipe(pipe);
}

void loop()
{  
  if (Serial.available())
  {
    switch (state)
    {
      case IDLE:  
        ch = 0;
        if (Serial.read() == '+')
        {
          state = DELIM;          
        }
        else
        {
          state = IDLE;
        }
      break;
        
      case DELIM:
        ch = 0;
        if (Serial.read() == '>')
        {
          state = READ;
        }
        else
        {
          state = IDLE;
        }
      break;
      
      case READ:
        chVal[ch++] = Serial.read();
        if (ch >= MAX_CHANNELS)
        {
          ch = 0;
          state = DISP;
        }
      break; 
      
      case DISP:
        state = IDLE;
        radio.write(chVal, sizeof(chVal));
        
      break;
    }
  }
}

Код приемника:

 

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

#define MAX_CHANNELS 6
int flag=0;
int chVal[MAX_CHANNELS];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void){
 Serial.begin(57600);
 unsigned long time;
 radio.begin();
 printf_begin();
 radio.openReadingPipe(1,pipe);
 radio.startListening();
 radio.printDetails();}

void loop(void){
 if (radio.available()){
     radio.read(chVal, 6);
     for (int i=0; i<6;i++){
       if (chVal[i] != 0){
         flag++;
         }
      }
     if (flag > 0){
         for (int i=0; i<6;i++){
            Serial.print(chVal[i]);
            Serial.print(".");
         }
         Serial.println(" ");
     flag = 0;
        }
       }
     }

   Подключение Vixen к ардуинке:

Монитор порта чтобы убедиться что Vixen отправляет нужные нам данные:

А в итоге на вторую ардуинку приходит вот что:
Буду благодарен за любую помощь, заранее спасибо