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





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









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









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





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

صفحه 1 از 15 1234567891011 ... آخرین
نمایش نتایج: از 1 به 10 از 147
  1. #1
    2014/03/08
    بابلسر
    884
    343

    [آموزشی] کنترل رله با پیامک توسط sim800l

    سلام برنامه زیر رو به کمک کدویزارد کدویژن برای کنترل رله توسط پیامک نوشتم. میکروی استفاده شده atmega16 هستش. portb.0 به رله متصل هست و با ارسال on# فعال و off# غیر فعال میشه. portb.1 رو هم گذاشتم برای وضعیت که به صورت پیشفرض روشنه و در صورت برقرار شدن ارتباط میکرو با sim800 خاموش میشه. از کریستال خارجی 16 مگاهرتز برای اسیلاتور استفاده شده. میکرو بعد روشن شدن پیامک sim 800 was turned on به شماره ای که از قبل تعیین شده میفرسته.
    اطلاعات بیشتر رو انشاالله در پست های بعدی میگم.

    به این نکته توجه کنید که بعد روشن شدن مدار باید یه 30 ثانیه ای صبر کنید،بعد پیام بفرستید.این عمل فقط برای اولین بار بعد روشن شدن ماژول باید رعایت بشه و بعد اون محدودیتی برای ارسال پیامک وجود نداره.

    آپدیت: 96/08/13

    کد:
    #include <mega32a.h>
    #include <delay.h>
    #include <string.h>
    
    char c=0;
    char i=0;
    char * pch;
    char a;
    char ctrlz=0x1A;
    
    char at[]={"AT\r"};
    char ATE0[]={"ATE0\r"};
    char text_mode[]={"AT+CMGF=1\r"};
    char cpbs[]={"AT+CPBS=\"ME\"\r"};
    char csmp[]={"AT+CSMP=17,167,0,0\r"};
    char cpms[]={"AT+CPMS=\"ME\",\"ME\",\"ME\"\r"};
    char cnmi[]={"AT+CNMI=2,1,0,0,0\r"};
    char gsm[]={"AT+CSCS=\"GSM\"\r"};
    char save_on_sim[]={"AT+CSAS=0\r"};
    char ATW[]={"AT&W\r"};
    char send_sms[]={"AT+CMGS=\"+98911213----\"\r"};
    char sms_ok[]={"sim800 was turned on"};
    char cmgda[]= {"AT+CMGDA=\"DEL ALL\"\r"};
    char cmgr[]={"AT+CMGR="};
    
    #define DATA_REGISTER_EMPTY (1<<UDRE)
    #define RX_COMPLETE (1<<RXC)
    #define FRAMING_ERROR (1<<FE)
    #define PARITY_ERROR (1<<UPE)
    #define DATA_OVERRUN (1<<DOR)
    
    // USART Receiver buffer
    #define RX_BUFFER_SIZE 128
    char rx_buffer[RX_BUFFER_SIZE];
    
    #if RX_BUFFER_SIZE <= 256
    unsigned char rx_wr_index=0,rx_rd_index=0;
    #else
    unsigned int rx_wr_index=0,rx_rd_index=0;
    #endif
    
    #if RX_BUFFER_SIZE < 256
    unsigned char rx_counter=0;
    #else
    unsigned int rx_counter=0;
    #endif
    
    // This flag is set on USART Receiver buffer overflow
    bit rx_buffer_overflow;
    
    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
       {
       rx_buffer[rx_wr_index++]=data;
    #if RX_BUFFER_SIZE == 256
       // special case for receiver buffer size=256
       if (++rx_counter == 0) rx_buffer_overflow=1;
    #else
       if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
       if (++rx_counter == RX_BUFFER_SIZE)
          {
          rx_counter=0;
          rx_buffer_overflow=1;
          }
    #endif
       }
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
    char data;
    while (rx_counter==0);
    data=rx_buffer[rx_rd_index++];
    #if RX_BUFFER_SIZE != 256
    if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
    #endif
    #asm("cli")
    --rx_counter;
    #asm("sei")
    return data;
    }
    #pragma used-
    #endif
    
    // USART Transmitter buffer
    #define TX_BUFFER_SIZE 24
    char tx_buffer[TX_BUFFER_SIZE];
    
    #if TX_BUFFER_SIZE <= 256
    unsigned char tx_wr_index=0,tx_rd_index=0;
    #else
    unsigned int tx_wr_index=0,tx_rd_index=0;
    #endif
    
    #if TX_BUFFER_SIZE < 256
    unsigned char tx_counter=0;
    #else
    unsigned int tx_counter=0;
    #endif
    
    // USART Transmitter interrupt service routine
    interrupt [USART_TXC] void usart_tx_isr(void)
    {
    if (tx_counter)
       {
       --tx_counter;
       UDR=tx_buffer[tx_rd_index++];
    #if TX_BUFFER_SIZE != 256
       if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
    #endif
       }
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Write a character to the USART Transmitter buffer
    #define _ALTERNATE_PUTCHAR_
    #pragma used+
    void putchar(char c)
    {
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
       {
       tx_buffer[tx_wr_index++]=c;
    #if TX_BUFFER_SIZE != 256
       if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
    #endif
       ++tx_counter;
       }
    else
       UDR=c;
    #asm("sei")
    }
    #pragma used-
    #endif
    
    // Standard Input/Output functions
    #include <stdio.h>
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
    DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
    // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=P Bit0=P 
    PORTA=(1<<PORTA7) | (1<<PORTA6) | (1<<PORTA5) | (1<<PORTA4) | (1<<PORTA3) | (1<<PORTA2) | (1<<PORTA1) | (1<<PORTA0);
    
    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out 
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (1<<DDB0);
    // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=0 Bit0=0 
    PORTB=(1<<PORTB7) | (1<<PORTB6) | (1<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (0<<PORTB0);
    
    // Port C initialization
    // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=In Bit2=Out Bit1=Out Bit0=Out 
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=P Bit2=0 Bit1=0 Bit0=0 
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (1<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
    
    // Port D initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=In 
    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (1<<DDD1) | (0<<DDD0);
    // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=0 Bit0=T 
    PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
    
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
    UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (0<<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=0x67;
    
    //analogue comparator power off to reduce power consumption
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    SFIOR=(0<<ACME);
    
    
    
    
    
    
    //wait for initiallizing sim800
    delay_ms(10000);
    
    UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    //checking serial connection
    check:
      for ( i=0 ; i<=2 ; i++)
            {
            putchar(at[i]);
            }
            
            delay_ms(1000);
            
            pch=strstr(rx_buffer,"OK");   
            if(pch==NULL) goto check;
            PORTB.1=0;
            delay_ms(1000);
         
            
    //echo off
    for ( i=0 ; i<=4 ; i++)
            {
            putchar(ATE0[i]);
            }
            delay_ms(1000);
            
    #asm("cli")
    // delete receive buffer
    for(i=0;i<=128;i++) {
    rx_buffer[i]=0;
    }
    #asm("sei")   
    // Global enable interrupts         
    #asm("sei")
            pch=NULL;
            rx_wr_index=0;
    // text mode sms
    for ( i=0 ; i<=9 ; i++)
    {
    putchar(text_mode[i]);
    }
            //checking ok
            while(pch==NULL) {
            pch=strstr(rx_buffer,"OK");   
            } 
            
    
    //"ME"    
    for ( i=0 ; i<=12 ; i++)
        {
        putchar(cpbs[i]);
        }
        delay_ms(500);
    
    //17,167,0,0        
    for ( i=0 ; i<=18 ; i++)
            {
            putchar(csmp[i]);
            }
            delay_ms(500); 
            
    //"ME","ME","ME"        
    for ( i=0 ; i<=22 ; i++)
            {
            putchar(cpms[i]);
            }
            delay_ms(500); 
            
    //2,1,0,0,0        
    for ( i=0 ; i<=17 ; i++)
            {
            putchar(cnmi[i]);
            }
            delay_ms(500);
            
    //gsm        
    for ( i=0 ; i<=13 ; i++)
            {
            putchar(gsm[i]);
            }
            delay_ms(500);        
    
    //save_on_sim        
    for ( i=0 ; i<=9 ; i++)
            {
            putchar(save_on_sim[i]);
            }
            delay_ms(1000);
             
    //save all setting        
    for ( i=0 ; i<=4 ; i++)
            {
            putchar(ATW[i]);
            }
            delay_ms(1500);
            
    #asm("cli")        
    // delete receive buffer
    for(i=0;i<=128;i++) {
    rx_buffer[i]=0;
    }
    #asm("sei")
    //send turning on sms
    for ( i=0 ; i<=23 ; i++)
    {
    putchar(send_sms[i]);
    }
    delay_ms(1000);
    for ( i=0 ; i<=19 ; i++)
    {
    putchar(sms_ok[i]);
    }
    putchar('\r');
    putchar(ctrlz);
    delay_ms(1000);
    
    #asm("cli")
    // delete receive buffer
    for(i=0;i<=128;i++) {
    rx_buffer[i]=0;
    }
    #asm("sei")    
    pch=NULL;
    rx_wr_index=0;
    a=0;
    
    //delete all messege   
          for ( i=0 ; i<=18 ; i++)
            {
            putchar(cmgda[i]);
            }
            delay_ms(5000);
            i=0;
    while (1) {
    
            rx_wr_index=0;
            
            if(c == 1) {
            if(a>=52){  //if a>='4'
        c=0;
           //delete all messege   
          for ( i=0 ; i<=18 ; i++)
            {
            putchar(cmgda[i]);
            }
            i=0;
            delay_ms(10000);
            } 
            }
            
            pch=NULL;
            rx_wr_index=0;
          //waiting for +CMTI: from sim800
          while(pch==NULL) {
          pch=strstr(rx_buffer,"+CMTI:");   
          } 
          delay_ms(1000);     
          
          //show messege request
          for ( i=0 ; i<=7 ; i++)
            {
            putchar(cmgr[i]);
            }
            putchar(pch[12]);
            if(pch[13]>47 && pch[13]<58){
            putchar(pch[13]);
            c=1;
            }
            putchar('\r');
            a=pch[12];
            
            pch=NULL;
            rx_wr_index=0;
            
            delay_ms(1500);
          
                    
             //checking on
             pch=strstr(rx_buffer,"#on");
             if(pch != NULL){
             PORTB.0=1;
             pch=NULL;
             rx_wr_index=0;
             }
             //checking off
             pch=strstr(rx_buffer,"#off");
             if(pch != NULL) {
             PORTB.0=0;
             pch=NULL;
             rx_wr_index=0;
             }
             
           #asm("cli") 
           // delete receive buffer
           for(i=0;i<=128;i++) {
           rx_buffer[i]=0;
           }
           pch=NULL;
           #asm("sei")      
              
    }
    }
    اینم لینک برنامه کدویژن(آپدیت شده)

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

    عضویت

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

    عضویت

    اینم فیلم عملکرد مدار

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

    عضویت



    اینم عکس ماژول

    الّلهُمَّ صَلِّ عَلی مُحَمَّد وَآلِ مُحَمَّد وَعَجِّل فَرَجَهُم
    ویرایش توسط سید رضا باباتبار : 2017/11/04 در ساعت 17:18
  2. #2
    2014/03/08
    بابلسر
    884
    343

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    اینم شماتیک قسمت sim800


    الّلهُمَّ صَلِّ عَلی مُحَمَّد وَآلِ مُحَمَّد وَعَجِّل فَرَجَهُم
    ویرایش توسط سید رضا باباتبار : 2017/07/08 در ساعت 12:24
  3. #3
    2014/03/08
    بابلسر
    884
    343

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    توضیحات برنامه:
    آپدیت: 96/08/17

    ابتدا تنظیمات کد ویزارد رو به صورت زیر انجام میدیم:


    سپس در برنامه اصلی هدر string رو اضافه میکنیم به همراه متغیر های مورد نیاز که جلوتر توضیح داده خواهند شد:
    کد:
    #include <mega32a.h>
    #include <delay.h>
    #include <string.h>
    
    char c=0;
    char i=0;
    char * pch;
    char a;
    char ctrlz=0x1A;
    
    char at[]={"AT\r"};
    char ATE0[]={"ATE0\r"};
    char text_mode[]={"AT+CMGF=1\r"};
    char cpbs[]={"AT+CPBS=\"ME\"\r"};
    char csmp[]={"AT+CSMP=17,167,0,0\r"};
    char cpms[]={"AT+CPMS=\"ME\",\"ME\",\"ME\"\r"};
    char cnmi[]={"AT+CNMI=2,1,0,0,0\r"};
    char gsm[]={"AT+CSCS=\"GSM\"\r"};
    char save_on_sim[]={"AT+CSAS=0\r"};
    char ATW[]={"AT&W\r"};
    char send_sms[]={"AT+CMGS=\"+98911213----\"\r"};
    char sms_ok[]={"sim800 was turned on"};
    char cmgda[]= {"AT+CMGDA=\"DEL ALL\"\r"};
    char cmgr[]={"AT+CMGR="};
    به کد های تولید شده کدویزارد دست نمیزنیم،به جز خط زیر که مربوط به یوزارته:
    کد:
    UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    در این کد RXEN رو صفر میکنیم
    سپس قبل حلقه while یه تاخیر 10 ثانیه ای قرار میدیم برای اینکه sim800 شبکه رو پیدا کنه(میتونید این زمان رو کمترش کنید) و سپس دوباره RXEN رو فعال میکنیم:
    کد:
    //wait for initiallizing sim900
    delay_ms(10000);
    
    UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    در کد زیر AT میفرستیم تا اینکه OK دریافت کنیم
    توجه کنید sim800 به صورت auto baudrate می باشد یعنی اگر AT براش بفرستیم خودش تشخیص میده که با چه باد ریتی براش دیتا فرستادیم و با همون بادریت برامون دیتا میفرسته که اینجا بادریت رو 9600 تنظیم کردیم
    کد:
    //checking serial connection
    check:
      for ( i=0 ; i<=2 ; i++)
            {
            putchar(at[i]);
            }
            
            delay_ms(3000);
            
            pch=strstr(rx_buffer,"OK");   
            if(pch==NULL) goto check;
            PORTB.1=0;
            delay_ms(1000);
    نکته مهم در این کد استفاده از تابع strstr می باشد.به کمک این تابع شما میتونید در بافر دریافت دیتا دنبال رشته مورد نظرتون بگردید که اگر پیدا شد مقدار اشاره گر pch عددی غیر صفر(غیر null) خواهد شد.
    جلوتر در مورد این تابع توضیح بیشتری میدم.برای اطلاعات تکمیلی میتونید لینک های زیر رو هم ببینید

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

    عضویت


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

    عضویت


    بعد از اینکه OK دریافت شد portb.1 صفر خواهد شد.

    در خط زیر echo را خاموش میکنیم تا دیتاهایی که خودمون میفرستیم رو دیگه دریافت نکنیم:
    کد:
    //echo off
    for ( i=0 ; i<=4 ; i++)
            {
            putchar(ATE0[i]);
            }
            delay_ms(2000);
    با استفاده از خط زیر بافر دریافت را پاک میکنیم
    کد:
    // delete receive buffer
    for(i=0;i<=128;i++) {
    rx_buffer[i]=0;
    }
    با استفاده از کد زیر حالت پیامک را روی text mode قرارمیدهیم(دو حالت داریم pud و textmode که باید پیامک رو روی text mode تنظیم کنیم) و منتظر میمونیم تا OK دریافت کنیم:
    کد:
    // text mode sms
    for ( i=0 ; i<=9 ; i++)
    {
    putchar(text_mode[i]);
    }
            //checking ok
            while(pch==NULL) {
            pch=strstr(rx_buffer,"OK");   
            }
    درکد زیر مشکل ارسال پیامک از ایرانسل به همراه اول برطرف شده:
    کد:
    //17,167,0,0        
    for ( i=0 ; i<=18 ; i++)
            {
            putchar(csmp[i]);
            }
            delay_ms(500);
    در کد زیر هم محل ذخیره پیام ها،خود ماژول انتخاب شده.
    توجه نمایید که چون 15 حافظه اول برای سیم کارت می باشد،در این حالت اولین پیامک با شماره 16 نمایش داده خواهد شد.
    کد:
    //"ME","ME","ME"        
    for ( i=0 ; i<=22 ; i++)
            {
            putchar(cpms[i]);
            }
            delay_ms(500);
    در کد زیر هم فرمت نمایش را انتخاب میکنیم که برای این برنامه حتماً باید به صورت زیر نمایش داده بشه:
    کد:
    +CMTI: "ME",16
    کد:
    //2,1,0,0,0        
    for ( i=0 ; i<=17 ; i++)
            {
            putchar(cnmi[i]);
            }
            delay_ms(500);
    با استفاده از کد زیر هم ماژول رو در حالت gsm قرار میدهیم:
    کد:
    //gsm        
    for ( i=0 ; i<=13 ; i++)
            {
            putchar(gsm[i]);
            }
            delay_ms(500);
    و در آخر هم با استفاده ازکد های زیر تنظیمات رو ذخیره میکنیم:
    کد:
    //save_on_sim        
    for ( i=0 ; i<=9 ; i++)
            {
            putchar(save_on_sim[i]);
            }
            delay_ms(1000);
             
    //save all setting        
    for ( i=0 ; i<=4 ; i++)
            {
            putchar(ATW[i]);
            }
            delay_ms(1500);
    با استفاده از کد زیر پیامک sim800 was turned on رو به شماره ای که از قبل تعیین کردیم میفرستیم:
    کد:
    //send turning on sms
    
    
    for ( i=0 ; i<=23 ; i++)
    {
    putchar(send_sms[i]);
    }
    delay_ms(1000);
    for ( i=0 ; i<=20 ; i++)
    {
    putchar(sms_ok[i]);
    }
    putchar('\r');
    putchar(ctrlz);
    delay_ms(1000);
    با استفاده از کد زیر پیامک های ذخیره شده در ماژول را پاک میکنیم:
    کد:
    //delete all messege   
          for ( i=0 ; i<=18 ; i++)
            {
            putchar(cmgda[i]);
            }
            i=0;
    در کد زیر میاد میبینه که اگر تعداد پیام به بیشتر از 40 رسید کل پیام های ماژول رو پاک میکنه:
    توجه کنید c موقعی یک میشه که شماره پیام دو رقمی باشه.
    کد:
    if(c == 1) {
            if(a>=52){  //if a>='4'
        c=0;
           //delete all messege   
          for ( i=0 ; i<=18 ; i++)
            {
            putchar(cmgda[i]);
            }
            i=0;
            delay_ms(10000);
            } 
            }
    فرمت رشته دریافتی در صورتی که پیام جدید بیاد به صورت زیره:
    کد:
    +CMTI: "SM",16
    که با استفاده از کد زیر منتظر دریافت پیام جدید میمونیم:
    کد:
    //waiting for +CMTI: from sim800
          while(pch==NULL) {
          pch=strstr(rx_buffer,"+CMTI:");   
          } 
          delay_ms(1000);

    در صورتی که میخواهید کارهای دیگه هم در حلقه while انجام بدید در کد بالا به جای while میتونید از if استفاده کنید و در صورتی که شرط if برقرار بود یه فلگ رو یک کنید و کد های دیگه مربوط به پیامک رو در صورت یک بودن فلگ اجرا کنید و در آخر دوباره فلگ رو صفر کنید.

    سیزدهمین کاراکتر شماره خونه ایه که پیام در اون ذخیره شده(در صورت دو رقمی بودن سیزدهمین و چهاردهمین) که یعنی pch[12] (و در صورت دو رقمی بودن [13]pch هم اضافه می شود)برابر شماره خونه پیامک دریافتی میشه
    بنابر این میایم با کد زیر پیام اون خونه رو میخونیم(درواقع همون پیام جدید)
    //show messege request
    کد:
    for ( i=0 ; i<=7 ; i++)
            {
            putchar(cmgr[i]);
            }
            putchar(pch[12]);
            if(pch[13]>47 && pch[13]<58){
            putchar(pch[13]);
            c=1;
            }
            putchar('\r');
            a=pch[12];
    با استفاده از کد زیر هم میاد بررسی میکنه که اگر on# اومد رله رو وصل و اگر off# اومد رله رو قطع میکنه
    کد:
     //checking on
             pch=strstr(rx_buffer,"#on");
             if(pch != NULL){
             PORTB.0=1;
             pch=NULL;
             rx_wr_index=0;
             }
             //checking off
             pch=strstr(rx_buffer,"#off");
             if(pch != NULL) {
             PORTB.0=0;
            pch=NULL;
             rx_wr_index=0;
             }
    الّلهُمَّ صَلِّ عَلی مُحَمَّد وَآلِ مُحَمَّد وَعَجِّل فَرَجَهُم

    ویرایش توسط سید رضا باباتبار : 2017/11/08 در ساعت 11:18
  4. #4
    2014/03/08
    بابلسر
    884
    343

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    اینم کتابخونه آلتیوم شماتیک و فوت پرینت ماژول sim800l


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

    عضویت




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

    عضویت

    ویرایش توسط سید رضا باباتبار : 2017/10/17 در ساعت 11:15
  5. #5
    2005/12/28
    تبريز
    4,211
    1,142

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    ضمن تشکر بابت آموزش خوب و واقعا کاملتون
    این تاپیک در قالب یک مقاله علمی در صفحه اول سایت به نام خودتون ثبت شد

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

    عضویت


    بابت تشکر یک کارت تخفیف ویژه خرید از فروشگاه هم براتون پیغام خصوصی میشه
    موفق باشید
  6. #6
    2008/11/08
    دزفول
    277
    128

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    با سلام
    این نوع ماژول یه مقدار بد قلق هستند و با تجربه ای که از این ماژول های قرمز دارم به طور قطع میگم که فقط با سیم کارت ایرانسل جواب میدن مگر اینکه آپدیت بشن یا دستور اصلاحی بهشون داده بشه در طول برنامه
    دستور AT+CSMP با پی فرضی که در PDF کامند ها وجود داره در این ماژول متفاوته و باعث همون مشکلی میشه که گفتم
  7. #7
    2014/03/08
    بابلسر
    884
    343

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    همونطور که میدونید این ماژول کوچکترین ماژول آماده sim800 هستش و از طرفی هم خیلی ارزونه و همینطور کم مصرف.
    بنابراین به راحتی میتوان از آن در پروژه ها استفاده کرد،حتی پروژه های صنعتی.به نظر من برای تعداد زیر 20 تا، از این ماژول آماده استفاده کنیم راحت تر و کم هزینه تر در میاد،ابعاد مدار هم کوچیک تر میشه. با توجه به اینکه خود ماژول تعداد پایه های کم داره(ولی پایه های ضروری و مورد نیاز) و dip هم هست،برای افرادی که میخوان خودشون مونتاژ رو انجام بدن بهترین گزینه هستش.
    بنابراین نباید به این ماژول به عنوان یه ماژول کم ارزش نگاه کرد،بلکه حتی میتونیم این ماژول رو بهترین ماژول آماده خانواده ی simcom بدونیم.(با توجه به فاکتور های قیمت،اندازه و توان مصرفی)
    در مورد نکته ی آقا سعید هم، درسته این ماژول یه خورده قلق داره اما آنچنان بد قلق هم نیست،فقط کافیه یه بار مشکل رو حل کنیم و برای همیشه راحتیم.
    الان ماژول پیشم نیست و دارم میرم مسافرت برای همین حدود یکی دو هفته دیگه ایشالا یه فیلم هم از عملکرد مدار با سیم کارت همراه اول میزارم.
    در آخر هم از آقای بلورچیان بابت پیگیریشون تشکر میکنم.
  8. #8
    2008/11/08
    دزفول
    277
    128

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    نقل قول نوشته اصلی توسط سید رضا باباتبار

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

    عضویت

    در مورد نکته ی آقا سعید هم، درسته این ماژول یه خورده قلق داره اما آنچنان بد قلق هم نیست،فقط کافیه یه بار مشکل رو حل کنیم و برای همیشه راحتیم.
    دقیقا درسته
    من از همین سایت هم نوع A خریدم و مونتاژ کردم و عالی و بدون دردسر با 5 تا دستور پیامک ارسال کرده
    همین رو هم فکر کنم تا الان 3 دونه تهیه کردمو استفاده کردم و آخریش رو با آردوینو راه انداختم
    برای این ماژول اون 5 دستور که گفتم میشه 6 تا
    که البته قبلا تو یه تاپیک دیگه که مشکل رو مطرح کرده بودم شخص جناب بلورچیان گفتند که با یه آپدیت حل میشه
    من آپدیت نکردم ولی باز با راهنماییمدیران انجمن (فکر کنم جناب آراسته) با همون دستوری که گفتم بدون آپدیت مشکل حل شد.
    من با ترمینال تمام پیشفرض مقدار تمام دستورات رو چک کردم و فقط مشکل ماژول همون دستوره که مقداری تو ارسال و دریافت پیامک برای ما مشکل ساز میشه وگرنه یه گزینه عالی میتونه باشه
    کاملا درسته که از لحاظ اقتصادی به صرفه ترین ماژوله
  9. #9
    2017/02/16
    17
    1

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    سلام خسته نباشی میشه در مورد پورت b.1 رو بیشتر توضیح بدید b.1 چه کار میکنه؟ ایا به سیم 800 ,وصل میشه؟؟؟
    ویرایش توسط اشکان غفارزاده : 2017/10/12 در ساعت 02:18
  10. #10
    2014/03/08
    بابلسر
    884
    343

    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    سلام
    این پین با مقاومت به یه led متصل میشه و به sim800 متصل نیست.میتونی ازش استفاده نکنی،تا موقعی که ارتباط میکرو با sim800 برقرار نشده باشه این led روشن میمونه.
صفحه 1 از 15 1234567891011 ... آخرین
نمایش نتایج: از 1 به 10 از 147

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

  1. پاسخ: 63
    آخرين نوشته: 2017/12/10, 08:54
  2. رسیدن پیامک توسط sim900
    توسط bagion در انجمن میکروکنترلرهای AVR
    پاسخ: 27
    آخرين نوشته: 2016/02/02, 17:50
  3. مشکل در دریافت پیامک توسط sim900
    توسط rezarez7 در انجمن ماژول های GPS - GSM - GPRS
    پاسخ: 6
    آخرين نوشته: 2015/09/25, 12:07
  4. کنترل دماي المنت توسط کنترل ولتاژ اوليه ترانسفورماتور
    توسط m_j_rad در انجمن ترانسفورماتورها و ماشين هاي الکتريکي
    پاسخ: 6
    آخرين نوشته: 2013/08/19, 08:01
  5. پاسخ: 1
    آخرين نوشته: 2010/06/05, 22:19

کاربرانی که این تاپیک را مشاهده کرده اند: 35

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

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

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

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

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