ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 2 از 2
  1. #1
    2020/09/18
    1
    0

    مشکل عدم اجرای شرط های IF در آردوینو پس از چند بار اجرا

    سلام

    یک برنامه خیلی ساده رو از اینترنت گرفتم که از طریق sim800l تعریف شده اگر پیامک D1 اومد یک رله رو فعال و بعد از 1000 میلی ثانیه غیرفعال کنه تا درب باز بشه

    برنامه کار میکنه اما بعد از چند بار استفاده هر پیامکی که واسش ارسال بشه درب رو باز میکنه

    ;کد برنامه :

    [FONT=Yekan]#include <SoftwareSerial.h>[/FONT]#include <EEPROM.h>


    int addr = 0;


    SoftwareSerial SIM(8, 7);


    const byte PIN_RLY1 = A2;


    const byte YELLOW = A0;
    const byte RED = A1;
    const byte BUZZER = A3;
    const byte GREEN = A4;


    const byte PIN_LED = 13;


    int _timeout;
    String _buffer;
    int ledState = LOW;
    const long interval = 500;
    unsigned long previousMillis = 0;


    void setup()
    {
    Serial.begin(9600);

    Serial.println("Start ...");


    SIM.begin(9600);
    _buffer.reserve(255);


    pinMode(PIN_RLY1, OUTPUT);
    pinMode(PIN_LED, OUTPUT);
    pinMode(YELLOW, OUTPUT);
    pinMode(RED, OUTPUT);
    pinMode(BUZZER, OUTPUT);
    pinMode(GREEN, OUTPUT);


    digitalWrite(PIN_RLY1, LOW);
    digitalWrite(YELLOW, LOW);
    digitalWrite(RED, LOW);
    digitalWrite(BUZZER, LOW);
    digitalWrite(GREEN, LOW);
    digitalWrite(PIN_LED, HIGH);


    digitalWrite(RED, HIGH);
    delay(500);
    digitalWrite(RED, LOW);


    Serial.println("30 Seconds Delay");
    delay(3000);


    digitalWrite(YELLOW, HIGH);
    delay(500);
    digitalWrite(YELLOW, LOW);


    SerialOk();
    Serial.println("Serial Ok");


    GsmOk();
    Serial.println("GSM Ok");


    BasicSettings();
    Serial.println("Basic Setting Ok");


    DelAllSms();
    Serial.println("All SMS Removed Success");


    digitalWrite(PIN_LED, LOW);


    digitalWrite(BUZZER, HIGH);
    delay(500);
    digitalWrite(BUZZER, LOW);


    digitalWrite(GREEN, HIGH);
    delay(1000);
    digitalWrite(GREEN, LOW);
    }


    void loop()
    {
    if (SIM.available())
    {
    _buffer = SIM.readString();


    if (_buffer.indexOf("+") != -1)
    {
    digitalWrite(YELLOW, HIGH);
    delay(1000);
    digitalWrite(YELLOW, LOW);

    _buffer = "";
    RxdSms();
    }


    _buffer = "";

    digitalWrite(GREEN, HIGH);
    delay(500);
    digitalWrite(GREEN, LOW);
    }


    unsigned long currentMillis = millis();


    if (currentMillis - previousMillis >= interval)
    {
    previousMillis = currentMillis;


    if (ledState == LOW)
    {
    ledState = HIGH;
    } else {
    ledState = LOW;
    }


    digitalWrite(PIN_LED, ledState);
    }
    }


    void SerialOk()
    {
    while (_readSerial("AT").indexOf("OK") == -1) {
    delay(1000);
    }
    }


    void GsmOk()
    {
    while (_readSerial("AT+CGREG?").indexOf("+CGREG: 0,1") == -1) {
    delay(1000);
    }
    }


    void BasicSettings()
    {
    while (_readSerial("ATE0").indexOf("OK") == -1) {
    delay(1000);
    }
    while (_readSerial("AT+CMGF=1").indexOf("OK") == -1) {
    delay(1000);
    }
    while (_readSerial("AT+MORING=1").indexOf("OK") == -1) {
    delay(1000);
    }
    while (_readSerial("AT+CSMP=17,167,0,0").indexOf("OK") == -1) {
    delay(1000);
    }
    }


    void DelAllSms() {
    while (_readSerial("AT+CMGDA=\"DEL ALL\"").indexOf("OK") == -1) {
    delay(1000);
    }
    }


    void RxdSms()
    {
    _readSerial("AT+CMGR=1");


    digitalWrite(PIN_LED, HIGH);


    //Serial.println(get_mobile(_buffer));
    //Serial.println(get_message(_buffer));


    if (_buffer.indexOf("D1") != -1)
    {
    if (get_mobile(_buffer) == "930xxxxxxx" || get_mobile(_buffer) == "930xxxxxxx" || get_mobile(_buffer) == "930xxxxxxx")
    {
    digitalWrite(BUZZER, HIGH);
    delay(500);
    digitalWrite(BUZZER, LOW);


    delay(500);


    digitalWrite(PIN_RLY1, HIGH);
    delay(1000);
    digitalWrite(PIN_RLY1, LOW);


    delay(500);

    send_sms("Dar Baz Shod", get_mobile(_buffer));

    delay(1000);

    digitalWrite(GREEN, HIGH);
    delay(500);
    digitalWrite(GREEN, LOW);

    _buffer = "XxXxXxXxXxXxXxXxXxXx";
    } else {
    digitalWrite(BUZZER, HIGH);
    digitalWrite(RED, HIGH);
    delay(1500);
    digitalWrite(BUZZER, LOW);
    digitalWrite(RED, LOW);
    }
    }


    DelAllSms();
    digitalWrite(PIN_LED, LOW);
    ledState = LOW;
    _buffer = "XxXxXxXxXxXxXxXxXxXx";
    }


    String _readSerial(String _print)
    {
    SIM.flush();


    if (SIM.readString() != "")
    {
    while (SIM.readString() != "") {
    }
    }


    _buffer = "";


    if (_print != "")
    {
    SIM.println (_print);
    _timeout = 0;


    while (!SIM.available() && _timeout < 12000 )
    {
    delay(1);
    _timeout++;
    }


    if (SIM.available())
    {
    _buffer = SIM.readString();
    }
    }


    return _buffer;
    }


    String get_mobile(String textBuffer)
    {
    String mobile = midString(textBuffer ,"\",\"+98", "\",");


    return mobile;
    }


    String get_message(String textBuffer)
    {
    String first_line = midString(_buffer ,"+CMGR", "\n");
    String msg = midString(_buffer ,"+CMGR"+ first_line +"", "OK");
    msg.trim();


    return msg;
    }


    String midString(String str, String start, String finish)
    {
    int locStart = str.indexOf(start);

    if (locStart==-1) return "";


    locStart += start.length();


    int locFinish = str.indexOf(finish, locStart);


    if (locFinish==-1) return "";


    return str.substring(locStart, locFinish);
    }


    void send_sms(String message, String mobile)
    {
    SIM.println("AT+CMGF=1"); // Configuring TEXT mode
    updateSerial();
    SIM.println("AT+CMGS=\"+98"+ mobile +"\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
    updateSerial();
    SIM.print(message); //text content
    updateSerial();
    SIM.write(26);
    }


    void updateSerial()
    {
    delay(500);


    while (Serial.available())
    {
    SIM.write(Serial.read());//Forward what Serial received to Software Serial Port
    }


    while(SIM.available())
    {
    Serial.write(SIM.read());//Forward what Software Serial received to Serial Port
    }
    [FONT=Yekan]}[/FONT]


    رله و LED ها به پین های آنالوگ متصل شدن و یک پایه هم به منفی متصل شده
  2. #2
    2007/11/19
    11
    3

    پاسخ : مشکل عدم اجرای شرط های IF در آردوینو پس از چند بار اجرا

    سلام،
    وقتی که این اتفاق میفته، قبل خط ۱۹۹، متغیر بافر رو چک کردید که داخلش چی هست؟

    من قبلا از کتابخونه زیر استفاده کرده بودم و به نظرم مشکلی نداشت. برای sim800l هم استفاده کرده بودم.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

نمایش نتایج: از 1 به 2 از 2

موضوعات مشابه

  1. پاسخ: 2
    آخرين نوشته: 2018/03/01, 02:12
  2. پاسخ: 7
    آخرين نوشته: 2016/06/12, 03:39
  3. مشکل اجرا arduino-1.0.6
    توسط i4man12 در انجمن خانواده Arduino
    پاسخ: 2
    آخرين نوشته: 2015/02/06, 20:08
  4. پاسخ: 2
    آخرين نوشته: 2014/09/05, 19:17
  5. برنامه در atmega32pu اجرا ميشه اما در atmega32a اجرا نميشه
    توسط بنده خدا در انجمن میکروکنترلرهای AVR
    پاسخ: 13
    آخرين نوشته: 2012/02/20, 14:59

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •