Добрый день. Пытаюсь написать код, в котором по смс включаются реле. Управление работает, но при запросе - ошибка при отправке СМС со статусом. Код (C++): #include <SoftwareSerial.h> SoftwareSerial SIM800(12, 13); String textMessage; String SistemaState = "LOW"; String ObogrevState = "LOW"; String NasosState = "LOW"; const int sistema = 16; const int obogrev = 9; const int nasos = 10; void setup() { pinMode(sistema, OUTPUT); pinMode(obogrev, OUTPUT); pinMode(nasos, OUTPUT); digitalWrite(sistema, LOW); digitalWrite(obogrev, LOW); digitalWrite(nasos, LOW); Serial.begin(19200); SIM800.begin(19200); delay(20000); Serial.print("SIM800 ready..."); SIM800.print("AT+CMGF=1\r"); delay(100); SIM800.print("AT+CNMI=2,2,0,0,0\r"); delay(100); } void loop(){ if(SIM800.available()>0){ textMessage = SIM800.readString(); Serial.print(textMessage); delay(10); } if(textMessage.indexOf("ON")>=0){ // Turn on relay and save current state digitalWrite(sistema, HIGH); SistemaState = "on"; Serial.println("Sistema set to ON"); textMessage = ""; } if(textMessage.indexOf("OFF")>=0) { digitalWrite(sistema, LOW); SistemaState = "off"; Serial.println("Sistema set to OFF"); textMessage = ""; } if(textMessage.indexOf("STATUS")>=0){ String message = "System is " + SistemaState; sendSMS(message); Serial.println("System state resquest"); textMessage = ""; } } void sendSMS(String message){ SIM800.print("AT+CMGF=1\r"); delay(100); SIM800.println("AT + CMGS = \"+79026218696\""); delay(100); SIM800.println(message); delay(100); SIM800.println((char)26); delay(100); SIM800.println(); delay(5000); } Ответ от системы такой: +CMT: "+79026218696","","19/02/27,08:17:23+12" STATUS System state resquest AT+CMGF=1 OK AT + CMGS = "+79026218696" ERROR System is on Подскажите, пожалуйста, где накосячил. Спасибо
У меня работает вот такой код: Код (C++): printf("AT+CMGS=%s", num); HAL_Delay(500); printf("%s\x1A\r", msg); HAL_Delay(500); Правда это для STM32.
формат отправки СМС проверяйте. Там каждый символ имеет значение. Описание синтаксиса отправки СМС есть в мануале на модем, для СИМ800 он лежит на каждом углу К примеру. совершенно непонятно, почему у вас строчки заверщаются "\r". вроде как правильно "\r\n"
Спасибо за подсказку. Разобрался. Ошибка в том, что я к сообщению "System is" пытаюсь добавить состояние переменной SistemaState, а нужно писать String(SistemaState). Теперь борюсь с другой проблемой - в ответном сообщении приходит ответ с состоянием и после еще одна пустая строка (в этом же сообщении)