Динамическое управление пинами в библиотеке <VirtualWire.h>
- Войдите на сайт для отправки комментариев
Чт, 29/09/2016 - 09:08
void loop() {
kon_220(); // КОНТРОЛЬ 220V
priem_server_dom();//обработка команд с домашнего сервера
termo_stab ();
vw_set_rx_pin (8);//(receive_pin);pin приёма данных 433Мгц
vw_setup(400); // Задаем скорость приема и ( передачи )
vw_rx_start(); // Начинаем мониторинг эфира
digitalWrite(led_1, HIGH);
priem();
digitalWrite(led_1, LOW);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//vw_set_rx_pin (7);//(receive_pin);pin приёма данных 28Мгц
vw_setup(400); // Задаем скорость приема и (передачи)
vw_rx_start(); // Начинаем мониторинг эфира
digitalWrite(led_1, HIGH);
priem();
digitalWrite(led_1, LOW);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~ интервал времени молчания и передачи ~~~~~~
static unsigned long Time_1 = 0; //
if(millis() - Time_1 > Time_28) {// время МЕЖДУ циклаМИ передачи 28Мгц
Time_1 = millis(); //
interval_ptredacha ();
}
Добрый день. Возникла проблема в динамическом управлении пинами в библиотеке VirtualWire.h Hеобходимо в процессе работы программы менять пины приема данных так как используется два пиёмника на разных частотах (433 Мгц и 28 Мгц), проблема в том что если снять ремарку со строки 12 нет приёма данных на частоте 433Мгц тоесть строка 5 не включает пин 8 и данные принимаются только с приёмника 28Мгц
Добавляете переменную в которой будет храниться номер пина. Далее в коде вместо номера пина подставляете имя переменной. Также по ходу выполнения программы значение переменной можно менять.
uint8_t receive_pin = 8; // присваиваем переменной номер пина void setup() { } void loop() { vw_set_rx_pin (receive_pin); // подставляем переменную вместо номера // что-то делаем... receive_pin = 7; // меняем номер пина на другой, когда нужно }Олег,
приёмники доолжны быть постоянно на приёме, иначе они пропустят сообщение. Два одновременно - невозможно, т.к. библиотека заточена под один. Вы можете, например, минуту держать включённым один, а минуту - другой. Но, боюсь, Вам это не подойдёт.
Если хотите два сразу, то надо модифицировать библиотеку. В том виде, в каком она сейчас, это, кажется, невозможно. Может я и ошибаюсь (давненько я не работал с этой библиотекой), но кажется, что так.
Вам это сильно нужно? Настолько. что Вы готовы модифицировать библиотеку?
[code] void loop() { kon_220(); // КОНТРОЛЬ 220V priem_server_dom();//обработка команд с домашнего сервера termo_stab (); static unsigned long Time = 0; // if(millis() - Time > 4000) {// 4 cek. Time = millis();} // if(millis() > Time && millis() < Time+2000){ vw_set_rx_pin (8);//(receive_pin);pin приёма данных 433Мгц } if(millis() > Time+2000 && millis() < Time+4000){ vw_set_rx_pin (7);//(receive_pin);pin приёма данных 28Мгц } // vw_setup(400); // Задаем скорость приема и (передачи) vw_rx_start(); // Начинаем мониторинг эфира digitalWrite(led_1, HIGH); priem(); digitalWrite(led_1, LOW); [/code]Спасибо. Сделал так и всё заработало, контроллируемые процессы медленные
поэтому потеряные данные в одном цикле передачи я думаю будут востановлены
в следующем.
Ага, т.е. Вы их разнесли по времени. Ну, если по задаче это подходит, то это самое простое и хорошее решение.