2 Arduino и LCD

Тема в разделе "Arduino & Shields", создана пользователем Salk, 25 сен 2015.

  1. Salk

    Salk Гик

    Прикрутил, забавная штукенция. Теперь буду думать, как грамотно её использовать в своей проекте.
    Код для примера. В 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;
        }
      }
    }
    hello.jpg
    Нужно быть осторожнее с delay(), иначе строка может задержаться и сдвинуться на один или вовсе не прийти.
     
    Последнее редактирование: 26 сен 2015