Vixen+Arduino+nrf24l01, нужна помощь
- Войдите на сайт для отправки комментариев
Всем привет! с ардуинками работаю не так давно, прошу простить за кривой код)
Суть задачи: Передача данных из программы 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 отправляет нужные нам данные:
А в итоге на вторую ардуинку приходит вот что:
Буду благодарен за любую помощь, заранее спасибо