Сканер 433MHz

Тема в разделе "Arduino & Shields", создана пользователем DaNdY, 3 янв 2017.

  1. DaNdY

    DaNdY Нуб

    Здравствуйте, хочу сделать сканер 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');
    }
    }
    }
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    где ваш скетч?
     
  3. DaNdY

    DaNdY Нуб

    #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');
    }
    }
    }
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    для вставки кода пользуйтесь кнопкой "Код", иначе в этой каше символов ни у кого не возникает желания разбираться ;)

    Код (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.");
        }
      }
    }
     
    Последнее редактирование: 3 янв 2017
  5. DaNdY

    DaNdY Нуб

    Он все равно не работает, сканирует также один раз
     
  6. ostrov

    ostrov Гуру

    Чем эта конструкция:
    Код (C++):
      if (incomingByte == '1') enableScan = true;
      else if (incomingByte == '2') enableScan = false;

      if(enableScan == true)
      {...
    Лучше чем:
    Код (C++):
      if (incomingByte == '1')  {...
     
  7. ostrov

    ostrov Гуру

    То есть ждем байты из одного источника, а принимаем из другого?
    Код (C++):
        if (vw_get_message(message, &messageLength)) // Если есть данные..
        {
            incomingByte = Serial.read();
            for (int i = 0; i < messageLength; i++)
            {
              Serial.write(message); // выводим их в одной строке
            }
            Serial.println("1");
        }
     
  8. sslobodyan

    sslobodyan Гик

    Замените
    Код (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;
    }