اطلاعیه

Collapse
No announcement yet.

دخیره داده ها درون یک آرایه

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

    دخیره داده ها درون یک آرایه

    سلام
    من یک سنسور رو به میکرو وصل کردم میخام داده ها به صورت یک آرایه ذخیره بشه درون یک آرایه
    یعنی دمای لحظه الان تو آرابه ریخته بشه چند ثانیه بعد دمای بعدی ادامه دمای الان تو آرایه دخیره بشه و بعد هم به صورت آرایه نمایش داده بشه روی lcd
    کد:
    while (1)
       {  
       
    lcd_init(20);
    lcd_clear();
    lcd_putsf("Init fat");
          
       c[ii]=read_adc(3);
       ii++;
    sprintf(text,"%u,%u",c[0],c[1]);
    الان این و چجوری کل آرایه رو نمایش بدم؟

    #2
    پاسخ : دخیره داده ها درون یک آرایه

    اینجور سوالمو میپرسم طریقه ساخت یک متغییر آرایه که ابعادش با زمان زیاد بشه و نمایشش به چه صورته؟

    دیدگاه


      #3
      پاسخ : دخیره داده ها درون یک آرایه

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

      کد:
      unsigned int arr[500],count=0;
      arr[count++]=variable;
      همین

      موفق باشید

      دیدگاه


        #4
        پاسخ : دخیره داده ها درون یک آرایه

        بخوام کل آرایه رو رشته کنم چکار کنم با دستور sprintf?
        چجوری میشه؟
        آخه انگار برای هر عضو درایه باید یک %U انگار بذارم

        دیدگاه


          #5
          پاسخ : دخیره داده ها درون یک آرایه

          نوشته اصلی توسط masror_d
          بخوام کل آرایه رو رشته کنم چکار کنم با دستور sprintf?
          چجوری میشه؟
          آخه انگار برای هر عضو درایه باید یک %U انگار بذارم
          ببین اگه یه آرایه از نوع char یا unsigned char تعریف کنی اونوقت هم میتونی عدد داخلش ذخیره کنی هم کاراکتر که اگه کاراکتر ذخیره کنی اونوقت بهش میگن رشته
          حالا اگه از نوع int یا unsigned int باشه دیگه رشته نیست بلکه آرایه هست چون فکر نکنم بشه کاراکتر داخلش ذخیره کرد

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

          تو این برنامه ولتاژ رفرنس adc هست 2.56 که به صورت درونی تنظیم شده (توکدویزارد) . یه خازن وصل کن به پایه AREF و زمین .
          نرخ سمپلینگ 125 کیلو هرتز هست


          کد:
          #include <mega32a.h>
          
          #include <delay.h>
          
          // Alphanumeric LCD functions
          #include <alcd.h>
          #include <stdio.h>
          unsigned int adc_data;
          #define ADC_VREF_TYPE 0xC0
          
          // ADC interrupt service routine
          interrupt [ADC_INT] void adc_isr(void)
          {
          // Read the AD conversion result
          adc_data=ADCW;
          }
          
          // Read the AD conversion result
          // with noise canceling
          unsigned int read_adc(unsigned char adc_input)
          {
          ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
          // Delay needed for the stabilization of the ADC input voltage
          delay_us(10);
          #asm
            in  r30,mcucr
            cbr r30,__sm_mask
            sbr r30,__se_bit | __sm_adc_noise_red
            out mcucr,r30
            sleep
            cbr r30,__se_bit
            out mcucr,r30
          #endasm
          return adc_data;
          }
          
           
          
          void main(void)
          {
           unsigned char buffer[16];
           unsigned int buffer_data[400],count=0;
          
           
          
          // ADC initialization
          // ADC Clock frequency: 125.000 kHz
          // ADC Voltage Reference: Int., cap. on AREF
          ADMUX=ADC_VREF_TYPE & 0xff;
          ADCSRA=0x8F;
           
          
          // Alphanumeric LCD initialization
          // Connections are specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTB Bit 0
          // RD - PORTB Bit 1
          // EN - PORTB Bit 2
          // D4 - PORTB Bit 4
          // D5 - PORTB Bit 5
          // D6 - PORTB Bit 6
          // D7 - PORTB Bit 7
          // Characters/line: 16
          lcd_init(16);
          
          // Global enable interrupts
          #asm("sei")
          
          while (1)
             {
               buffer_data[count++] = read_adc(3);   
               
               if ( count == 400 )
                {  
                 lcd_clear();
                 lcd_putsf(" buffer is full ");
                 while(1);
                } 
               sprintf( buffer,"value is : %u",(buffer_data[count-1] * 2.56)/(1024-1) ); 
               lcd_clear();
               lcd_puts( buffer ); 
               
               delay_ms(200); 
               
             }
          }

          دیدگاه


            #6
            پاسخ : دخیره داده ها درون یک آرایه

            سلام دوستان شرمنده که پریدم وسط بحثتون.
            ولی یک سوال در مورد ارایه ها داشتم. من با SIM900 کار میکنم .وقتی که این ماژول SMS دریافت میکنه متن اس ام اس با یه علامت های دیگه ای به میکرو میده مثلا
            کد:
            —<CR><LF><SMS><LF><CR>
            که CR و LF کد های اسکی هست.
            حالا چه طور میشه متن پیام در اورد از وسط این کدها؟
            ممنون میشم راهنمایی کنید.

            دیدگاه


              #7
              پاسخ : دخیره داده ها درون یک آرایه

              نوشته اصلی توسط rasool1370
              سلام دوستان شرمنده که پریدم وسط بحثتون.
              ولی یک سوال در مورد ارایه ها داشتم. من با SIM900 کار میکنم .وقتی که این ماژول SMS دریافت میکنه متن اس ام اس با یه علامت های دیگه ای به میکرو میده مثلا
              کد:
              —<CR><LF><SMS><LF><CR>
              که CR و LF کد های اسکی هست.
              حالا چه طور میشه متن پیام در اورد از وسط این کدها؟
              ممنون میشم راهنمایی کنید.
              خیلی ساده ارایه ذخیره شده رو در یک حلقه for قرار بده و بعد از اینکه مثلا دو تا اینتر رد شد میرسه به پیام، در این حالت دیتا ذخیره بشه تا می رسه به اخرین قسمت متن که اونم با یک اینتر و \n تموم میشه.


              چرا ناراحتی پاتریک!
              + امروز ی بچه دیدم سرچهارراه گل میفروخت
              - از دیدنش ناراحت شدی؟
              + نه
              پس چی ناراحتت کرده
              + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
              ------------------------------------------------------------------------------------------------------
              تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
              ------------------------------------------------------------------------------------------------------
              محصولات

              دیدگاه


                #8
                پاسخ : دخیره داده ها درون یک آرایه

                نوشته اصلی توسط سوران آراسته

                خیلی ساده ارایه ذخیره شده رو در یک حلقه for قرار بده و بعد از اینکه مثلا دو تا اینتر رد شد میرسه به پیام، در این حالت دیتا ذخیره بشه تا می رسه به اخرین قسمت متن که اونم با یک اینتر و \n تموم میشه.
                کدهای این کاراکتر ها چیه؟ یعنی چک کنم که اگه چه کاذاکتری بود ذخیره نشه؟

                دیدگاه


                  #9
                  پاسخ : دخیره داده ها درون یک آرایه

                  این تابع رو پیدا کردم برای خوندن sms
                  خیلی وقت پیش نوشتم ولی میتونه کمکت کنه.

                  کد:
                  //******* Read_Sms ****************
                  void Read_Sms(void)
                  {
                  
                  int count = 0,count2 = 0,count_bit = 0,count_bit2 = 0;
                  unsigned char test_data = 0;
                  char sms_buffer[6];
                  
                    //lcd_clear();
                    //lcd_puts("READ: ");
                    putchar(ENTER);
                    i_count_uart = 0; 
                    test_data = Send_Command("AT+CMGR=1");
                    if(!test_data)
                    {
                      test_data = Send_Command("AT+CMGR=1");
                      if(!test_data)
                      {
                        //lcd_puts(" Faild");
                        //f_error = 1;
                      } 
                    }
                    //lcd_puts(" OK");
                    delay_ms(1000);
                    if(test_data)
                    { 
                      for(count=0;buffer_uart[count] != '\0';count ++)
                      {
                        if(buffer_uart[count]=='"') count_bit ++;
                        if(count_bit == 8)
                        {
                           if(buffer_uart[count]== '\n' )count_bit2 ++;
                           if(count_bit2 ==1 & buffer_uart[count]!='"' & buffer_uart[count]!= ENTER & buffer_uart[count]!= '\n' & (count2 <= (DIGIT-1)))
                           {
                             sms_buffer[count2] = buffer_uart[count];
                             count2 ++;
                           }  
                        }
                      }
                    }
                    /*lcd_clear();
                    lcd_puts(sms_buffer);
                    delay_ms(5000);*/
                    if(PASSWORD[0]==sms_buffer[0] & PASSWORD[1]==sms_buffer[1] & PASSWORD[2]==sms_buffer[2] & PASSWORD[3]==sms_buffer[3] & PASSWORD[4]==sms_buffer[4])
                    {
                      count_bit = 0;
                      count2  = 0;
                      for(count=0;buffer_uart[count] != '\0';count ++)
                      {
                        if(buffer_uart[count]=='"') count_bit ++;
                        if(count_bit == 3)
                        {
                           if(buffer_uart[count]!='"')
                           {
                             buffer_Num[count2] = buffer_uart[count];
                             count2 ++;
                           }  
                        }
                      }
                      /*lcd_clear();
                      lcd_puts("PASS : OK");
                      delay_ms(5000);*/ 
                    }
                    /*lcd_clear();
                    for(count=0;count<=12;count ++)
                    {
                      lcd_putchar(buffer_Num[count]);
                      delay_ms(250);
                    }    
                    delay_ms(5000);*/
                    All_Sms_Dell();
                      
                  }//Read_Sms
                  چرا ناراحتی پاتریک!
                  + امروز ی بچه دیدم سرچهارراه گل میفروخت
                  - از دیدنش ناراحت شدی؟
                  + نه
                  پس چی ناراحتت کرده
                  + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                  ------------------------------------------------------------------------------------------------------
                  تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                  ------------------------------------------------------------------------------------------------------
                  محصولات

                  دیدگاه


                    #10
                    پاسخ : دخیره داده ها درون یک آرایه

                    نوشته اصلی توسط سوران آراسته
                    این تابع رو پیدا کردم برای خوندن sms
                    خیلی وقت پیش نوشتم ولی میتونه کمکت کنه.

                    کد:
                    //******* Read_Sms ****************
                    void Read_Sms(void)
                    {
                    
                    int count = 0,count2 = 0,count_bit = 0,count_bit2 = 0;
                    unsigned char test_data = 0;
                    char sms_buffer[6];
                    
                      //lcd_clear();
                      //lcd_puts("READ: ");
                      putchar(ENTER);
                      i_count_uart = 0; 
                      test_data = Send_Command("AT+CMGR=1");
                      if(!test_data)
                      {
                        test_data = Send_Command("AT+CMGR=1");
                        if(!test_data)
                        {
                          //lcd_puts(" Faild");
                          //f_error = 1;
                        } 
                      }
                      //lcd_puts(" OK");
                      delay_ms(1000);
                      if(test_data)
                      { 
                        for(count=0;buffer_uart[count] != '\0';count ++)
                        {
                          if(buffer_uart[count]=='"') count_bit ++;
                          if(count_bit == 8)
                          {
                             if(buffer_uart[count]== '\n' )count_bit2 ++;
                             if(count_bit2 ==1 & buffer_uart[count]!='"' & buffer_uart[count]!= ENTER & buffer_uart[count]!= '\n' & (count2 <= (DIGIT-1)))
                             {
                               sms_buffer[count2] = buffer_uart[count];
                               count2 ++;
                             }  
                          }
                        }
                      }
                      /*lcd_clear();
                      lcd_puts(sms_buffer);
                      delay_ms(5000);*/
                      if(PASSWORD[0]==sms_buffer[0] & PASSWORD[1]==sms_buffer[1] & PASSWORD[2]==sms_buffer[2] & PASSWORD[3]==sms_buffer[3] & PASSWORD[4]==sms_buffer[4])
                      {
                        count_bit = 0;
                        count2  = 0;
                        for(count=0;buffer_uart[count] != '\0';count ++)
                        {
                          if(buffer_uart[count]=='"') count_bit ++;
                          if(count_bit == 3)
                          {
                             if(buffer_uart[count]!='"')
                             {
                               buffer_Num[count2] = buffer_uart[count];
                               count2 ++;
                             }  
                          }
                        }
                        /*lcd_clear();
                        lcd_puts("PASS : OK");
                        delay_ms(5000);*/ 
                      }
                      /*lcd_clear();
                      for(count=0;count<=12;count ++)
                      {
                        lcd_putchar(buffer_Num[count]);
                        delay_ms(250);
                      }    
                      delay_ms(5000);*/
                      All_Sms_Dell();
                        
                    }//Read_Sms
                    ولی یه مشکل دیگه هم دارم.
                    الان هر دستوری بهش میدم مثل حالت اکو برمیگردونه ولی به صورت وارونه :angry: :angry:
                    چی کارش کنم.
                    تنظیمات کارخونه هم کردم نشد :cry:

                    دیدگاه


                      #11
                      پاسخ : دخیره داده ها درون یک آرایه

                      اصلا وقتی میخوام اس ام اس بخونم طول بافر ورودی وقفه UART باید چند خونه باشه 16 یا32یا...

                      دیدگاه


                        #12
                        پاسخ : دخیره داده ها درون یک آرایه

                        اینا رو ال سی دی بر میگردونه :cry2:
                        http://s6.picofile.com/file/8246518068/%DB%B2%DB%B0%DB%B1%DB%B6%DB%B0%DB%B4%DB%B0%DB%B9_% DB%B1%DB%B8%DB%B1%DB%B8%DB%B0%DB%B2.jpg

                        دیدگاه


                          #13
                          پاسخ : دخیره داده ها درون یک آرایه

                          خب بیا مدار و از اول کانفیگ کنیم.

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

                          چرا ناراحتی پاتریک!
                          + امروز ی بچه دیدم سرچهارراه گل میفروخت
                          - از دیدنش ناراحت شدی؟
                          + نه
                          پس چی ناراحتت کرده
                          + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                          ------------------------------------------------------------------------------------------------------
                          تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                          ------------------------------------------------------------------------------------------------------
                          محصولات

                          دیدگاه


                            #14
                            پاسخ : دخیره داده ها درون یک آرایه

                            نوشته اصلی توسط سوران آراسته
                            خب بیا مدار و از اول کانفیگ کنیم.

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

                            دیدگاه

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