Как составлять sms сообщения

Тема в разделе "Arduino & Shields", создана пользователем Player_Yaroslav, 28 мар 2022.

  1. Всем привет! С помощью GPRS Shield v3 можно отправлять какие либо смс сообщения. Вопрос такой: можно ли составлять эти смс сообщения?
    Допустим у меня есть 2 переменные, которые постоянно меняют свое значение и эти самые значения нужно отправлять. Конечно можно составить с помощью Sring, но у меня не получается конвертировать в char. Есть ли еще какие нибудь способы?
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Легко!
     
    Последнее редактирование: 28 мар 2022
  3. А если с использованием библиотек от амперки? Типа GPRS_Shield_Arduino
     
  4. b707

    b707 Гуру

    Player_Yaroslav

    слушайте. я жке вам уже ответил в другой ветке, для конвертиртации String в char в классе Стринг есть специальный метод, ну читайте же документацию

    И нафига создавать новую ветку с тем же вопросом?
     
  5. Airbus

    Airbus Радиохулиган Модератор

    А чем не устраивает от Пушного Звера? Тем более там есть Ваш вариант
    Можно и с библиотеками но это более громоздко и менее оптимально. Все есть на ВИКИ у Амперки.
     
  6. Я написал что не работает.

    String stringOne = "A string";
    char Buf[50];
    stringOne.toCharArray(Buf, 50)

    Нашел такую команду, но все равно приходит пустое смс
     
  7. Тоже верно, буду всё пробовать.
     
  8. b707

    b707 Гуру

    оно не может "не работать". если вы правильно делаете.
    Для прjверки выведите строчку char в сериал. например
    Код (C++):
    String stringOne = "A string";
    char Buf[50];
    stringOne.toCharArray(Buf, 50)
    Serial.print(Buf);
    значит ошибка где-то в другом месте.
    Покажите код. как вы текст СМС из переменных составляете... судя по вопросам, вы в этом не слишком опытны, накосячить могли где угодно.
     
    Последнее редактирование: 28 мар 2022
  9. Именно поэтому нужны такие как вы
     
  10. Код (C++):
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>

    SoftwareSerial mySerial(10, 11);
    GPRS gprs(mySerial);

    #define MESSAGE_LENGTH 300
    char message[MESSAGE_LENGTH];
    char datetime[24];
    char phone[16];

    #define phone "+79010594050"
    #define protect_comm "Protect arm"
    #define disprotect_comm "Protect disarm"
    #define status_comm "Status"
    byte a = 8;
    byte b = 7;
    float voltage;
    float voltage1;
    byte c;
    byte n;
    byte ak;
    byte r;
    byte s;
    byte t;
    int messageIndex = 0;
    uint32_t myTimer;
    uint32_t myTimer1;
    uint32_t myTimer2;
    uint32_t myTimer3;
    uint32_t myTimer4;

    String i2;
    String i3;

    char *i1[] = {
      "Tilt normal",
      "WARNING! Tilt change",
    };

    void setup()
    {
      mySerial.begin(9600);
      Serial.begin(9600);
      mySerial.println("AT+CMGF=1");
      delay(100);
      mySerial.println("AT+CSCS=\"GSM\"");
      delay(100);
      pinMode (a, INPUT);
      pinMode(A1, INPUT);
      pinMode(b, OUTPUT);
      while (!Serial)
      {
      }
      Serial.print(F("Serial init OK\r\n"));
      gprs.powerOn();
      while (!gprs.init())
      {
        delay(1000);
        Serial.print(F("GPRS init error\r\n"));
      }
      Serial.println(F("GPRS init OK"));
      gprs.sendSMS(phone, "System ON");
      Serial.println(F("System ON"));
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    void loop()
    {
      for (;;)
      {
        Serial.println(F("Loop function"));
        if (c == 1)
        {
          Serial.println(F("PROTECT function"));
          analys();
          rele();
          report();
          emergency();
        } else if (c == 2) {
          Serial.println(F("DISPROTECT function"));
          c = 0;
        } else if (c == 3) {
          Serial.println(F("STATUS function"));
          info();
          c = 0;
        }
        if (gprs.ifSMSNow())
        {
          Serial.println (F("GPRS have sms"));
          gprs.readSMS(message, phone, datetime);
          command(phone, message);
        }
      }
    }

    void command(char f_phone[], char f_message[])
    {
      Serial.println (F("Command function"));
      if (strcmp(f_message, protect_comm) == 0)
      {
        Serial.println (F("Protection command"));
        c = 1;
        myTimer = millis();
        Serial.println(F("Protection active"));
        gprs.sendSMS(phone, "Protection active");
      } else if (strcmp(f_message, disprotect_comm) == 0) {
        Serial.println (F("Disprotection command"));
        c = 2;
        Serial.println(F("Protection disactive"));
        gprs.sendSMS(phone, "Protection disactive");
      } else if (strcmp(f_message, status_comm) == 0) {
        Serial.println (F("Status command"));
        c = 3;
        Serial.println (F("Data collecting"));
      } else {
        Serial.println (F("Error command"));
        Serial.println(F("Error, unknown command"));
        gprs.sendSMS(phone, "Error, unknown command");
      }
    }

    void analys()
    {
      Serial.println(F("Analys function"));
      if (digitalRead(a) == 0)
      {
        Serial.println (F("Tilt normal"));
        if (n == 1)
        {
          n = 0;
          gprs.sendSMS(phone, "Tilt normal");
        }
      } else if (digitalRead(a) == 1) {
        if (n == 1)
        {
          Serial.println (F("WARNING! Tilt change"));
        } else if (n == 0) {
          Serial.println (F("WARNING! Tilt change"));
          gprs.sendSMS(phone, "WARNING! Tilt change");
          n = 1;
          myTimer1 = millis();
        }
      }

      voltage = analogRead(A1) * 0.015151515;
      Serial.print(F("Voltage: "));
      Serial.print(voltage);
      if (voltage <= 10 and ak == 0)
      {
        ak = 1;
        gprs.sendSMS(phone, "WARNING! Voltage low");
        Serial.println (F(" - WARNING! Voltage low"));
        myTimer2 = millis();
      } else if (voltage <= 10 and ak == 1) {
        Serial.println (F(" - WARNING! Voltage low"));
      } else if (voltage > 10) {
        ak = 0;
        Serial.println(F(" - Voltage normal"));
      }
    }

    void rele()
    {
      Serial.println(F("Rele function"));
      if (voltage >= 13.7 and r == 0)
      {
        digitalWrite(b, HIGH);
        s = 1;
        r = 1;
        t = 1;
        myTimer4 = millis();
        Serial.println(F("WARNING! Attempt to engine start"));
        gprs.sendSMS(phone, "WARNING! Attempt to engine start");
      } else if (voltage < 13.7 and r == 1)
      {
        r = 0;
      } else if (voltage >= 13.7 and r == 1)
      {
      } else if (millis() - myTimer4 >= (unsigned long) 10 * 60 * 1000 and t == 1)
      {
        Serial.println(F("10 minutes after attempt to engine start, relay off"));
        gprs.sendSMS(phone, "10 minutes after attempt to engine start, relay off");
        digitalWrite(b, LOW);
        s = 0;
        t = 0;
        r = 0;
      }

    }

    void report()
    {
      Serial.println("Report function");
      if (millis() - myTimer >= (unsigned long) 2 * 60 * 60 * 1000)
      {
        myTimer = millis();
        Serial.println(F("2-hour report, sysytem OK"));
        gprs.sendSMS(phone, "2-hour report, sysytem ON");
      }
    }

    void emergency()
    {
      Serial.println(F("Emergency function"));
      if (n == 1 and ak == 0)
      {
        if (millis() - myTimer1 >= (unsigned long) 60 * 1000)
        {
          myTimer1 = millis();
          Serial.println(F("Naklon SMS send"));
          gprs.sendSMS(phone, "WARNING! Tilt change");
        }
      } else if (ak == 1 and n == 0) {
        if (millis() - myTimer2 >= (unsigned long) 60 * 1000)
        {
          myTimer2 = millis();
          Serial.println(F("Voltage SMS send"));
          gprs.sendSMS(phone, "WARNING! Low voltage");
        }
      } else if (ak == 1 and n == 1) {
        if (millis() - myTimer3 >= (unsigned long) 60 * 1000)
        {
          myTimer3 = millis();
          Serial.println(F("Naklon & Rele SMS send"));
          gprs.sendSMS(phone, "WARNING! Low voltage | WARNING! Tilt change");
        }
      }
    }

    void info()
    {
      Serial.println(F("Info function"));
      voltage1 = analogRead(A1) * 0.015151515;
      voltage = analogRead(A1) * 0.015151515;
      i2 = i1[digitalRead(a)];
      i3 = voltage;
    }
    Вот собственно и код. функция info и отвечает за составление того самого смс.
    смс должно состоять из: "Status: " + i2 + ". Voltage: " + i3
     
    Последнее редактирование модератором: 28 мар 2022
  11. b707

    b707 Гуру

    вставьте код по правилам, у вас все форматирование поехало, например
    void loop()
    {
    for (;;)
    {
     
    Последнее редактирование: 28 мар 2022
  12. b707

    b707 Гуру

    и где в ней составление смс? покажете?
    Код (C++):
    void info()
    {
    Serial.println(F("Info function"));
    voltage1 = analogRead(A1) * 0.015151515;
    voltage = analogRead(A1) * 0.015151515;
    i2 = i1[digitalRead(a)];
    i3 = voltage;


    }