Два датчика влажности почвы и СМС

Тема в разделе "Arduino & Shields", создана пользователем Albert1977, 28 июн 2016.

  1. Albert1977

    Albert1977 Нерд

    Здравствуйте форумчане! Помогите новичку. Программировать только начал, но усвоил некоторые моменты, но не могу найти решения данного вопроса. Есть два датчика влажности почвы (http://amperka.ru/product/soil-moisture-sensor) и gprs shield (http://amperka.ru/product/arduino-gprs-shield). Показания датчиков снимаю, с этим вопросов не возникает. НО! Возникли трудности. Показания одного датчика могу отправить, второй СМС - показания второго, а как отправить одной СМС показания сразу с двух датчиков? Не бейте сильно, если это просто. Я только учусь.
    Вот код программы:

    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>

    // библиотека для эмуляции Serial-порта
    // она нужна для работы библиотеки GPRS_Shield_Arduino
    #include <SoftwareSerial.h>

    #define phone_number "89273344667"
    #define MESSAGE_LENGTH 160

    //********** Индикатор успешной связи GSM **************************
    const int LED = 13;

    //****************** Датчики влажности почвы **************************
    // переменные куда будут записываться данные с датчиков влажности почвы
    int dat0 = 0;
    int dat1 = 0;

    char CVET0[8];
    char CVET1[8];

    // ************** GPRS Shield **************************
    // текст сообщения
    char message[MESSAGE_LENGTH];
    // номер, с которого пришло сообщение
    char phone[16];
    // дата отправки сообщения
    char datetime[24];
    // номер сообщения в памяти сим-карты
    int messageIndex = 0;


    // создаём объект класса GPRS. По умолчанию скорость общения с ним 9600 бод
    // с помощью него будем давать команды GPRS шилду
    GPRS gprs;

    void setup()
    {
    // включаем GPRS-шилд
    gprs.powerUpDown();
    // открываем последовательный порт для мониторинга действий в программе
    Serial.begin(9600);
    // проверяем, есть ли связь с GPRS-устройством
    while (!gprs.init())
    {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке;
    // процесс повторяется в цикле,
    // пока не появится ответ от GPRS-устройства
    digitalWrite(LED, HIGH);
    delay(1000);
    }
    // выводим сообщение об удачной инициализации GPRS Shield
    digitalWrite(LED, LOW);
    }

    void read_sensor()
    {
    dat0 = analogRead(0);
    dat1 = analogRead(1);
    }

    void preob()
    {
    // преобразуем целое число 10 системы исчисления
    // из переменной dat в строковое представление в DAT[]
    itoa(dat0, CVET0, 10);
    itoa(dat1, CVET1, 10);
    }

    void loop()
    {
    // если пришло новое сообщение
    if (gprs.ifSMSNow())
    {
    // читаем его
    gprs.readSMS(message, phone, datetime);
    if (String(message) == "1")
    {
    read_sensor();
    preob();
    Serial.print("dat0 = ");
    Serial.println(dat0);
    Serial.print("dat1 = ");
    Serial.println(dat1);
    gprs.sendSMS(phone_number, CVET0);
    }
    }
    }
     
  2. Tomasina

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

    gprs.sendSMS(phone_number, String("dat0:" + CVET0 +", dat1:" + CVET1));
     
  3. Albert1977

    Albert1977 Нерд

    Пишет ошибку invalid operands of types 'const char [6]' and 'char [8]' to binary 'operator+'
     
  4. Albert1977

    Albert1977 Нерд

    Никто не знает, что ли? Подскажите, пожалуйста
     
  5. Tomasina

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

    Код (C++):
      char bffr[32] = "";  // буфер, куда всё складываем
      merge(bffr, "Sensor 1: ");
      merge(bffr, CVET0);
      merge(bffr, "C, Sensor 2: ");
      merge(bffr, CVET1);
      merge(bffr, "C");
      gprs.sendSMS(phone_number, bffr);
    А в самый конец скетча (после закрывающей скобки от loop) вставь:
    Код (C++):
    void merge (char *s, char *s_) // магия черного ящика
    {
      while(*s)s++;
      while(*s_){*s=*s_;s++;s_++;} // Доктор Who смотрит за тобой...
    }
     
  6. Albert1977

    Albert1977 Нерд

    Tomasina, спасибо огромное от доктора Who ;). Код работает. +1 к вашей репутации. Буду изучать код. Спасибо
     
  7. DIYMan

    DIYMan Guest

    Эммм, а что - strcat уже уволили?
    Код (C++):
    char buffer[126] = {0};

    strcat(buffer,"Sensor 1: ");
    strcat(buffer," Second string");
    Думаю, что это как раз тот случай, когда велосипеды выдумывать не надо ;)
     
  8. Tomasina

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

    создание велосипедов стимулирует извилины ;)
     
  9. DIYMan

    DIYMan Guest

    Создание велосипедов множит баги ;)
     
  10. Albert1977

    Albert1977 Нерд

    DIYMan и ваш код работает ;). Тут есть над чем разбираться. Спасибо за помощь. +1 и Вам