Описаний функций библиотеки VirtualWire. Arduino 4

Т.к. данная библиотека является основным нашим протоколом при построении сети контроллеров «Умного Дома»,то рассмотрим ее функции.

1
2
3
4
5
6
7
8
9
10
vw_set_tx_pin();//пин передачи
vw_set_rx_pin();//пин приема
vw_setup(9000);//скорость передачи данных
vw_rx_start();//ожидание входящего сообщения
vw_rx_stop();//прерываем процесс приема сообщений
vw_wait_tx();//ожидаем конца передачи сообщения
vw_send(buf,sizeof(buf));//передача сообщения uint8_t
VW_MAX_MESSAGE_LEN;//максимальная длина сообщения 80
vw_get_message(buf, VW_MAX_MESSAGE_LEN);//принимаем сообщение
vw_wait_rx_max(200);//задержка для приема сообщения(лучше использовать delay())
vw_set_tx_pin();//пин передачи
vw_set_rx_pin();//пин приема
vw_setup(9000);//скорость передачи данных
vw_rx_start();//ожидание входящего сообщения
vw_rx_stop();//прерываем процесс приема сообщений
vw_wait_tx();//ожидаем конца передачи сообщения
vw_send(buf,sizeof(buf));//передача сообщения uint8_t
VW_MAX_MESSAGE_LEN;//максимальная длина сообщения 80
vw_get_message(buf, VW_MAX_MESSAGE_LEN);//принимаем сообщение
vw_wait_rx_max(200);//задержка для приема сообщения(лучше использовать delay())

Пример передачи сообщения

1
2
3
4
5
6
7
8
9
10
11
12
uint8_t val[2]={0x13,0x99};
void setup()
{
vw_set_tx_pin(7);//пин передачи
vw_setup(9000);//скорость передачи данных
}
 
void loop()
{
vw_send(buf,sizeof(buf));//передача сообщения uint8_t
delay(50);
}
uint8_t val[2]={0x13,0x99};
void setup()
{
vw_set_tx_pin(7);//пин передачи
vw_setup(9000);//скорость передачи данных
}

void loop()
{
vw_send(buf,sizeof(buf));//передача сообщения uint8_t
delay(50);
}

Пример приема сообщения

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uint8_t val[2];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
void setup()
{
vw_set_rx_pin(7);//пин приема
vw_setup(9000);//скорость передачи данных
vw_rx_start();
}
 
void loop()
{
if (vw_get_message(val,&buflen ))//если пришло сообщение
{
//обрабатываем буфер в val[0] и val[1];
}
 
delay(50);
}
uint8_t val[2];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
void setup()
{
vw_set_rx_pin(7);//пин приема
vw_setup(9000);//скорость передачи данных
vw_rx_start();
}

void loop()
{
if (vw_get_message(val,&buflen ))//если пришло сообщение
{
//обрабатываем буфер в val[0] и val[1];
}

delay(50);
}

4 комментс для “Описаний функций библиотеки VirtualWire. Arduino

  1. Ответить Peter Апр 7, 2016 14:58

    Добрый день. Шикарная статья, отличные примеры, самые лучшие из всего рунета по передаче данных по 433 МГЦ.
    =============================
    Теперь, собственно, вопрос. Пишу диплом по робототехнике. Научный руководитель пожелал мне создать двух рободельфинов, которые разговаривают между собой. Договорились с ним, что одному дельфину мы будем давать команды, не важно какие, хлопать ему, светить или как то по другому возбуждать, например ключем, как в морзянке. Этот мастер-рободельфин запиминает в массив: а) время состояния 1 (например, ключ нажат), б) паузу между состояниями 1 (между нажатиями ключа). Иными словами, получается некие два массива, в одном — время высокого сигнала, в другом, время низкого сигнала. Если пауза превышает допустим 3 секунды, дельфин понимает, что команды закончились, нужно их передать. Тут вроде бы не сложно: vw_send(buf,sizeof(buf));
    Но вот как быть со вторым массивом?

    Второй, slave-дельфин принимает массивы, и должен воспроизвести то, что ему сообщил первый дельфин в том же порядке, в котором сообщил человек первому дельфину: та же длительность «1» и та же длительность»0″.
    Как в этом случае быть?!
    Передавать два массива друг за другом, после их получения второй дельфин берет в цикле i-й элемент первого массива, зажигает светодиод, включает зуммер, в общем реагирует как то, затем выключаем светодиод на время i-го элемента второго массива? получается так?

    Не ругайтесь сильно, возможно это просто. Не силен в радиопередаче (точнее пока вообще ноль). Радиомодули уже пришли.
    Программу написать за меня не прошу, но заранее благодарен за любую помощь, за любой совет. С уважением, Петр

    • Ответить Slava Апр 7, 2016 15:27

      При передаче посылайте адрес, т.е. кому адресовано сообщение.

      При приеме анализируйте этот адрес, если сообщение адресовано вам то выполняйте действие.

      Плюс один байт к передаче

      • Ответить Peter Апр 7, 2016 18:25

        Спасибо за оперативный ответ. Но я имел ввиду немножко не то.
        Есть два дельфина (мастер и слейв), один посылает команду, которую предварительно ввел человек с помощью ключа, другой принимает команду, затем ее повторяет.
        Как отправить два массива, а затем принять два массива?!

  2. Ответить Peter Апр 8, 2016 00:20

    Нашел шикарное видео, как раз под мои цели. Может кому пригодится.
    http://www.youtube.com/watch?v=PGOPkj9sSQ
    Изначально в примере передается пакует из двух переменных: blink и pause.

Добавить комментарий