Ардуино+Sim800L. Не высылает смс

tregubov
Offline
Зарегистрирован: 26.10.2020

Всем добрый день! Собрал ардуино, сим800л, код прошил и все сделал.

При получении смс (0,1) порт начинает чудить и смс не приходит

КОД:

#include "SIM900.h"
#include <SoftwareSerial.h>

#include "sms.h"
#include "call.h"
SMSGSM sms;
CallGSM call;

//=================Пины 2 и 3 для Подключения GSM модуля

int sensor1=0;
int flag1=0;
boolean started=false;
char smsbuffer[160];
char n[20];
String n1 = "+79130000012";
String input_string = "";
String smsContent = "";
char sirena[] = "Sirena  vkluchena!";
char PowerOFF[] = "Snyato s ohrani";
char smsDv[] ="Wnimaniye! Dvijeniye na objekte!";
char smsW[] ="Postanovka na ohranu!";
char pos;
char sendsms[160];

void setup() {
 
 pinMode(10, OUTPUT); // Пассивный зумер (сигнал)
 pinMode(7, OUTPUT);

Serial.begin(9600);
  pinMode(4, INPUT); // датчик движения
//  digitalWrite(4, HIGH);
  pinMode(5, INPUT); // еще какой-нибудь датчик
//  digitalWrite(5, HIGH);

       if (gsm.begin(4800)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

}
void loop() {

//===========================Первое срабатывание датчика движения
  if ((digitalRead(5)==HIGH) && sensor1==1 && flag1==0){
    n1.toCharArray(n,20);
    sms.SendSMS(+79137832359, smsDv);               // Посылаем СМС о том, что есть движение
    sms.DeleteSMS(1);memset(n,0,20);
    char smsbuffer[160]="";
    flag1++;
    delay(5000); // Ждем 5 секунд
  }
//===========================Повторное срабатывание датчика движения
  if ((digitalRead(5)==HIGH) && sensor1==1 && flag1==1){
    n1.toCharArray(n,20);
    sms.SendSMS(+79137832359, sirena);            // Посылаем СМС о том, что включена сирена
    sms.DeleteSMS(1);memset(n,0,20);
    char smsbuffer[160]="";
    flag1++;
  }

  if (flag1>=2){
    tone(10, 2780, 200); // Сирена 
  }


pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС
      if (pos) {                    // Если непрочитанные СМС есть, то...
        
getsms(); // получаем непрочитанную СМС

     if (input_string=="0"){Serial.print("Snyato s ohrani!");n1.toCharArray(n,20); sms.SendSMS(n, PowerOFF); sms.DeleteSMS(1);memset(n,0,20); // Команда "0" - снять с охраны
     sensor1=0;digitalWrite(7,LOW);input_string=""; char smsbuffer[160]=""; flag1=0;}
     
     if (input_string=="1"){Serial.print("Postanovka na ohranu!");n1.toCharArray(n,20); sms.SendSMS(n, smsW); sms.DeleteSMS(1); memset(n,0,20); // Команда "1" - Поставить на охрану
     sensor1=1; input_string=""; char smsbuffer[160]=""; flag1=0;}
        
        sms.DeleteSMS(pos); // удаляем СМС  из симки
      }
}
void getsms()
{
sms.GetSMS(1,n,20,smsbuffer,160);
input_string =String(smsbuffer);
          }

КУСОЧЕК ИЗ ПОРТА

RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: AT+CMGD=254

ERROR

ATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: AT+CMGL
ATT: OK
RIC: AT+CMGL="REC UNREAD"
ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

SMS Ready

Что делать не понимаю. Кто поможет +1 к карме от меня :)

 

b707
Offline
Зарегистрирован: 26.05.2017

в строчках 48 и 57 чушь, оно даже компилироваться не должно

Цитата:
Кто поможет +1 к карме от меня :)

Маловато будет

tregubov
Offline
Зарегистрирован: 26.10.2020

А как поправить?

Там сверху не мой номер, а уже внизу мой появился

заменить номер на n?

tregubov
Offline
Зарегистрирован: 26.10.2020

Цитата:
Кто поможет +1 к карме от меня :)

Маловато будет

[/quote]

Увеличим ставку :))

b707
Offline
Зарегистрирован: 26.05.2017

вы в этом коде вообще ничего не понимаете?

Вы в строке 47 зачем номер в символьный массив переводите? Чтобы в строке 48 вбить номер в виде числа? - так не работает и не должно

tregubov
Offline
Зарегистрирован: 26.10.2020

Подправил... Ошибка не ушла...

ATT: +CPMS:
RIC: 
ERROR

Call Ready

SMS Ready

ATT: +CPMS:
RIC: 
+CPMS: 0,10,0,10,0,10

OK

ATT: OK
RIC: 
OK

ATT: SHUT OK
RIC: 
SHUT OK


status=READY
ATT: OK
RIC: NO STRING RCVDATT: OK
RIC: 
OK

ATT: +CMGL:
RIC: 
OK

ATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: 
OK

ATT: +CMGL:
RIC: 
OK

ATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: 
OK

ATT: +CMGL:
RIC: 
OK

 

 

tregubov
Offline
Зарегистрирован: 26.10.2020

Я не могу понять, как избавиться от

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

ATT: OK
RIC: AT+

 

taratik
Offline
Зарегистрирован: 18.07.2018

Запустился сразу и все работает, может не только в коде проблема?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

tregubov пишет:

Я не могу понять, как избавиться от

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

ATT: OK
RIC: AT+CMGL="REC UNREAD"

ERROR

ATT: OK
RIC: AT+

 

для начала: у вас модем SIM800L а библиотеку подключаете SIM900.h - вы уверены что они совместимы?

по поводу команды AT+CMGL="REC UNREAD"  - с большой вероятностью модем не в режиме обычных SMS потому и ошибку выдает - откройте даташит на модем и там черным по английски написано

1) If text mode: 
<stat> "REC UNREAD" Received unread messages 
"REC READ" Received read messages 
"STO UNSENT" Stored unsent messages 
"STO SENT" Stored sent messages 
 "ALL" All messages 
<mode> 0 Normal 
 1 Not change status of the specified SMS record 
2) If PDU mode: 
<stat> 0 Received unread messages 
1 Received read messages 
2 Stored unsent messages 
3 Stored sent messages 
 4 All messages 
<mode> 0 Normal 
 1 Not change status of the specified SMS record 
AT+CMGL=<sta
t>[,<mode>] 
 

а режим переключается командой AT+CMGF