Здравствуйте, хочу сделать сканер 433MHz, чтобы он запускался и останавливался с телефона по bluetooth. Чтобы когда я отправил 1 , то сканер запускался и все время сканировал , выдавая значения в сериал и при отправке 2 он останавливался. Но при отправке 1, он считывает всего один раз. Как зациклить на бесконечность до того момента , когда я не отправлю 2 Вот скетч: #include <VirtualWire.h> byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения char incomingByte; // входящие данные const int led_pin = 13; // Пин светодиода const int receiver_pin = 12; // Пин подключения приемника void setup() { Serial.begin(9600); // Скорость передачиданных Serial.println("MX-RM-5V is ready"); vw_set_rx_pin(receiver_pin); // Пин подключения приемника vw_setup(2000); // Скорость передачи данных (бит в секунду) vw_rx_start(); // Активация применика } void loop() { incomingByte = Serial.read();// считываем байт if(incomingByte == '1') { Serial.println("start scaning"); if (vw_get_message(message, &messageLength)) // Если есть данные.. { do { incomingByte = Serial.read(); for (int i = 0; i < messageLength; i++) { Serial.write(message); // выводим их в одной строке } Serial.println("1"); }while(incomingByte == '2'); } } }
#include <VirtualWire.h> byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения char incomingByte; // входящие данные const int led_pin = 13; // Пин светодиода const int receiver_pin = 12; // Пин подключения приемника void setup() { Serial.begin(9600); // Скорость передачиданных Serial.println("MX-RM-5V is ready"); vw_set_rx_pin(receiver_pin); // Пин подключения приемника vw_setup(2000); // Скорость передачи данных (бит в секунду) vw_rx_start(); // Активация применика } void loop() { incomingByte = Serial.read();// считываем байт if(incomingByte == '1') { Serial.println("start scaning"); if (vw_get_message(message, &messageLength)) // Если есть данные.. { do { incomingByte = Serial.read(); for (int i = 0; i < messageLength; i++) { Serial.write(message); // выводим их в одной строке } Serial.println("1"); }while(incomingByte == '2'); } } }
для вставки кода пользуйтесь кнопкой "Код", иначе в этой каше символов ни у кого не возникает желания разбираться Код (C++): #include <VirtualWire.h> byte message[VW_MAX_MESSAGE_LEN]; // Буфер для хранения принимаемых данных byte messageLength = VW_MAX_MESSAGE_LEN; // Размер сообщения char incomingByte; // входящие данные const byte led_pin = 13; // Пин светодиода const byte receiver_pin = 12; // Пин подключения приемника boolean enableScan = false; // флаг запуска сканирования void setup() { Serial.begin(9600); // Скорость передачи данных Serial.println("MX-RM-5V is ready"); vw_set_rx_pin(receiver_pin); // Пин подключения приемника vw_setup(2000); // Скорость передачи данных (бит в секунду) vw_rx_start(); // Активация применика } void loop() { incomingByte = Serial.read(); // считываем байт if (incomingByte == '1') enableScan = true; else if (incomingByte == '2') enableScan = false; if(enableScan == true) { Serial.println("start scanning..."); if (vw_get_message(message, &messageLength)) // Если есть данные.. { incomingByte = Serial.read(); for (int i = 0; i < messageLength; i++) { Serial.write(message); // выводим их в одной строке } Serial.println("1"); } else { Serial.println(" no data."); } } }
Чем эта конструкция: Код (C++): if (incomingByte == '1') enableScan = true; else if (incomingByte == '2') enableScan = false; if(enableScan == true) {... Лучше чем: Код (C++): if (incomingByte == '1') {...
То есть ждем байты из одного источника, а принимаем из другого? Код (C++): if (vw_get_message(message, &messageLength)) // Если есть данные.. { incomingByte = Serial.read(); for (int i = 0; i < messageLength; i++) { Serial.write(message); // выводим их в одной строке } Serial.println("1"); }
Замените Код (C++): incomingByte = Serial.read(); // считываем байт if (incomingByte == '1') enableScan = true; else if (incomingByte == '2') enableScan = false; на Код (C++): if (Serial.available) { incomingByte = Serial.read(); // считываем байт if (incomingByte == '1') enableScan = true; else if (incomingByte == '2') enableScan = false; }