اطلاعیه

Collapse
No announcement yet.

جداسازی اعداد از متن در C یا c++ برای میکرو AVR

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

    #31
    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

    ممنون مهندس تصویری که گذاشتم شاید نشان بده در هر وزنی چطور کار می کنه 0 و بالاتر
    بلی می خواهم از روش مالتی پلکس استفاده کنم
    ممنون

    دیدگاه


      #32
      پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

      نوشته اصلی توسط flightsazan نمایش پست ها
      ممنون مهندس تصویری که گذاشتم شاید نشان بده در هر وزنی چطور کار می کنه 0 و بالاتر
      بلی می خواهم از روش مالتی پلکس استفاده کنم
      ممنون
      اگه 8 رقم کافی هست از این مدل ماژول استفاده کن خیلی کارت راحتتر خواهد بود
      ماژول سون سگمنت Segment 8digit با درایور Max7219 برای راه اندازی سون سگمنت به کار میرود. خرید ماژول سون سگمنت 8 رقمی همراه با درایور Max7219 سون سگمنت Segment

      دیدگاه


        #33
        پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

        ممنون من فقط فعلا درگیر جدا سازی ان عدد اعشار هستم حتما اینطور عمل خواهم کرد

        دیدگاه


          #34
          پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

          خودت رو اصلا درگیر جداسازی رقم اعشار نکن. چون چیزی که من از تصویر میبینم طول دیتایی که برای هر بار خواندن میفرسته ثابته. اگه گفتم وزن بالاتر هم اندازه بگیر برای این بود که میخواستم مطمئن بشم که عدد رو همیشه بر اساس گرم میفرسته یا نه؟ چون اگه دقت کنی آخرش g داره. در چند تای پایینی هم S S به S D تبدیل شده که نمیدونم منظورش چی بوده. احتمالا اگه کاتالوگ ترازو رو ببینی ممکنه که توش توضیح داده باشه. به هر حال اگر همیشه بر حسب گرم باشه کافیه شما کل رشته رو بریزی توی یه متغیر و بر اساس محل شروع و پایان اعداد و حذف space های سمت چپ تبدیلش کنی به عدد و اصلا جداسازی رقم اعشار مهم نیست چون بنظر میاد همیشه دو رقم اعشار داره. اگر وضعیت اعداد رو توی وزنهای بالاتر هم در بیاری برنامه نویسی این با اردوینو کلا یک ساعت هم طول نمیکشه.

          دیدگاه


            #35
            پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

            درسته این ترازو گرمی هست قط تا 3000 گرم رو می تونه وزن کنه

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

            ss و sd مال وقتی که چیزی رو می زاری روش و یا بر می داری

            دیدگاه


              #36
              پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

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

              char Buffer[20] = "SS 0.0g";
              float Weight = 0;
              int result;


              result = sscanf(Buffer, "SS %fg", &Weight);
              if (result == 1)
              {
              // Success
              }

              توی کد بالا فرض شده رشته دریافتی داخل Buffer ذخیره شده. توجه کنید که scanf و sscanf تعداد مواردی رو که تونستن استخراج کنن بر میگردونن. چون اینجا فقط خواستیم یک عدد اعشاری استخراج کنیم، انتظار داریم عدد 1 رو در صورت موفق بودن عملیات برگردونه. فقط توجه داشته باشید که با توجه به سنگین بودن اعمال اعشاری، معمولا کمپایلرهای AVR به شکل پیش فرض از اعداد اعشاری توی رشته پشتیبانی نمیکنن و باید تنظیماتشون رو عوض کنید که این کارو براتون بکنن.
              تا جایی که میدونم scanf و sscanf هم به نوعی چیزی شبیه به regex دارن که میتونید باهاش حالت های مختلف رو پیش بینی کنید و در الگو قرار بدید که کد همیشه درست کار کنه ولی من تا حالا تجربه ای باهاش نداشتم که دقیق تر راهنمایی کنم. در هر صورت فکر کنم با مواردی که گفتم بتونید حالت های مختلف خروجی ترازو رو پیش بینی کنید و عدد رو استخراج کنید.
              یکی از دوستان هم ماژولی معرفی کردن برای سون سگمنت که به نظر چیز خوبی میاد. این ماژول از MAX7219 استفاده کرده که یکم توی ایران گرونه به نظرم. اما من آی سی های ارزون تری مثل TM1637 و TM1638 رو پیشنهاد میدم. من از این دو تا استفاده کردم و راضی ام. قیمتی تقریبا نصف MAX7219 هم دارن.
              جدیدترین ویرایش توسط hossein.m98; ۱۶:۵۱ ۱۴۰۰/۰۴/۱۰.

              دیدگاه


                #37
                پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                ممنون از شما مهندس و دوست گرامی اگه بتونم تست کنم:!
                با این خطا موجه شدم ممنون
                ||=== Build: Debug in tc15 (compiler: GNU GCC Compiler) ===|
                C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc15\main.c||In function 'main':|
                C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc15\main.c|8|error: invalid suffix "f" on integer constant|
                C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc15\main.c|18|error: expected declaration or statement at end of input|
                ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
                تو کد بلاکس و کامپایل C
                جدیدترین ویرایش توسط flightsazan; ۱۶:۴۶ ۱۴۰۰/۰۴/۱۰.

                دیدگاه


                  #38
                  پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                  نوشته اصلی توسط flightsazan نمایش پست ها
                  ممنون از شما مهندس و دوست گرامی اگه بتونم تست کنم:!
                  با این خطا موجه شدم ممنون
                  ||=== Build: Debug in tc15 (compiler: GNU GCC Compiler) ===|
                  C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc15\main.c||In function 'main':|
                  C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc15\main.c|8|error: invalid suffix "f" on integer constant|
                  C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc15\main.c|18|error: expected declaration or statement at end of input|
                  ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
                  تو کد بلاکس و کامپایل C
                  میشه کد رو کامل بذارید اینجا؟ حتما از تگ CPP استفاده کنید (توی نوار بالایی ادیتور انجمن).

                  دیدگاه


                    #39
                    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                    کد:
                    [FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h>
                    
                    
                    
                    
                    int main()
                    {
                        char Buffer[20] = "SS 0.0g";
                        float Weight = 0f;
                    int result;
                    
                    
                    
                    
                    result = sscanf(Buffer, "SS %fg", &Weight);
                    if (result == 1);
                    {
                    
                    
                      // Success
                    }
                        return 0;
                    }

                    دیدگاه


                      #40
                      پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                      نوشته اصلی توسط flightsazan نمایش پست ها
                      کد:
                      [FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h>
                      
                      
                      
                      
                      int main()
                      {
                          char Buffer[20] = "SS 0.0g";
                          float Weight = 0f;
                      int result;
                      
                      
                      
                      
                      result = sscanf(Buffer, "SS %fg", &Weight);
                      if (result == 1);
                      {
                      
                      
                        // Success
                      }
                          return 0;
                      }
                      آها فهمیدم چی میگه. اون f رو از انتهای خط float Weight = 0f; پاک کنید.

                      دیدگاه


                        #41
                        پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                        فقط مهندس کد هایی که با کد بلاکس و سی کار می کنند تو کد ویژن نمیشه کامپایل کرد مانند کد دوستمون:
                        این عالی کار می کنه ولی تو کد ویژن کامپیل نشد:

                        کد:
                        [FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h>
                        //using namespace std;
                        
                        
                        
                        
                        
                        
                        int main(void)
                        {
                        char *string = "ss   223.34g", *ptr = string;
                        while (*ptr) {
                            if (isdigit(*ptr) ) {
                                float val = strtof(ptr, &ptr);
                                if (ceilf(val) == val) {
                                  printf("%.0f\n", val);
                                } else {
                                  printf("%.3f\n", val);}
                        
                        
                            } else {
                                ptr++;
                            }
                        }
                            return 0;
                        }
                        دلیل: ادغام دو پست برای جلوگیری از اسپم

                        هنوز هم خطا داره
                        [FONT=Yekan]||=== Build: Debug in tc13 (compiler: GNU GCC Compiler) ===|[/FONT]C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc13\main.c|11|warning: data definition has no type or storage class|
                        C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc13\main.c|11|warning: type defaults to 'int' in declaration of 'result' [-Wimplicit-int]|
                        C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc13\main.c|11|error: initializer element is not constant|
                        C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc13\main.c|12|error: expected identifier or '(' before 'if'|
                        ||=== Build failed: 2 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|


                        دیدگاه


                          #42
                          پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                          نوشته اصلی توسط flightsazan نمایش پست ها
                          فقط مهندس کد هایی که با کد بلاکس و سی کار می کنند تو کد ویژن نمیشه کامپایل کرد مانند کد دوستمون:
                          این عالی کار می کنه ولی تو کد ویژن کامپیل نشد:

                          کد:
                          [FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h>
                          //using namespace std;
                          
                          
                          
                          
                          
                          
                          int main(void)
                          {
                          char *string = "ss   223.34g", *ptr = string;
                          while (*ptr) {
                              if (isdigit(*ptr) ) {
                                  float val = strtof(ptr, &ptr);
                                  if (ceilf(val) == val) {
                                    printf("%.0f\n", val);
                                  } else {
                                    printf("%.3f\n", val);}
                          
                          
                              } else {
                                  ptr++;
                              }
                          }
                              return 0;
                          }
                          فکر نمیکنم در جهان مریض تر از کدویژن کمپایلری باشه (اغراق)! خیلی چیزا رو نمیفهمه، استاندارد زبان C اش خیلی قدیمیه و بهینه سازی هم زیاد بلد نیست!
                          به نظر من بهتره کار با اتمل استودیو رو شروع کنید که از کمپایلر avr-gcc استفاده میکنه. دوستان WinAVR هم پیشنهاد دادن که اونم از همین کمپایلر استفاده میکنه ولی به نظرم همون اتمل استودیو بهتره. جالبه بدونید همین کد بلاکس هم داره از gcc استفاده میکنه اما gcc ای که برای avr استفاده میشه برای سخت افزار avr پورت شده که توی اسمش هم مشخصه (اینو برای اطلاعات عمومی گفتم).
                          فقط توجه داشته باشید همنطوری که گفتم avr سخت افزار ضعیفیه و کمپایلرهاش معمولا به شکل پیش فرض از نوع داده اعشاری توی رشته پشتیبانی نمیکنن که حجم استفاده از حافظه رو کم کنن. اما با سرچ راهی برای فعال کردن این ویژگی میتونید پیدا کنید.

                          دیدگاه


                            #43
                            پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                            تا الان کلی داخل و خارج رو کشت زدم ممنون
                            البته کد بالا رو تو atml sudio خطای مشابه کد ویژن می ده
                            جدیدترین ویرایش توسط flightsazan; ۱۷:۰۷ ۱۴۰۰/۰۴/۱۰.

                            دیدگاه


                              #44
                              پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                              نوشته اصلی توسط flightsazan نمایش پست ها
                              هنوز هم خطا داره
                              [FONT=Yekan]||=== Build: Debug in tc13 (compiler: GNU GCC Compiler) ===|[/FONT]C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc13\main.c|11|warning: data definition has no type or storage class|
                              C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc13\main.c|11|warning: type defaults to 'int' in declaration of 'result' [-Wimplicit-int]|
                              C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc13\main.c|11|error: initializer element is not constant|
                              C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\tc13\main.c|12|error: expected identifier or '(' before 'if'|
                              ||=== Build failed: 2 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|


                              بعد از if نقطه ویرگول نذاشتید؟؟ نقطه ویرگول نباید باشه ها

                              دیدگاه


                                #45
                                پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                                نه با ویرگول هم خطا می ده تو result ایستاده

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

                                error: initializer element is not constant|

                                دیدگاه

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