اطلاعیه

Collapse
No announcement yet.

در خواست راهنمایی درچک کردن خالی بودن ارایه

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

    در خواست راهنمایی درچک کردن خالی بودن ارایه

    سلام خدمت همه ی دوستان.
    من یک پروژه دریافت sms با sim800l اجرا کردم!
    به کمک این تاپیک
    همه چی خوبه ولی چنتا مشکل دارم.
    من کد زیر را همواره واسه دریافت اس ام اس جدید به ماژول میفرستم
    کد:
    printf("AT+CMGR=%d%c",sms_index,ENT);
    بعد وقتی متن پیام را میخونم اگه با اون دستورایی که میخواستم برابر بود یه عملیاتی را انجام میده و در اخر sms_index را ++ یا همون به اضافه 1 میکنه و برای خوندن پیام بعدی اماده میشه.
    حالا مشکل اینه که اگه یک پیام تبلیغاتی واسم بیاد یا متن پیام با متن هایی که من میخواستم برابر نباشه ، دگ نمیتونم مقدار sms_index را ++ کنم و برای پیام بعدی امادش کنم!
    من متن اس ام اس دریافتی را در یک ارایه به نام sms_txt میریزم و باید بگم چون میکرو همواره داره دستور AT+CMGR را به ماژول میفرسته و در صورتی که پیامی دریافت نشده باشه مقداره sms_txt خالی هست پس نمیتوم همیشه بعد از ارسال AT+CMGR مقدار sms_txt را ++ کنم !
    حالا به نظرتون اگه sms_txt خالی بود من چطوری sms_index را افزایش بدم.

    از کد های زیر استفاده کردم ولی هیچ نتیجه ای نگرفتم.
    کد:
    if(!strstr(sms_txt,"")){sms_index++;}
    if(strlen(sms_txt)!=0){sms_index++;}
    if(strlen(sms_txt)>0){sms_index++;}
    if(sms_txt[0]!='\0'){sms_index++;}
    اینم بگم برای این که میکرو مدام ماژول را چک نکنه و هر وقت sms اومد کد را برای ماژول بفرسته از وقفه خارجی هم استفاده کردم.
    ولی ماژول وقتی ماژول sms دریافت میکرد پایه ی ring ماژول نویز میگرفت و به غیر از پالس اصلی چندتا پالس دگ هم میداد و این باعث میشد که تابع وقفه چندین بار اجرا بشه و sms_index چندین بار ++ بشه و پیام بعدی رو نخونه!

    شاید یکم بد مشکلمو بیان کرده باشم! اگه جایی نا مفهموم بگید تا توضیح بدم.
    ممنونم میشم راهنمایی کنید.!

    #2
    پاسخ : در خواست راهنمایی درچک کردن خالی بودن ارایه

    من پیشنهادم اینه که از وقفه روی پایه RI استفاده کنید. اگه این وقفه رخ داد یوزارت رو چک کنید که پیامی رسیده یا خیر.
    در مورد سوال بعدی به نظر من شما هربار پس از دریافت sms حافظه سیمکارت رو پاک کنید تا مجبور نیاشید sms_index رو افزایش بدید. در واقع با پاک کردن حافظه، هر بار sms فقط در خانه اول حافظه قرار میگیره.
    www.gam-co.blogsky.com

    دیدگاه


      #3
      پاسخ : در خواست راهنمایی درچک کردن خالی بودن ارایه

      نوشته اصلی توسط vahidabedi نمایش پست ها
      من پیشنهادم اینه که از وقفه روی پایه RI استفاده کنید. اگه این وقفه رخ داد یوزارت رو چک کنید که پیامی رسیده یا خیر.
      در مورد سوال بعدی به نظر من شما هربار پس از دریافت sms حافظه سیمکارت رو پاک کنید تا مجبور نیاشید sms_index رو افزایش بدید. در واقع با پاک کردن حافظه، هر بار sms فقط در خانه اول حافظه قرار میگیره.
      مشکل وقفه ها اینه که وقتی ماژول پیام دریافت میکنه به جز پالس اصلی چندین پالس دگ هم میده که کار را خراب میکنه.
      در مورد حذف اس ام اس ها و جرای at+cmgr=1 باید بگم قبلا تست کردم، sms اول را میگرفت ولی بقیه رو نه دگ

      دیدگاه


        #4
        پاسخ : در خواست راهنمایی درچک کردن خالی بودن ارایه

        وقتی با ماژول تماس برقرار بشه یا sms دریافت بشه RI صفر میشه. شما فقط کافیه تشخیص بدید تماس بوده یا sms. شاید دوسه خط برنامه بیشتر بشه ولی از اینکه مرتبا میکرو و ماژول رو درگیر کنید و at+cmgr براش بفرستید خیلی بهتره.
        در مورد سوال دوم بازم تاکید میکنم که بعد از خوندن پیام باید حتما اونو از حافظه پاک کنید تا sms بعدی دوباره توی خونه 1 بشینه.
        www.gam-co.blogsky.com

        دیدگاه

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