Совместимость модулей 433 мГц WL101-341 (WL102-341) и LED панелей
- Войдите на сайт для отправки комментариев
Чт, 06/09/2018 - 11:01
Добрый день.
Использую для передачи модули 433 мГц WL101-341 (WL102-341) с библитекой RadioHead. Все работает прекрасно.
Пытаюсь подключить ЛЕД панель https://www.freetronics.com.au/collections/display/products/dot-matrix-display-32x16-red#.W5DQKMAVTDf
с библиотекой DM2 и радисигнал прекращает приниматься.
DM2 использует интерфейс SPI, в библиотеке RadioHead он тоже вроде как использовался но написано
#include <SPI.h> // Not actualy used but needed to compile
Подскажите где копать?
Ссылки на библиотеки дадите? Или предлагаете самим догадаться что там у Вас стоит?
А заодно, даже стесняюсь спросить, Ваш скетч то серкретный или его Вы тоже можете показать?
https://github.com/freetronics/DMD2
http://www.airspayce.com/mikem/arduino/RadioHead/classRH__ASK.html
Значит, vlforum,
слушайте внимаетльно.
А. Текст Вашего скетча Вы не дали
Б. Что именно за ардуина у Вас, Вы тоже не написали
Потому ответ на Ваш вопрос только таков:
1.
Эти библиотеки, если они работают с AVR (что, на самом деле, не очевидно, см. п. Б выше), по умолчанию, используют один и тот же таймер (timer 1) и потому не совместимы между собой.
2. Но то по умолчанию! Их (а точнее RadioHead) можно переконфигурировать на использование другого таймера (второго) в скетче (как это сделать написано в строках 25-29 файла RH_ASK.cpp). Как она у Вас сконфигурирована сейчас - ХЗ, т.к. см. п. А выше.
Ну, в общем, как-то так. Вы сами себе злобный буратино - объяснили бы что у Вас за контроллер и выложили бы код - ответ был бы намного полнее и однозначнее.
Arduino Nano, Mini.
Скетча нет на данный момент - потер и разнес управление ЛЕД и прием данных на разные ардуины. Так работает :)
Спасибо большое, понял где копать. Отпишусь по результату и выложу скетч.
Вот код
//Попытка объединить LED & RH #include <RH_ASK.h> #include <SPI.h> // Not actually used but needed to compile //#include <MsTimer2.h> #include <EEPROM.h> #include <SoftwareSerial.h> #include <DMD2.h> #define TRANSMIT_PIN 4 #define RECEIVE_PIN 3 #define LENGHT_DATA 8 //Число передаваемых ЗНАЧИМЫХ+4 байт (см формат команды) #define BROADCAST 0 #include <fonts/Arial_Black_16.h> #define DISPLAYS_WIDE 2 #define DISPLAYS_HIGH 1 byte dataFromMC[LENGHT_DATA]; // буфер данных для приема из main контроллера int timeCount; // счетчик времени int timeOutCount; // счетчик времени тайм-аута обмена byte thisDeviceID; //Адрес этого LC unsigned int cyclCount = 0; // счетчик циклов unsigned int errorCount = 0; // счетчик ошибок volatile byte stateCommun; // состояние обмена (1 - ожидание пакета от MC, 2 - Передача в табло 3 - ошибка, 11 - запись адреса) String strMsg; //************************************************************************* RH_ASK driver(2000, RECEIVE_PIN, TRANSMIT_PIN); //RH_ASK(uint16_t speed = 2000, uint8_t rxPin = 11, uint8_t txPin = 12, uint8_t pttPin = 10, bool pttInverted = false); SoftwareSerial softSerial(6,5); // software serial #1: RX = digital pin 4, TX = digital pin 5 SoftDMD dmd(DISPLAYS_WIDE,DISPLAYS_HIGH); DMD_TextBox box(dmd, 10, 0, 0, 0); //Сдвиг работает только для скроллинга void setup() { Serial.begin(9600); // скорость 9600 softSerial.begin(600); // Инициализация программного последовательного порта randomSeed(analogRead(0)); // MsTimer2::set(1, timerInterrupt); // прерывания по таймеру 1 мс //MsTimer2::start(); // разрешаем прерывание по таймеру if (!driver.init()) Serial.println(F("init failed")); thisDeviceID = deviceID(1); Serial.print(F("thisDeviceID ")); Serial.println(thisDeviceID); //******************************************************* stateCommun = 1; //Переходим в режим ожидания пакета от MC dmd.setBrightness(50); dmd.selectFont(Arial_Black_16); //dmd.begin(); }Если закоментировать dmd.begin(), прием работает.
Пробовал включить таймер 2. Не помогает.
Не пинайте за использование переменных, знаю :)
Как пробовал? Что пробовал? ХЗ! Хрустальные шары здесь запрещены, так что разбирайтесь.
Раскоментировал строку #define RH_ASK_ARDUINO_USE_TIMER2 (RH_ASK.cpp) чтобы использовать таймер 2. Не помогло.
А должно было помочь? Таки нет - не должно.
Вы читали что там рядом написано? Там ведь прямо написано что константу нужно определять во включаемом файле. Читайте!
Константа RH_ASK_ARDUINO_USE_TIMER2 используется в целом ряде .cpp файлов и раскомментировать (или добавлять) её нужно в каком-нибудь .h файле, который включается во все эти .cpp файлы.
Т.е. сначала определите все файлы в которых она исполуется, потом найдите такой файл, который в них всех включается и уж в нём раскомментируйте (или определите) эту константу.
Нет, неверно, посмотрел - там действительно всё в одном файле, так что должно было помочь.
Значит, что-то сделали неправильно. Хрустальных шаров нет и что Вы там как делали никто не знает.
Ну как не правильно? Раскоментирова строчку в срр файле, заново залил. Эффекта "0".
Посмотрел на форуме про библиотеки DMD DMD2, там разработчики тоже советуют использовать отдельный МК для управления панелями, а всю остальную логику выносить на другие МК. В любом случае спасибо.
Ну, не знаю, дело Ваше. Я то не знаю, что Вы там делаете.
Хочу сказать Вам спасибо. Действительно смена таймера заработала, но только для класа SPIDMD. Для SoftDMD не получается.