اطلاعیه

Collapse
No announcement yet.

ارسال نشدن sms پشت سر هم در sim800l

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ارسال نشدن sms پشت سر هم در sim800l

    این تقریبا اولین ارسال من در این انجمن هست. اگه اشتباهی دارم ممنون میشم بهم اطلاع بدین
    من یک پروژه با sim800l ساختم که توش میاد و 5 تا شماره رو توی حافظه eeprom ذخیره میکنه و بعد موقع تحریک شدن یه سنسور میاد و همه شماره ها sms میده و بعد به اولی زنگ میزنه.
    ولی ماژول نمیاد به همه sms بده و فقط به شماره اول sms میده و بعد بقیه هیچی و بعد زنگ میزنه. مشکل درست خونده نشدن شماره ها هم نیست چون موقع ارسال پیامک گفتم تو سریال مانیتور نشون بده شماره رو و درست نشون میده. مشکل ارسال نکردن درخواست پیامک هم نیست چون من به tx rx ماژول یه ماژول usb to ttl هم وصل کردم و دیدم برای همه شماره ها میاد و at کامند رو درست ارسال میکنه.
    ممنون میشم اگه دوستان در این زمینه تجربه ای دارند بهم بگن

    #include <EEPROM.h>
    #include <SoftwareSerial.h>


    #define SIM800RX 7 //D7 - SIM800L RX PIN
    #define SIM800TX 8 //D8 - SIM800L TX PIN


    #define SENSOR1SMSTEXT "Fire error" //Sensor 1 SMS Text
    #define SENSOR2SMSTEXT "Theft error" //Sensor 2 SMS Text


    SoftwareSerial SIM800(SIM800RX, SIM800TX);


    String readSerial(String txt) {
    SIM800.flush();
    if (SIM800.readString() != "") {
    while (SIM800.readString() != "") {}
    }
    String text = "";
    if (txt != "") {
    SIM800.println(txt);
    int timeout = 0;
    while (!SIM800.available() && timeout < 12000) {
    delay(1);
    timeout++;
    }
    if (SIM800.available()) {
    text = SIM800.readString();
    }
    }
    return text;
    }


    void readSerialOK(String txt) {
    while (readSerial(txt).indexOf("OK") == -1) {
    delay(700);
    }
    }


    void configSim800L() {
    readSerialOK("AT");
    delay(200);
    readSerialOK("AT+CMGF=1");
    delay(200);
    readSerialOK("AT+CNMI=1,2,0,0,0");
    delay(200);
    readSerialOK("AT+CMGDA=\"DEL ALL\"");
    delay(200);
    readSerialOK("AT+CSMP=17,167,0,0");
    delay(200);
    }


    void SendTextSMS(String num, String sms) {
    SIM800.print("AT+CMGS=\"");
    SIM800.print(num);
    SIM800.println("\"");
    delay(150);
    SIM800.print(sms);
    SIM800.write(26);
    delay(700);
    Serial.println("");
    Serial.print("Send SMS to:");
    Serial.print(num);
    Serial.print(":");
    Serial.println(sms);
    }


    bool checkPhone(String phone) {
    if (phone.substring(0, 2) == "09" && phone.length() == 11) {
    return true;
    } else {
    return false;
    }
    }


    void WriteEEPROM(byte part, String val) {
    int start_addw = part * 16;
    int w_len = val.length();
    EEPROM.write(start_addw, w_len + 1);
    int end_w = start_addw + w_len;
    byte len = 0;
    for (int i = start_addw + 1; i < end_w + 1; i++) {
    EEPROM.write(i, int(val[len]));
    len++;
    }
    len = 0;
    EEPROM.commit();
    }


    String ReadEEPROM(byte part) {
    int start_addr = part * 16;
    String str;
    int ch;
    int r_len = EEPROM.read(start_addr);
    int end_r = start_addr + r_len;
    for (int i = start_addr + 1; i < end_r; i++) {
    ch = EEPROM.read(i);
    str += char(ch);
    }
    if (checkPhone(str) == false) {
    str = "";
    }
    return str;
    }


    void ClearEEPROM(byte part) {
    int start_addw = part * 16;
    int w_len = 11;
    EEPROM.write(start_addw, 0);
    int end_w = start_addw + w_len;
    byte len = 0;
    for (int i = start_addw + 1; i < end_w + 1; i++) {
    EEPROM.write(i, 0);
    len++;
    }
    len = 0;
    EEPROM.commit();
    }


    void SendSMS(String sms) {
    String num1 = ReadEEPROM(1);
    String num2 = ReadEEPROM(2);
    String num3 = ReadEEPROM(3);
    String num4 = ReadEEPROM(4);
    String num5 = ReadEEPROM(5);
    if (num1 != "") {
    SendTextSMS(num1, sms);
    }
    if (num2 != "") {
    SendTextSMS(num2, sms);
    }
    if (num3 != "") {
    SendTextSMS(num3, sms);
    }
    if (num4 != "") {
    SendTextSMS(num4, sms);
    }
    if (num5 != "") {
    SendTextSMS(num5, sms);
    }
    }


    void Call() {
    String call = "";
    String num1 = ReadEEPROM(1);
    String num2 = ReadEEPROM(2);
    String num3 = ReadEEPROM(3);
    String num4 = ReadEEPROM(4);
    String num5 = ReadEEPROM(5);
    if (num1 != "") {
    call = num1;
    } else if (num2 != "") {
    call = num2;
    } else if (num3 != "") {
    call = num3;
    } else if (num4 != "") {
    call = num4;
    } else if (num5 != "") {
    call = num5;
    }
    Serial.println("");
    Serial.print("Call to:");
    Serial.print(call);
    if (call != "") {
    readSerialOK("ATD"+call+";");
    delay(300);
    }
    }




    void trigSensor1() {
    SendSMS(SENSOR1SMSTEXT);
    Call();
    }


    void trigSensor2() {
    SendSMS(SENSOR2SMSTEXT);
    Call();
    }


    void setup() {
    SIM800.begin(9600);
    Serial.begin(9600);
    EEPROM.begin(512);
    pinMode(IN1, INPUT_PULLUP);
    pinMode(IN2, INPUT);
    pinMode(SSS, OUTPUT);
    digitalWrite(SSS, LOW);
    while (readSerial("AT+COPS?").indexOf("+COPS: 0,0,\"") == -1) {
    delay(700);
    }
    configSim800L();
    digitalWrite(SSS, HIGH);
    }


    void loop() {
    if (digitalRead(IN1) == LOW) {
    trigSensor1();
    }
    if (digitalRead(IN2) == HIGH) {
    trigSensor2();
    }
    }
    جدیدترین ویرایش توسط erfansoft; ۱۱:۲۹ ۱۳۹۹/۰۷/۰۶.

    #2
    پاسخ : ارسال نشدن sms پشت سر هم در sim800l

    مشکل حل شد.

    [FONT=Yekan]void SendTextSMS(String num, String sms) {[/FONT]
    [FONT=Yekan]SIM800.print("AT+CMGS=\"");[/FONT]
    [FONT=Yekan]SIM800.print(num);[/FONT]
    [FONT=Yekan]SIM800.println("\"");[/FONT]
    [FONT=Yekan]delay(150);[/FONT]
    [FONT=Yekan]SIM800.print(sms);[/FONT]
    [FONT=Yekan]SIM800.write(26);[/FONT]
    [FONT=Yekan]delay(3000);[/FONT]
    [FONT=Yekan]Serial.println("");[/FONT]
    [FONT=Yekan]Serial.print("Send SMS to:");[/FONT]
    [FONT=Yekan]Serial.print(num);[/FONT]
    [FONT=Yekan]Serial.print(":");[/FONT]
    [FONT=Yekan]Serial.println(sms);[/FONT]
    [FONT=Yekan]}[/FONT]

    من delay رو زیاد کردم و از 700 به 3000 تغییر دادم مشکل حل شد.
    جدیدترین ویرایش توسط erfansoft; ۲۱:۴۰ ۱۳۹۹/۰۷/۰۶.

    دیدگاه

    لطفا صبر کنید...
    X