اطلاعیه

Collapse
No announcement yet.

درخواست یک راهنمایی در مورد خواندن پیام در sim800

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

    درخواست یک راهنمایی در مورد خواندن پیام در sim800

    سلام خدمت همه ی دوستان .
    میدونم که عنوان تاپیک به شدت تکراریه ولی هر چه قدر توی تاپیک های دگ و وبسایت ها سرچ کردم به نتیجه نرسیدم.
    من با زبون سی و کد ویژن کار میکنم.
    sms را به صورت زیر از ماژول دریافت میکنم. اما میخوام بدونم چطوری باید شماره و تاریخ و متن sms را از این کد جدا کنم.

    +CMGR: "REC READ","+989********","","16/11/27,19:05:13+14"
    sms txt

    ok
    الان میخوام قسمت های مختلف رو جدا کنم .
    ممنون میشم راهنمایی کنید.
    اگه تاپیکی هم در این مورد دیدید ممنون میشم معرفی کنید.

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

    یه نگاهی به این تاپیک بنداز
    سلام با توجه به اینکه هر روز در سطح انجمن سوالات و تاپیک های زیادی در رابطه با نحوه برقراری ارتباط با ماژول های Simcom علل خصوص Sim900 و تولید جدید اون یعنی Sim800 را شاهد هستیم، برآن شدم تا در یک تاپیک جامع در مورد نکات لازم جهت راه اندازی و استفاده از ماژول Sim800 در یک مدار مبتنی بر میکروکنترلر توضیحاتی را در حد سواد خودم


    الان عجله دارم باید برم . وقت نکردم تاپیک رو بررسی کنم. اگه کارت راه نیوفتاد رسیدم شب برات یه نمونه کد میذارم

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    یه نگاهی انداختم جواب بصورت دقیق توی این پست هست
    همون چیزی که میخوای
    http://www.eca.ir/forums/thread73912.html#post639562

    موفق باشید

    دیدگاه


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

      نوشته اصلی توسط اشکان غفارزاده نمایش پست ها
      یه نگاهی به این تاپیک بنداز
      سلام با توجه به اینکه هر روز در سطح انجمن سوالات و تاپیک های زیادی در رابطه با نحوه برقراری ارتباط با ماژول های Simcom علل خصوص Sim900 و تولید جدید اون یعنی Sim800 را شاهد هستیم، برآن شدم تا در یک تاپیک جامع در مورد نکات لازم جهت راه اندازی و استفاده از ماژول Sim800 در یک مدار مبتنی بر میکروکنترلر توضیحاتی را در حد سواد خودم


      الان عجله دارم باید برم . وقت نکردم تاپیک رو بررسی کنم. اگه کارت راه نیوفتاد رسیدم شب برات یه نمونه کد میذارم

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      یه نگاهی انداختم جواب بصورت دقیق توی این پست هست
      همون چیزی که میخوای
      سلام با توجه به اینکه هر روز در سطح انجمن سوالات و تاپیک های زیادی در رابطه با نحوه برقراری ارتباط با ماژول های Simcom علل خصوص Sim900 و تولید جدید اون یعنی Sim800 را شاهد هستیم، برآن شدم تا در یک تاپیک جامع در مورد نکات لازم جهت راه اندازی و استفاده از ماژول Sim800 در یک مدار مبتنی بر میکروکنترلر توضیحاتی را در حد سواد خودم


      موفق باشید
      عالی بود ولی من یکم باهاش مشکل دارم.
      یک برنامه نوشتم که اگه متن on را sms کردم یکی از پایه های میکرو روشن بشه، و اگه off را فرستادم اون پایه خاموش بشه. (PORTC.5)
      من برای اینکه لحظه شروع کار میکرو را بدونم خودم توی برنامه قبل از ارسال اطلاعات به ماژول یک پالس روی این پایه (PORTC.5) میدم.

      ولی مشکل اینجاست که وقتی SMS میفرستم پایه (PORTC.5) یک پالس میده!! در صورتی که من توی شرطم گفتم فقط روشن بشه!!
      میکرو اصلا متن SMS را تشخیص نمیده چون هر اس ام اسی که بفرستم همین وضعیت را داره.
      در واقع وقتی SMS میاد انگار میکرو ریست میشه و یک پالس روی (PORTC.5) میده.
      اینم کد پروژه (ببخشید یکم ریخته بهمه)
      #include <mega8.h>
      [HASHTAG="t15999"]include[/HASHTAG] <delay.h>
      [HASHTAG="t15999"]include[/HASHTAG] <stdio.h>
      [HASHTAG="t15999"]include[/HASHTAG] <string.h>
      [HASHTAG="t15999"]include[/HASHTAG] <stdlib.h>
      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      //******** Varisbles ********
      char sms_txt[10],buff[10];
      char operator_name[10];
      char number_txt[14];
      char number[12]={"093828*****"};
      volatile char buffer[100];
      volatile int count = 0;
      //*****END Varisbles*********

      //******** Constants ********
      flash unsigned char DEL_ALL[19]={'A','T','+','C','M','G','D','A','=','"','D','E','L',' ','A','L','L','"'};
      [HASHTAG="t25971"]define[/HASHTAG] ENT 13
      [HASHTAG="t25971"]define[/HASHTAG] J_COT 34
      [HASHTAG="t25971"]define[/HASHTAG] LINE_FEED 10
      [HASHTAG="t25971"]define[/HASHTAG] ctrl_z 0x1a
      //*****END Constants*********

      //******** Functions ********
      void UsartConfig(void);
      void ATCMGR_send(void)
      {
      int count2 = 0,count_s = 0; //count_s for count the "
      for(count = 0;buffer[count]!='\0';count ++){buffer[count] ='\0';}
      //lcd_putsf("CMGR ");
      printf("AT+CMGR=1%c",ENT);
      for(count=0;(buffer[count-2]!='O' && buffer[count]!=ENT);count ++) buffer[count]=getchar();
      //lcd_putsf("--> OK");
      delay_ms(1000);
      //lcd_clear();

      for(count=0,count2=0,count_s=0;buffer[count]!='\0';count ++)
      {
      if(buffer[count]==J_COT) count_s ++;
      if(count_s == 3)
      {
      if(buffer[count]!= J_COT)
      {number_txt[count2]=buffer[count];count2++;}
      }
      if(count_s== 4) count2 = 0;
      if(count_s== 8)
      {
      if(buffer[count]!= J_COT && buffer[count]!=ENT && buffer[count]!=LINE_FEED && buffer[count]!= 'O' && buffer[count]!='K')
      {sms_txt[count2]=buffer[count];count2 ++;}
      }
      }
      //delay_ms(1000);
      //lcd_clear();
      //lcd_puts(number_txt);
      //lcd_gotoxy(0,1);
      //lcd_puts(sms_txt);
      //delay_ms(1000);
      }

      void ATCMGDA_send(void)
      {for(count=0;DEL_ALL[count]!='\0';count++) putchar(DEL_ALL[count]);putchar(ENT);
      for(count=0;buffer[count-2]!='O';count ++) buffer[count]=getchar(); }
      void gsm_init()
      {
      printf("AT%c",ENT);delay_ms(20);
      printf("AT+CMGF=1%c",ENT);delay_ms(20);
      }
      //******END Functions********

      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      void main(void)
      {
      DDRC=0XFF;

      UsartConfig();

      delay_ms(5000);
      PORTC.5=1;
      delay_ms(500);
      PORTC.5=0;

      gsm_init();
      ATCMGDA_send();
      while (1)
      {
      ATCMGR_send();
      strcpy(buff,sms_txt);
      if(strcmp(buff,"on")){PORTC.5=1;}
      if(strstrf(buff,"on")){PORTC.5=1;}

      if(strstrf(buff,"off")){PORTC.5=0;}
      if(strcmp(buff,"off")){PORTC.5=0;}
      }
      }





      void UsartConfig(void)
      {
      // USART initialization
      // Communication Parameters: 8 Data, 1 Stop, No Parity
      // USART Receiver: On
      // USART Transmitter: On
      // USART Mode: Asynchronous
      // USART Baud Rate: 9600
      //UCSRA=0x00;
      //UCSRB=0x18;
      //UCSRC=0x06;
      //UBRRH=0x00;
      //UBRRL=0x47;

      //UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
      //UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
      //UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
      //UBRRH=0x00;
      //UBRRL=0x33;

      UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
      UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
      UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
      UBRRH=0x00;
      UBRRL=0xCF; //2400 8MHz
      }//UsartConfig
      جدیدترین ویرایش توسط hosseinghaheri; ۰۹:۴۴ ۱۴۰۲/۱۱/۱۱.

      دیدگاه


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

        صد در صد جریان میارید که این اتفاق میوفته. موقعی که ماژول با شبکه gms دیتا رد و بدل میکنه (ارسال و دریافت پیام یا تما یا اینترنت) جریانی حدود آمپر از منبع میکشه که اگر منبع توانایی این جریان دهی و نداشته باشه افت ولتاژ پیش میاد که در پی افت ولتاژ میکرو ریست میشه

        برای بررسی این مورد شما باید اون پین چکی که اول برنامه گذاشتید و بغیر از پایه خروجی که در برنامه استفاده میکنید قرار بدید. منظورم اول برنامه به جای PORTC.5 یکپین دیگر قرار بدید و داخل برنامه همون PORTC.5 بمونه.
        اگر میکرو ریست بشه پایه جدید که قرار دادید پالس میده که به معنی مشکل در قسمت تغذیه هست وباید تغدیه با یک منبع مناسب جایگزین بشه.

        دیدگاه


          #5
          پاسخ : درخواست یک راهنمایی در مورد خواندن پیام در sim800

          نوشته اصلی توسط اشکان غفارزاده نمایش پست ها
          صد در صد جریان میارید که این اتفاق میوفته. موقعی که ماژول با شبکه gms دیتا رد و بدل میکنه (ارسال و دریافت پیام یا تما یا اینترنت) جریانی حدود آمپر از منبع میکشه که اگر منبع توانایی این جریان دهی و نداشته باشه افت ولتاژ پیش میاد که در پی افت ولتاژ میکرو ریست میشه

          برای بررسی این مورد شما باید اون پین چکی که اول برنامه گذاشتید و بغیر از پایه خروجی که در برنامه استفاده میکنید قرار بدید. منظورم اول برنامه به جای PORTC.5 یکپین دیگر قرار بدید و داخل برنامه همون PORTC.5 بمونه.
          اگر میکرو ریست بشه پایه جدید که قرار دادید پالس میده که به معنی مشکل در قسمت تغذیه هست وباید تغدیه با یک منبع مناسب جایگزین بشه.
          سلام.
          مشکل از منبع نبود! یکم بهش ور رفتم درست شد و الان جواب میده و واقعا ازتون بابت معرفی این تاپیک ممنونم.

          ولی یه مشکل کوچیک دارم!
          من میخوام یک شماره را توی حافظه ایپرام ذخیره کنم و اگه از اون شماره پیام اومد بخونمش!
          متغییر شماره به صورت زیر تعریف کردم
          کد:
          eeprom char admin_num[14]={"+98********"};
          ولی برای چک کردن شماره پیام دریافتی با شماره ای که توی این متغییر ذخیره شده مشکل دارم.
          از تابع strstr استفاده کردم ولی ظاهرا مقادیر eeprom را قبول نمیکنه.
          ممنون میشم راهنمایی کنید.

          دیدگاه


            #6
            پاسخ : درخواست یک راهنمایی در مورد خواندن پیام در sim800

            نوشته اصلی توسط hosseinghaheri نمایش پست ها
            ولی برای چک کردن شماره پیام دریافتی با شماره ای که توی این متغییر ذخیره شده مشکل دارم.
            از تابع strstr استفاده کردم ولی ظاهرا مقادیر eeprom را قبول نمیکنه.
            ممنون میشم راهنمایی کنید.
            خب یه آرایه کاراکتری دیگه با همون ابعاد توی رم تعریف کنید. قبل از مقایسه با تابع strstr ، شماره موبایل رو از متغییر ایپیرام خونده و اون رو توی آرایه ی جدید که توی رم تعریف کردید بریزید و سپس این آرایه رو به تابع بدید

            دیدگاه


              #7
              پاسخ : درخواست یک راهنمایی در مورد خواندن پیام در sim800

              خودمم همین نظرو داشتم تستشم کردم جواب داد ولی یکی منطقی به نظر نمیرسه

              دیدگاه


                #8
                پاسخ : درخواست یک راهنمایی در مورد خواندن پیام در sim800

                نوشته اصلی توسط hosseinghaheri نمایش پست ها
                خودمم همین نظرو داشتم تستشم کردم جواب داد ولی یکی منطقی به نظر نمیرسه
                الان به ذهنم رسید. برای ذخیره شماره نیازی به اییرام ندارید. چون شماره ها قرار نیست تغییری در حین برنامه داشته یاشد بهتر است توی حافظه فلش یا رم تعریف شود

                دیدگاه


                  #9
                  پاسخ : درخواست یک راهنمایی در مورد خواندن پیام در sim800

                  نوشته اصلی توسط اشکان غفارزاده نمایش پست ها
                  الان به ذهنم رسید. برای ذخیره شماره نیازی به اییرام ندارید. چون شماره ها قرار نیست تغییری در حین برنامه داشته یاشد بهتر است توی حافظه فلش یا رم تعریف شود
                  شما درست میگید ولی من یک قابلیت گذاشتم که کاربر یتونه شماره مجازه را عوض کنه و اگه متغییر توی فلش یا رم باشه بعد از خاموش روشن شدن مقدارش ریست میشه.

                  دیدگاه

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