اطلاعیه

Collapse
No announcement yet.

نحوه تشخیص SMS دریافتی ذخیره شده در بافر با SIM900

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

    نحوه تشخیص SMS دریافتی ذخیره شده در بافر با SIM900

    سلام
    من واسه خوندن متن و شماره SMS در زمان دریافت مشکلی ندارم ولی مشکل زمانی پیش میاد که میکرو داره یه کار دیگه انجام میده و در این زمان مثلا یک SMS و یک تماس توسط SIM900 دریافت میشه که تمام اینها تو بافر سریال میکرو ذخیره میشه.
    حالا مشکل من اینه که اگه اول SMS دریافت بشه میشه متن و شماره اون SMS رو در اورد ولی تو این حالت اگه بخوام شماره کسی که تماس گرفته رو در بیارم یخورده کار یخت میشه!
    یعنی باید تو رشته دریافتی که در بافر قرار داره دنبال متن CLIP بگردم که بعد از اون بتونم شماره فرد تماس گیرنده رو در بیارم
    از دوستان کسی تا حالا این مشکل رو حل کرده؟
    یا اینکه تابعی واسه سرچ کردن تو رشته هست؟
    اگه نباشه دیگه مجبورم یه تابع سرچ خودم بنویسم که به نظرم یکم حجم برنامه زیاد شه
    در ضمن از کامپایلر AVR STUDIO استفاده میکنم

    #2
    پاسخ : نحوه تشخیص SMS دریافتی ذخیره شده در بافر با SIM900

    سلام
    من برنامه رو به شکل زیر نوشتم و به خوبی جواب گرفتم!

    while ( (temp[f1]!='C') && (f1<=245) ) f1++;
    f2=f1+1;
    while ( (temp[f2]!='C') && (f2<=245) ) f2++;
    f3=f2+1;
    while ( (temp[f3]!='C') && (f3<=245) ) f3++;
    f4=f3+1;
    while ( (temp[f4]!='C') && (f4<=245) ) f4++;
    f5=f4+1;
    while ( (temp[f5]!='C') && (f5<=245) ) f5++;



    i=0;


    if (temp[f1]=='C')
    {
    for (t=f1;t<(f1+4);t++)
    {
    buffer1[i]=temp[t];
    i++;
    buffer1[i]=0;
    }
    }
    i=0;
    if (temp[f2]=='C')
    {
    for (t=f2;t<(f2+4);t++)
    {
    buffer2[i]=temp[t];
    i++;
    buffer2[i]=0;
    }
    }

    i=0;
    if (temp[f3]=='C')
    {
    for (t=f3;t<(f3+4);t++)
    {
    buffer3[i]=temp[t];
    i++;
    buffer3[i]=0;
    }
    }
    i=0;
    if (temp[f4]=='C')
    {
    for (t=f4;t<(f4+4);t++)
    {
    buffer4[i]=temp[t];
    i++;
    buffer4[i]=0;
    }
    }

    i=0;
    if (temp[f5]=='C')
    {
    for (t=f5;t<(f5+4);t++)
    {
    buffer5[i]=temp[t];
    i++;
    buffer5[i]=0;
    }
    }



    if ( strcmp ((const char*)buffer1,"CMT:")==0 )
    {
    CMT(f1,temp);
    strcpy ((char*)num1,(char*)num);
    strcpy ((char*)matn1,(char*)matn);
    }
    if ( strcmp ((const char*)buffer2,"CMT:")==0 )
    {
    CMT(f2,temp);
    strcpy ((char*)num2,(char*)num);
    strcpy ((char*)matn2,(char*)matn);
    }
    if ( strcmp ((const char*)buffer3,"CMT:")==0 )
    {
    CMT(f3,temp);
    strcpy ((char*)num3,(char*)num);
    strcpy ((char*)matn3,(char*)matn);
    }
    if ( strcmp ((const char*)buffer4,"CMT:")==0 )
    {
    CMT(f4,temp);
    strcpy ((char*)num4,(char*)num);
    strcpy ((char*)matn4,(char*)matn);
    }
    if ( strcmp ((const char*)buffer5,"CMT:")==0 )
    {
    CMT(f5,temp);
    strcpy ((char*) num5,(char*) num);
    strcpy ((char*)matn5,(char*)matn);
    }

    if ( strcmp ((const char*)buffer1,"CSQ:")==0) CSQ(f1,temp);
    if ( strcmp ((const char*)buffer2,"CSQ:")==0) CSQ(f2,temp);
    if ( strcmp ((const char*)buffer3,"CSQ:")==0) CSQ(f3,temp);
    if ( strcmp ((const char*)buffer4,"CSQ:")==0) CSQ(f4,temp);
    if ( strcmp ((const char*)buffer5,"CSQ:")==0) CSQ(f5,temp);




    طرز کار برنامه به اینصورت هست که میاد تو رشته دریافتی از sim900 که در متغیر temp قرار داره دنبال کلماتی میگرده که با C شروع شده (به این دلیل C گذاشتم چون رشته هایی که لازم دارم همش با C شروع میشن! مثل CMT و CSQ و CLIP) و بعد شماره کاراکتری که C از اون شروع شده رو تو 5 تا متغیر مختلف ذخیره میکنه.یعنی اگه تو رشته دریافت شده 5 تا C وجود داشته باشه مکان شروع این کلمات رو تو 5 تا متغیر مختلف ذخیره میکنه.
    در مرحله بعدی ما باید تشخیص بدیم که این کلماتی که با C شروع شده مربوط به چی هست.برای همین میایم 3 کلمه بعد از کاراکتر C رو جدا میکنیم و در بافرهای مختلف ذخیره میکنیم(نکته اینجاست که ممکنه فقط یک بافر پر بشه و یا اینکه هر 5 بافر پر بشه و در مواقعی که چندین SMS همزمان دریافت بشه ممکنه SMS های آخر رو از دست بدیم! اگه براتون مهمه میتونید تعداد بافرها رو افزایش بدید)
    و مرحله بعد چک میکنیم که این کلماتی که با C شروع شدن CSQ هست یا CMT!
    اگه CSQ باشه وارد تابع CSQ میشه که نوشتم و سیگنال رو نمایش میده
    اگه CMT باشه وارد تابع CMT میشه و متن و شماره SMS رو بیرون میاره

    حالا این راهی هست که من استفاده کردم
    دوستان راه بهتری سراغ ندارن؟

    دیدگاه


      #3
      پاسخ : نحوه تشخیص SMS دریافتی ذخیره شده در بافر با SIM900

      سلام
      دوستان کسی نظری نداره؟
      راه بهتری سراغ ندارید؟

      دیدگاه

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