forbids converting a string constant to 'char

Тема в разделе "Arduino & Shields", создана пользователем Scolt, 8 фев 2019.

  1. Scolt

    Scolt Нуб

    Добрый день! Загружаю скетч для UNO


    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>

    #define MESSAGE_LENGTH 160
    #define MESSAGE_ON  "On"
    #define MESSAGE_OFF  "Off"
    #define MESSAGE_STATE  "State"
    #define RELAY 5

    char message[MESSAGE_LENGTH];
    char phone[16];
    char datetime[24];
    bool stateRelay = false;
    GPRS gprs(Serial);
    void setup()
    {

      pinMode(RELAY, OUTPUT);
      digitalWrite(RELAY, LOW);
      Serial.begin(9600);
      gprs.powerOn();
     
      while (!Serial) {
      }
     
      Serial.begin(9600);

      while (!gprs.init())
     {
        delay(1000);
        Serial.print("GPRS Init error\r\n");
      }

      Serial.println("GPRS init success");
    }
    void loop()
    {

      if (gprs.ifSMSNow()) {

       
        gprs.readSMS(message, phone, datetime);
     
        Serial.print("From number: ");
        Serial.println(phone);
       
        Serial.print("Datetime: ");
        Serial.println(datetime);
     
        Serial.print("Recieved Message: ");
        Serial.println(message);
     
        setRelay(phone, message);
      }
    }
    void setRelay(char f_phone[], char f_message[])
    {
      if (strcmp(f_message, MESSAGE_ON) == 0) {
     
        Serial.println("OK! Power is On");
        digitalWrite(RELAY, HIGH);
        stateRelay = true;

        gprs.sendSMS(f_phone, "Power is On");
      } else if (strcmp(f_message, MESSAGE_OFF) == 0) {
     
        Serial.println("OK! Power is Off");
        digitalWrite(RELAY, LOW);
        stateRelay = false;

        gprs.sendSMS(f_phone, "Power is Off");
      } else if (strcmp(f_message, MESSAGE_STATE) == 0) {
     
        if (stateRelay) {
          Serial.println("State: Power is On");
          gprs.sendSMS(f_phone, "Power is On");
        } else {
          Serial.println("State: Power is Off");
          gprs.sendSMS(f_phone, "Power is Off");
        }
      } else {
       
        Serial.println("Error... unknown command!");
        gprs.sendSMS(f_phone, "Error...unknown command!");
      }

    и в ошибках возникает сл. запись:
    In function 'void setRelay(char*, char*)': warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] gprs.sendSMS(f_phone, "Power is On");
    Видимо поэтому обратно на телефон не приходит SMS о выполнении команды. Помогите плз. решить проблему
     
  2. Asper Daffy

    Asper Daffy Гик

    Не не поэтому. Это предупреждение, забейте на него, всё нормально работает.
     
  3. parovoZZ

    parovoZZ Гуру

    компилятор тупо компилирует программу при условии правильности синтаксиса. Работоспособность программы ему до фонаря.
     
  4. Scolt

    Scolt Нуб

    тогда в чем проблема? SMS о выполнении команды и статусе не получаю:(
     
  5. AlexU

    AlexU Гуру

    В программе отладочная информация в Serial выдаётся. Вы её как-то мониторите? Лишнего ни чего там не наблюдаете?
     
  6. b707

    b707 Гуру

    СМС не приходит, потому что у вас в программе модем и сериал монитор подключены к одному выходу.
    И видно, что код явно собран из кусков. И тот, кто собирал - ровно ничего в нем не понял.

    Если это так - вам надо сначала понять, как это работает - иначе ничего не выйдет.
     
    Asper Daffy, ZAZ-965 и DetSimen нравится это.
  7. Asper Daffy

    Asper Daffy Гик

    Сообщение компилятора, о котором ты спрашивал, в этом точно не виновато.
     
  8. Scolt

    Scolt Нуб

    Ничего, лишнего. Только те что прописаны в скетче
     
  9. Scolt

    Scolt Нуб

    хорошо, тогда в чем беда?
     
  10. Asper Daffy

    Asper Daffy Гик

    Пост #6 пропустил? Или не понял о чём там? Там как раз написано в чём беда.
     
  11. Scolt

    Scolt Нуб

    Честно не понимаю о какой строке кода речь? И причем тут выход? Скажите почему на мониторе порта Serial.println("OK! Power is On") выводиться, а sms по этой команде gprs.sendSMS(f_phone, "Power is On") не отправляется?
     
  12. Scolt

    Scolt Нуб

    прочитал и не понял :(
     
  13. Asper Daffy

    Asper Daffy Гик

    У тебя модем работает через сериал? Или что по твоему означает вот эта строка
    GPRS gprs(Serial);
    ?
    А ты в этот же сериал всякую хрень пишешь свою. Ну, и как по-твоему, модему это нравится?
     
    DetSimen нравится это.