Прикрутил, забавная штукенция. Теперь буду думать, как грамотно её использовать в своей проекте. Код для примера. В Serial нажимаем цифры от 1 до 6, и получаем ответ на каждую: Код (C++): // Uno (Master) /*-------------------------- ---------Подключение-------- RX => TX TX => RX --------------------------*/ #include <VirtualWire.h> uint8_t buf[VW_MAX_MESSAGE_LEN]; // Максимальная длина сообщения uint8_t buflen = VW_MAX_MESSAGE_LEN; uint8_t buf_out1[10]; //исходящее сообщение 1 контроллера int sr; void setup() { //настройка virtualWire vw_set_tx_pin(7);//пин передачи vw_set_rx_pin(8);//пин приема vw_set_ptt_inverted(true); vw_setup(9000);//скорость передачи данных vw_rx_start(); //включаем прием сообщение через virtualwire /*———————————————————————*/ Serial.begin(9600); /*———————————————————————*/ } void loop() { if (Serial.available()) //Ожидаем опроса сериал { sr = Serial.read(); delay(40); if (sr == 49) //если через сериал-консоль послали текст равный 1 { Serial.println("1"); buf_out1[0] = 1; // формируем буфер для отправки vw_send(buf_out1, sizeof(buf_out1)); //отправляем vw_wait_rx_max(100); // Задержка перед получением String aa; // здесь будет хранится полученный пакет if (vw_get_message(buf, &buflen)) // Если что-то пришло { int i; for (i = 0; i < buflen; i++) // формируем по символьно пришедшую строку { aa = aa + (char)buf[i]; } Serial.println("Otvet: " + aa); } else Serial.println("GetMes"); } if (sr == 50) //если через сериал-консоль послали текст равный 2 { Serial.println("2"); buf_out1[0] = 2; // формируем буфер для отправки vw_send(buf_out1, sizeof(buf_out1)); //отправляем vw_wait_rx_max(100); // Задержка перед получением String aa; // здесь будет хранится полученный пакет if (vw_get_message(buf, &buflen)) // Если что-то пришло { int i; for (i = 0; i < buflen; i++) // формируем по символьно пришедшую строку { aa = aa + (char)buf[i]; } Serial.println("Otvet: " + aa); } else Serial.println("GetMes"); } if (sr == 51) //если через сериал-консоль послали текст равный 3 { Serial.println("3"); buf_out1[0] = 3; // формируем буфер для отправки vw_send(buf_out1, sizeof(buf_out1)); //отправляем vw_wait_rx_max(100); // Задержка перед получением String aa; // здесь будет хранится полученный пакет if (vw_get_message(buf, &buflen)) // Если что-то пришло { int i; for (i = 0; i < buflen; i++) // формируем по символьно пришедшую строку { aa = aa + (char)buf[i]; } Serial.println("Otvet: " + aa); } else Serial.println("GetMes"); } if (sr == 52) //если через сериал-консоль послали текст равный 4 { Serial.println("4"); buf_out1[0] = 4; // формируем буфер для отправки vw_send(buf_out1, sizeof(buf_out1)); //отправляем vw_wait_rx_max(100); // Задержка перед получением String aa; // здесь будет хранится полученный пакет if (vw_get_message(buf, &buflen)) // Если что-то пришло { int i; for (i = 0; i < buflen; i++) // формируем по символьно пришедшую строку { aa = aa + (char)buf[i]; } Serial.println("Otvet: " + aa); } else Serial.println("GetMes"); } if (sr == 53) //если через сериал-консоль послали текст равный 5 { Serial.println("5"); buf_out1[0] = 5; //формируем буфер для отправки vw_send(buf_out1, sizeof(buf_out1)); //отправляем vw_wait_rx_max(100); // Задержка перед получением String aa; // здесь будет хранится полученный пакет if (vw_get_message(buf, &buflen)) // Если что-то пришло { int i; for (i = 0; i < buflen; i++) // формируем по символьно пришедшую строку { aa = aa + (char)buf[i]; } Serial.println("Otvet: " + aa); } else Serial.println("GetMes"); } if (sr == 54) //если через сериал-консоль послали текст равный 6 { Serial.println("6"); buf_out1[0] = 6; //формируем буфер для отправки vw_send(buf_out1, sizeof(buf_out1)); //отправляем vw_wait_rx_max(100); // Задержка перед получением String aa; // здесь будет хранится полученный пакет if (vw_get_message(buf, &buflen)) // Если что-то пришло { int i; for (i = 0; i < buflen; i++) // формируем по символьно пришедшую строку { aa = aa + (char)buf[i]; } Serial.println("Otvet: " + aa); } else Serial.println("GetMes"); } } } Код (C++): // Mini (Slave) #include <VirtualWire.h> /*-------------------------- ---------Подключение-------- TX => RX RX => TX --------------------------*/ uint8_t buf_in[VW_MAX_MESSAGE_LEN]; // Максимальная длина сообщения uint8_t buflen = VW_MAX_MESSAGE_LEN; void setup() { //настройка vitrualwire vw_set_tx_pin(7); vw_set_rx_pin(8); vw_set_ptt_inverted(true); vw_setup(9000); vw_rx_start(); //включаем прием сообщение через virtualwire } void loop() { if (vw_get_message(buf_in, &buflen)) //если пришло сообщение { // Строчки содержащие ответ обратно Arduino мастеру const char *msg = "hello, I 1"; const char *msg1 = "hello, I 2"; const char *msg2 = "hello, I 3"; const char *msg3 = "hello, I 4"; const char *msg4 = "hello, I 5"; const char *msg5 = "hello, I 6"; int value_1; // сообщение с главного контроллера value_1 = buf_in[0]; // считываем 1 буфер switch (value_1) { // Если пришел код, содержащий 1 case 1: //команда с главного контроллера // digitalWrite(13, HIGH); // Выполняем какое-то действие // Отправляем отчет об получении пакета данных vw_send((uint8_t *)msg, strlen(msg)); // передаем строку msg vw_wait_tx(); // ожидаем конца передачи сообщения break; // Если пришел код, содержащий 2 case 2: //команда с главного контроллера // digitalWrite(13, LOW); // Выполняем какое-то действие // Отправляем отчет об получении пакета данных vw_send((uint8_t *)msg1, strlen(msg1)); // передаем строку msg vw_wait_tx(); // ожидаем конца передачи сообщения break; // Если пришел код, содержащий 3 case 3: //команда с главного контроллера // digitalWrite(13, HIGH); // Выполняем какое-то действие // Отправляем отчет об получении пакета данных vw_send((uint8_t *)msg2, strlen(msg2)); // передаем строку msg vw_wait_tx(); // ожидаем конца передачи сообщения break; // Если пришел код, содержащий 4 case 4: //команда с главного контроллера // digitalWrite(13, HIGH); // Выполняем какое-то действие // Отправляем отчет об получении пакета данных vw_send((uint8_t *)msg3, strlen(msg3)); // передаем строку msg vw_wait_tx(); // ожидаем конца передачи сообщения break; // Если пришел код, содержащий 5 case 5: //команда с главного контроллера // digitalWrite(13, HIGH); // Выполняем какое-то действие // Отправляем отчет об получении пакета данных vw_send((uint8_t *)msg4, strlen(msg4)); // передаем строку msg vw_wait_tx(); // ожидаем конца передачи сообщения break; // Если пришел код, содержащий 6 case 6: //команда с главного контроллера // digitalWrite(13, HIGH); // Выполняем какое-то действие // Отправляем отчет об получении пакета данных vw_send((uint8_t *)msg5, strlen(msg5)); // передаем строку msg vw_wait_tx(); // ожидаем конца передачи сообщения break; } } } Нужно быть осторожнее с delay(), иначе строка может задержаться и сдвинуться на один или вовсе не прийти.