Официальный сайт компании Arduino по адресу arduino.cc
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 отправляет нужные нам данные:
А в итоге на вторую ардуинку приходит вот что:Буду благодарен за любую помощь, заранее спасибо