اطلاعیه

Collapse
No announcement yet.

راهنمایی کوچک برنامه نویسی c برای sim900

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

    راهنمایی کوچک برنامه نویسی c برای sim900

    سلام
    من از برنامه زیر که برای sim900 هستش برای دریافت دستور +CMTI: استفاده کردم

    کد:
    char cmti[]={'+','C','M','T','I',':'};
    کد:
    //waiting for +CMTI: from sim900
          while(i <= 5) {
             for(j=0;j<=128;j++) { 
             if(rx_buffer[j]==cmti[i]) i++;
             delay_ms(3);
             }
          }
    میدونم با این روش ممکنه مشکلاتی به وجود بیاد مثلآ اگر بین این حروف هم حروف و کاراکتر های دیگه ای بیاد باز هم از حلقه میاد بیرون که البته بعید میدونم چنین مشکلی پیش بیاد چون من جاهای لازم بافر دریافت رو پاک میکنم
    به هر حال اگر ممکنه یه روش اصولی تر برای دریافت +CMTI: معرفی کنید
    خیلی ممنون
    [آموزشی] کنترل رله با پیامک توسط sim800l
    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
    صفحه اینستاگرام : ecdco_ir


    #2
    پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

    نوشته اصلی توسط reza0506 نمایش پست ها
    سلام
    من از برنامه زیر که برای sim900 هستش برای دریافت دستور +CMTI: استفاده کردم

    کد:
    char cmti[]={'+','C','M','T','I',':'};
    کد:
    //waiting for +CMTI: from sim900
          while(i <= 5) {
             for(j=0;j<=128;j++) { 
             if(rx_buffer[j]==cmti[i]) i++;
             delay_ms(3);
             }
          }
    میدونم با این روش ممکنه مشکلاتی به وجود بیاد مثلآ اگر بین این حروف هم حروف و کاراکتر های دیگه ای بیاد باز هم از حلقه میاد بیرون که البته بعید میدونم چنین مشکلی پیش بیاد چون من جاهای لازم بافر دریافت رو پاک میکنم
    به هر حال اگر ممکنه یه روش اصولی تر برای دریافت +CMTI: معرفی کنید
    خیلی ممنون
    سلام
    از تابع strtstr استفاده کنید.کار این تابع این هست که تو رشته ای که بهش میدید دنبال کلمه مورد نظرتون میگرده!
    توضیحات بیشتر:

    دیدگاه


      #3
      پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

      نوشته اصلی توسط M3R-E نمایش پست ها
      سلام
      از تابع strtstr استفاده کنید.کار این تابع این هست که تو رشته ای که بهش میدید دنبال کلمه مورد نظرتون میگرده!
      توضیحات بیشتر:
      http://www.cplusplus.com/reference/cstring/strstr/
      خیلی ممنون اگر ممکنه یه خورده بیشتر راهنمایی بفرمایید
      من متغیر رو به صورت زیر تعریف کردم
      کد:
      char *pch
      و این دستور رو هم نوشتم
      کد:
      pch = strstr(rx_buffer,"+CMTI:");
      حالا pch چی رو بر میگردونه؟ آدرسی که توش کاراکتر + ذخیره شده؟
      چطور باید بفهمم که +CMTI: دریافت شده یا نه؟
      ممنون
      [آموزشی] کنترل رله با پیامک توسط sim800l
      [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
      [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
      [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
      صفحه اینستاگرام : ecdco_ir

      دیدگاه


        #4
        پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

        محتویات(آدرس) مورد نظر در متغیر pch کپی میشه. دقت کنید که به صورت اشاره گر تعریف شده در نتیجه ادرس ذخیره شده و با توجه به مثال به راحتی میشه در ادرس ذخیره شده دیتای جدید هم ثبت کرد.
        جدیدترین ویرایش توسط سوران آراسته; ۰۰:۵۹ ۱۳۹۵/۰۹/۰۱.
        چرا ناراحتی پاتریک!
        + امروز ی بچه دیدم سرچهارراه گل میفروخت
        - از دیدنش ناراحت شدی؟
        + نه
        پس چی ناراحتت کرده
        + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
        ------------------------------------------------------------------------------------------------------
        تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
        ------------------------------------------------------------------------------------------------------
        محصولات

        دیدگاه


          #5
          پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

          Pch یک آرایه هستش؟ یا فقط یه آدرس رو تو خودش نگهداری میکنه که اون هم باید آدرس کاراکتر اول (+) باشه؟
          [آموزشی] کنترل رله با پیامک توسط sim800l
          [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
          [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
          [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
          صفحه اینستاگرام : ecdco_ir

          دیدگاه


            #6
            پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

            نوشته اصلی توسط reza0506 نمایش پست ها
            Pch یک آرایه هستش؟ یا فقط یه آدرس رو تو خودش نگهداری میکنه که اون هم باید آدرس کاراکتر اول (+) باشه؟
            متغیر از نوع اشاره گر هست که اشاره به آدرس اولین کاراکتر از کلمه ای که در رشته سرچ کردید داره!
            اگه میخواید یه کلمه خاص رو فقط از یه شماره خاص بگیرید کافیه که این کار رو بکنید:
            اول کلمه CMTI+ رو سرچ کنید اگه جواب غیر از 0 بود شماره مورد نظرتون رو سرچ کنید و اگه باز هم جواب غیر 0 بود کلمه مورد نظرتون رو سرچ کنید و اگه جواب تمام اینها غیر از 0 بود یعنی اینکه شما دستور درست از شماره مورد نظر خودتون دریافت کردید
            موفق باشی

            دیدگاه


              #7
              پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

              بله همین به ذهنم رسیده بود منتها مشکلم اینجاست که اگر اولین کاراکتر(+) تو خونه صفر باشه مقدار pch صفر نمیشه؟
              [آموزشی] کنترل رله با پیامک توسط sim800l
              [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
              [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
              [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
              صفحه اینستاگرام : ecdco_ir

              دیدگاه


                #8
                پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

                نوشته اصلی توسط M3R-E نمایش پست ها
                متغیر از نوع اشاره گر هست که اشاره به آدرس اولین کاراکتر از کلمه ای که در رشته سرچ کردید داره!
                اگه میخواید یه کلمه خاص رو فقط از یه شماره خاص بگیرید کافیه که این کار رو بکنید:
                اول کلمه CMTI+ رو سرچ کنید اگه جواب غیر از 0 بود شماره مورد نظرتون رو سرچ کنید و اگه باز هم جواب غیر 0 بود کلمه مورد نظرتون رو سرچ کنید و اگه جواب تمام اینها غیر از 0 بود یعنی اینکه شما دستور درست از شماره مورد نظر خودتون دریافت کردید
                موفق باشی
                خیلی ممنون تونستم راش بندازم اما چون تو چند جای برنامه ازش استفاده کردم،فقط برای اولین بار جواب میده و برای بقیه درست عمل نمیکنه
                کد:
                check:
                    for ( i=0 ; i<=2 ; i++)
                        {
                        putchar(at[i]);
                        }
                        
                        delay_ms(3000);
                        
                        pch=strstr(rx_buffer,"OK");   
                        if(pch==0) goto check;
                        PORTB.1=0;
                اینم قسمتی از حلقه while
                کد:
                pch=0;
                while (1) {
                
                      //waiting for +CMTI: from sim900
                      while(pch==0) {
                      pch=strstr(rx_buffer,"+CMTI");   
                      }
                قبلآ که از کد اولی استفاده نمیکردم بعد از دستور +CMTI: از حلقه بیرون میومد اما الان دیگه بیرون نمیاد البته تو کد اولی OK رو که میزنم درست عمل میکنه
                مقدار pch رو هم قبل while هم بدون مقدار دهی مجدد هم با pch=0 هم با * pch=0 امتحان کردم که تو حالت pch=0 اصلآ از حلقه خارج نمیشه و تو دو حالت دیگه بدون اینکه دستور +CMTI: رو بفرستم از حلقه خارج میشه
                لطفآ راهنمایی کنید
                خیلی ممنون
                [آموزشی] کنترل رله با پیامک توسط sim800l
                [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
                [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
                [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
                صفحه اینستاگرام : ecdco_ir

                دیدگاه


                  #9
                  پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

                  نوشته اصلی توسط reza0506 نمایش پست ها
                  خیلی ممنون تونستم راش بندازم اما چون تو چند جای برنامه ازش استفاده کردم،فقط برای اولین بار جواب میده و برای بقیه درست عمل نمیکنه
                  کد:
                  check:
                      for ( i=0 ; i<=2 ; i++)
                          {
                          putchar(at[i]);
                          }
                          
                          delay_ms(3000);
                          
                          pch=strstr(rx_buffer,"OK");   
                          if(pch==0) goto check;
                          PORTB.1=0;
                  اینم قسمتی از حلقه while
                  کد:
                  pch=0;
                  while (1) {
                  
                        //waiting for +CMTI: from sim900
                        while(pch==0) {
                        pch=strstr(rx_buffer,"+CMTI");   
                        }
                  قبلآ که از کد اولی استفاده نمیکردم بعد از دستور +CMTI: از حلقه بیرون میومد اما الان دیگه بیرون نمیاد البته تو کد اولی OK رو که میزنم درست عمل میکنه
                  مقدار pch رو هم قبل while هم بدون مقدار دهی مجدد هم با pch=0 هم با * pch=0 امتحان کردم که تو حالت pch=0 اصلآ از حلقه خارج نمیشه و تو دو حالت دیگه بدون اینکه دستور +CMTI: رو بفرستم از حلقه خارج میشه
                  لطفآ راهنمایی کنید
                  خیلی ممنون

                  سلام
                  تو حلقه while هم یه تاخیر حدود 200 میلی ثانیه ایی بزارید ببینید درست نمیشه!
                  چون ممکنه usart در حال دریافت باشه و هنوز متن کامل دریافت نشده و شما دارید واسه CMTI+ سرچ میکنید.
                  در ضمن من با کدویژن کار نمیکنم ولی فک کنم وقتی شما از rx_buffer میخونید کامل برابر 0 بشه!

                  دیدگاه


                    #10
                    پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

                    نوشته اصلی توسط M3R-E نمایش پست ها
                    سلام
                    تو حلقه while هم یه تاخیر حدود 200 میلی ثانیه ایی بزارید ببینید درست نمیشه!
                    چون ممکنه usart در حال دریافت باشه و هنوز متن کامل دریافت نشده و شما دارید واسه CMTI+ سرچ میکنید.
                    در ضمن من با کدویژن کار نمیکنم ولی فک کنم وقتی شما از rx_buffer میخونید کامل برابر 0 بشه!
                    سلام مجدد
                    این کد قسمت مورد نظرهستش
                    راستش الان فهمیدم این مشکل بخاطر صفر کردن بافر دریافت هستش
                    اما دلیلش رو نمیدونم،اینو مطمئنم بعد از دستور صفر کردن بافر rx_buffer من دستور جدید میفرستم اما باز هم اجرا نمیشه
                    به هر حال وقتی این قسمت کد رو بر میدارم مشکل حل میشه،اما نباید برش دارم شاید اینجا مشکلی نباشه اما جاهای دیگه هم استفاده شده و نباید حذفش کرد
                    لطفآ راهنمایی کنید
                    کد:
                    check:
                        for ( i=0 ; i<=2 ; i++)
                            {
                            putchar(at[i]);
                            }
                            
                            delay_ms(3000);
                            
                            pch=strstr(rx_buffer,"OK");   
                            if(pch==0) goto check;
                            PORTB.1=0;
                            
                    #asm("sei")
                    // text mode sms
                    for ( i=0 ; i<=9 ; i++)
                    {
                    putchar(text_mode[i]);
                    }
                    delay_ms(2000);
                    [COLOR=#ff0000]// delete receive buffer
                    for(i=0;i<=128;i++) {
                    rx_buffer[i]=0;
                    }    [/COLOR]
                    pch=0;
                    while (1) {
                    
                          //waiting for +CMTI: from sim900
                          while(pch==0) {
                          pch=strstr(rx_buffer,"+CMTI:");   
                          }
                          pch=0;
                    [آموزشی] کنترل رله با پیامک توسط sim800l
                    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
                    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
                    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
                    صفحه اینستاگرام : ecdco_ir

                    دیدگاه


                      #11
                      پاسخ : راهنمایی کوچک برنامه نویسی c برای sim900

                      باسلام دوستان با یه راه اندازsim900
                      و اتمگا16وuln2003 میخوام سرعت یه
                      استپر موتور شش سیمه رو تغییر بدم
                      برنامشو تو محیط کدویژن میخوام
                      اجرا کنم.راستش برا نوشتن برنامش
                      مشکل دارم.کسی میتونه کمکم کنه؟

                      دیدگاه

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