имеем устройство на ардуино которое транслирует с использованием модуля RX 433 последовательности символов - в течение определенного времени - "а", потом - "b", потом - "с" и т.п. Второе устройство, с ресивером, находится в зоне приема в спящем режиме. Можно ли сделать так, чтобы оно просыпалось во время трансляции определенного символа, бодствовало на протяжении всего времени трансляции, и снова засыпало по окончании трансляции или выходе устройства-приемника из зоны сигнала (либо отключении передатчика)
Отлично. Значит, двигаюсь в правильном направлении. Следующая просьба, раз это можно сделать: поделитесь пожалуйста кусочком кода, который разбудит устройство, когда на радиоприемник придет сигнал, содержащий "b", отработает до тех пор, пока получает сигнал "b" и снова отправит железяку баиньки когда перестанет получать сигнал "b". Заранее благодарю.
Я не знаю, что у вас за устройство, как его будить, и на каком языке оно программируется. Почему все считают, что это форум телепатов?
Будить МК, это функция приемника. Хороший приемник с функцией энергосбережения постоянно включен и ловит преамбулу. Когда поступает сигнал, похожий на преамбулу включаются блоки обработки сигнала. Если сигнал оказался помехой, приемник снова уходит в режим энергосбережения. Если за сигналом пошли данные, приемник отправляет их, например на UART МК. Если в МК установлено прерывание на готовность данных UART, МК пробуждается и принимает байт и т.д.. Если байт оказался сигналом "b", МК что то там выполняет. Если нет, засыпает снова. В любом случае в приемнике должен работать блок детектирования преамбулы. Он может потреблять мало энергии. Вы определитесь с приемником, а потом за код беритесь.
Хмм... Допустим я нуб и считаю, что все платы ардуино программируются одинаковым образом. Или я таки неправ? Схема подключения - аналогичная тому, как изображено на рисунке (допустим, что так же), но не суть. Вот что передатчик транслирует: #include <VirtualWire.h> void setup(void) { vw_set_ptt_inverted(true); vw_setup(2000); } void loop(void) { String strMsg = "b"; char msg[255]; strMsg.toCharArray(msg, 255); Serial.println(msg); vw_send((uint8_t *)msg, strlen(msg));//Начало передачи vw_wait_tx(); // Ожидание окончания передачи delay(5000); } ------------------------------ Код транслирует символ b c периодичностью раз в пять секунд. Так вот что мне надо поставить в код приемника, чтобы он на спящем устройстве мониторил эфир и, приняв сигналы, разбирал их; приняв "b" - вывел устройство из спящего режима, и, пока принимает это "b", выполнял определенную процедуру?
Я из волшебной страны, где мы говорим не "устройство", а "ардуино уно". Не "подействуй объектом на объект", а "поставь чай на стол", и так далее. Такие вот чудеса. С таким приемником без жирной обвязки не получится. И вообще, сдается мне, что вы предварительной оптимизацией занимаетесь. И совсем не там, где она нужна.
Тема некорректно названа. Такое впечатление, что МК из спящего режима должен выходить, а не устройство. Каким образом пробуждать устройство? Громким криком? Пинками? Нарисуйте код приемника, а к нему уже можно логику обработки команд прицепить.