Всем привет! с ардуинками работаю не так давно, прошу простить за кривой код) Суть задачи: Передача данных из программы Vixen Light 3 через радиопередатчики с одной ардуины на другую. Общая цель - управление RGB светодиодной лентой на расстоянии. Из Vixen получаем значения цветов в определенную секунду и шлем эти данные на другой конец. Пока работаю без RGB лента, просто считываю данные в серийник второй ардуины. т е Vixen -> com port -> arduino uno -> nrf24l01 --------- nrf24l01 -> arduino uno -> com port Данные Vixen отправляет в формате "+>" и дальше 8 бит Проштудировав форум все таки завел радиомодули.Передают все гладко без потерь. Начал воевать с Vixen 3, столкнулся с проблемой что данные передаются недостаточно верно. Ниже прикладываю скрины монитора порта в который значения отсылает Vixen, коды программ и что в итоге мне приходит на вторую ардуинку. Буду благодарен за любую помощь
Maori, не все представляют о чем идет речь в принципе. С программой этой не все работали и по картинкам не слишком понятно что к чему. И из вопроса не понятно в чем проблема в частности.
Проблема в передаче данных. Программа к примеру передает в ком порт значение + > 255 0 0 255 255 255, потом передатчик отправляет данные без "+>", а на вторую ардуину приходит 255 0 0 0 0 0
А в Ардуино эти же данные "заходят"? Что мешает вместо отправки на NRF вернуть их в компорт и посмотреть как дела?
Здравствуйте! Собрал макет управляемых led костюмов на nrf24l01 . Сейчас это один передатчик и два приемника (в перспективе 5). В силу нехватки знаний в программировании за основу был взят этот же код из и сети и переделан под себя, а в качестве управления все тот же Vixen 3. Все работает но чувствуется несинхронность. Уверен что можно ускорить работу . Обращаюсь к знатокам , помогите плиз оптимизировать код Вот видео работы Передатчик Код (C++): #include <RF24Network.h> #include <RF24.h> #include <SPI.h> #define MAX_CHANNELS 28 RF24 radio(9, 10); // Network uses that radio RF24Network network(radio); int Data[] = {4, 5, 6, 7, 8, 14, 15, 16, 17, 18}; int state; int ch; int chVal[MAX_CHANNELS] = {0}; int NODE01[MAX_CHANNELS / 2] = {0}; //массив для NODE01 int NODE02[MAX_CHANNELS / 2] = {0}; //массив для NODE02 enum states { IDLE, DELIM, READ, DISP }; void setup(void) { Serial.begin(57600); pinMode(8, OUTPUT); digitalWrite(8, HIGH); SPI.begin(); radio.begin(); network.begin(/*channel*/ 90, /*node address*/ 00); // канал и адрес узла { state = IDLE; ch = 0; Serial.begin(57600); } delay(1000); } void loop(void) { network.update(); // нужно постоянно запускать, чтобы транслировались 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; //Serial.print("Sending..."); // Готовим массив для NODE 01--- for (int n01 = 0; n01 < MAX_CHANNELS / 2; n01++) { NODE01[n01] = chVal[n01]; } //------------------------------ //------------------------------ // Готовим массив для NODE 02--- for (int n02 = 14; n02 < MAX_CHANNELS; n02++) { NODE02[n02 - 14] = chVal[n02]; } //------------------------------ // Передача на NODE 01 ------ RF24NetworkHeader header01(/*to node*/ 01); // тут указываем на какое устройство отправляем данные //bool ok = network.write(header,&NODE01,sizeof(NODE01)); // передаем, функция возвращает статус network.write(header01, &NODE01, sizeof(NODE01)); // передаем, функция не возвращает статус //---------------------------- // Передача на NODE 02 ------ RF24NetworkHeader header02(/*to node*/ 02); // тут указываем на какое устройство отправляем данные //bool ok = network.write(header,&NODE02,sizeof(NODE02)); // передаем, функция возвращает статус network.write(header02, &NODE02, sizeof(NODE02)); // передаем, функция не возвращает статус //---------------------------- digitalWrite(8, !digitalRead(8)); // if (ok) // смотрим на статус и отписываемся в Serial // Serial.println("ok."); //else // Serial.println("failed."); // break; } } } Приемники Код (C++): #include <RF24Network.h> #include <RF24.h> #include <SPI.h> #define MAX_CHANNELS 14 int ch; int chVal[MAX_CHANNELS] = {0}; int data[MAX_CHANNELS]; RF24 radio(7, 8); RF24Network network(radio); #define ID 01 // ID устройства //****************Переменные пинов светодиодов int l1 = 1; int l2 = 2; int l3 = 19; int l4 = 4; int l5 = 5; int l6 = 6; int l7 = 9; int l8 = 10; int l9 = 14; int l10 = 15; int l11 = 16; int l12 = 17; int l13 = 18; int l14 = 3; //************************** int lp[] = {l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14}; // массив пинов светодиодов const char inv_off = LOW ; //LOW для макета, HIGH для костюма с транзисторами const char inv_on = HIGH ; // HIGH для макета, LOW для костюма с транзисторами void setup(void) { //Serial.begin(57600); for (int i = 0; i < 14; i++) { pinMode(lp[i], OUTPUT); digitalWrite(lp[i], inv_on); } SPI.begin(); radio.begin(); network.begin(/*channel*/ 90, /*node address*/ ID); //radio.setAutoAck(false); // отключаем подтверждение приема пакетов } void loop(void) { network.update(); // нужно постоянно запускать, чтобы транслировались // данные между узлами while ( network.available() ) // если пришли данные { // If so, grab it and print it out RF24NetworkHeader header; network.read(header, &data, sizeof(data)); // читаем данные // отправляем в сериал для отладки for (ch = 0; ch < MAX_CHANNELS; ch++) { ; digitalWrite(lp[ch], !data[ch]); } // Serial.println(" "); // Serial.println("______________________________________"); //digitalWrite(l1, !data[0]); //digitalWrite(l2, !data[1]); //digitalWrite(l3, !data[2]); //digitalWrite(l4, !data[3]); //analogWrite(l5, data[4]); //analogWrite(l6, data[5]); //analogWrite(l7, data[6]); //analogWrite(l8, data[7]); //digitalWrite(l9, !data[8]); //digitalWrite(l10, !data[9]); //digitalWrite(l11, !data[10]); //digitalWrite(l12, !data[11]); //digitalWrite(l13, !data[12]); //analogWrite(l14, data[13]); } } Спасибо !