Это правильный способ использования радиочастотной связи?
У меня есть Супергетеродинный приемник 433 МГц и ручной пульт дистанционного управления с аналогичной частотой, я использую Библиотека RC-Switch, и я не смог найти лучшего способа, чем использовать "цифры", которые я получаю следующим образом:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // Приемник по прерыванию 0 => это контакт №2
pinMode(13, OUTPUT);
}
void loop() {
if (mySwitch.getReceivedValue() == 7264305) {
digitalWrite(13, LOW);
}
if (mySwitch.getReceivedValue() == 7264308) {
digitalWrite(13, HIGH);
}
if (mySwitch.getReceivedValue() == 7264306) {
mySwitch.resetAvailable();
}
}
Есть ли какой-либо другой (лучший?) способ, чем просто использовать "цифры" просто так, или все используют свои удаленные команды, как я?
@ElectronSurf, 👍1
Обсуждение1 ответ
Лучший ответ:
▲ 1
Кредиты для этого ответа в основном для jsotola (см. его комментарии выше). Но я хочу показать альтернативу операторам if
и способ получить последние 4 бита:
- Если вы хотите проверить младшие биты, используйте
((mySwitch.getReceivedValue() & 0xFFFFF0)
- ЧТОБЫ проверить четыре младших бита (данные, с которыми вы хотите действовать), используйте
((mySwitch.getReceivedValue() & 0xF)
- Используйте оператор switch вместо оператора
if
; также теоретически (я не знаю, что кодmySwitch.getReceivedValue()
не нужно выполнять несколько раз.
Итак, вы получите что-то вроде этого:
void loop()
{
unsigned long receivedValue = mySwitch.getReceivedValue(); // Вызов функции только один раз
if ((receivedValue & 0xFFFF0) == 0x6ED830)
{
// Действие процесса
switch (receivedValue & 0xF)
{
case 0x5:
digitalWrite(13, LOW);
break;
case 0x8:
digitalWrite(13, HIGH);
break;
case 0x6:
mySwitch.resetAvailable();
break;
default: // Все остальные значения
break; // Игнорировать
}
}
,
@Michel Keijzers
Смотрите также:
- Радиочастотное дистанционное управление с использованием VirtualWire на ATtiny85, работающем на частоте 8 МГц на внутреннем генераторе
- Декодирование 2.4G RF пульта дистанционного управления?
- Питание Arduino Mini Pro с использованием батареи CR2032 в качестве пульта дистанционного управления
- Сдвиг между несущей частотой сигнала, передаваемого с помощью arduino и my garage door RC (433 МГц)
- Как сделать кнопку сопряжения и режима работы на приемнике пульта дистанционного управления
- Использование VS1838B с Arduino
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Хочу создать Bluetooth audio control (увеличение/уменьшение громкости, воспроизведение, пауза и т.д.) для смартфона
все данные - это просто числа ... ваши передаваемые данные имеют длину 24 бита ... например, десятичное
7264305
преобразуется в 24-битное двоичное011011101101100000110001
, которое может быть описано в шестнадцатеричном виде как6ED831
.... некоторые битов являются состояниями переключателя, а остальные, вероятно, являются заранее определенным заполнителем, который можно использовать для проверки достоверности передачи, или они могут быть адресом передатчика., @jsotolaдля полученных значений «7264305», «7264306» и «7264308» последние 4 бита полученных данных равны «0001», «0010» и «0100» соответственно., @jsotola