Всем доброго времени суток. Который день не могу решить проблему, поэтому прошу помощи. Пытаюсь наладить радиосвязь между двумя ардуинами с помощью приемника и передатчика на 433 Мгц. Использую библиотеку RCSwitch. Код передатчика (Arduino UNO): Код (C++): #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { Serial.begin(9600); // Transmitter is connected to Arduino Pin #3 mySwitch.enableTransmit(3); } void loop() { mySwitch.send(B1000, 4); delay(1000); } Код передатчика (Iskra Nano Pro): Код (C++): #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2 } void loop() { Serial.println((analogRead(A5) * 5.0) / 1024.0); if (mySwitch.available()) { Serial.print("Received "); Serial.print( mySwitch.getReceivedValue() ); Serial.print(" / "); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print("bit "); Serial.print("Protocol: "); Serial.println( mySwitch.getReceivedProtocol() ); mySwitch.resetAvailable(); } } Однако метод mySwitch.available() все время возвращает false. Припаивал антенну - не помогло. Обеспечивал отдельное стабилизированное питание для приемника/передатчика - не помогло. Использовал другие библиотеки - не помогло. Передатчик MX-FS-03V, приемник MX-05V. Все выводы подключены правильно. Приемник на выводе #2. Для проверки перекинул выход приемника на аналоговый вход ардуины. На осциллограмме видно, что какие-то данные приходят. В чем проблема, куда копать? Заранее спасибо за помощь.
Допустим, говно, но с банальной задачей "принять-получить данные" оно же должно справляться, разве нет?
В аппаратных решениях для радиорелейки обязательно в пакете обмена присутствует преамбула. Преамбула - это просто меандр какой-то длины, по которой приёмник подстроит свою частоту. Такое решение позволяет увеличить селективность, а за счёт более высокой селективности, можно увеличить чувствительность. Всё это приводит к более высокой стабильности радиообмена. Если необходимо решение, которое работает сразу - то HC-12 маст хэв.
Судя по количеству "восторженных" отзывов в сети - эта хрень вообще мало у кого работает. Это из разряда купил - включил - выкинул. Поэтому совсем не факт, что справится с банальной задачей....HC-12 маст хэв!
Понял, спасибо за ответы. Может, тогда подскажите насчет конкретной реализации? Планировал радиомодуль использовать для удаленного управления гирляндой. Режимы ее работы переключаются нажатием кнопки. Собственно, хотел с выхода приемника брать импульсы для имитации таких нажатий. При этом обойтись без лишних контроллеров на принимающей стороне. Голый HC-12 использовать не получится, тк он использует UART...
И будет оно реагировать на всё. Сосед ставит тачку на сигналку, соседский сын играет в радиомашинку...на всё будет реакция.
Тестировал подключением к "виртуальному ком-порту" компа (USB-TTL конвертор). Как радио-удлиннитель. Вполне нормально работало. Где-то в форуме выкладывал. Приемник - сверхрегенератор. Не зря паровоз про преамбулу говорит - Приемнику нужно время для входа в рабочий режим после простоя (Тпр > 1 сек). Т.е. если передатчик выключался дольше чем на 1 сек. - он должен включиться, а полезные данные передавать не сразу. Не парьте мозги с библиотеками - просто подключите к сериалам, и обычными serial.print(), serial.read() - вперед на мины. Вместо преамбулы - просто повторение команды раза три. Сами заметите, что первые две передачи приемник примет с ошибками. А,да битрейт больше чем 9600 не включайте. Поскольку помех в эфире дофига, без парсинга строки не обойдетесь. ПС. Как всегда может случится заморок с исходным уровнем. Передатчику исходный уровень - ноль. А какой исходный уровень сериала Ардуины - ХЗ не помню. Так что serial.begin(2400, ???) надо экспериментировать.
Период уменьшать пробовал - не помогло. Пробовал через digitalWrite() посылать данные - результат примерно тот же. К сериалу еще не подключал, но если больше ничего не получится, то рискну. А вообще понравился вариант с использованием JDY-40. Судя по описанию - как раз то, что нужно. Жаль, что найти удалось только на алике. Интересно, есть ли что-то аналогичное и более доступное...
1/ Ставить JDY-40 - это примерно как реактивный двигатель на телегу. 2/ getReceivedValue() - значит что библа организует буфер входных данных, из которых по вашему запросу берет уже полученные данные. Вероятно или вы не совсем знаете принцип работы библиотеки, и чего-то там недописали в скетче, или она почти повторяет работу обычного сериала.
Скетчи почти один в один взяты из примеров в папке с библиотекой RCSwitch, так что тут ошибка исключена. Пробовал передавать через сериал - результат тот же. Простейшая задача - зажечь светодиод с выхода приемника. И не получается реализовать. Уже не знаю, что еще попробовать...