اطلاعیه

Collapse
No announcement yet.

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

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

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

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


    جدیدترین ویرایش توسط evergreen; ۲۱:۲۷ ۱۴۰۰/۰۴/۱۱.

    دیدگاه


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

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

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

      اطلاعات رو هم من با ای سی max232 دریافت کرده و به پایه های rx و tx میکرو می دم
      ممنون

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

      شما یک ترمینال اضافه کنید ببینید چظور نمایش داده میشه
      کد:
      ss فاصله فاصله چند تا 23.34g
      دلیل: ادغام دو پست برای جلوگیری از اسپم

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

      اگر هگز بخواید باید اینو تبدیل کنیم

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

      دیدگاه


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

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

        ss فاصله فاصله چند تا 23.34g

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

        موفق باشید.

        دیدگاه


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

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

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

          اطلاعات رو هم من با ای سی max232 دریافت کرده و به پایه های rx و tx میکرو می دم
          ممنون

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

          شما یک ترمینال اضافه کنید ببینید چظور نمایش داده میشه
          کد:
          ss فاصله فاصله چند تا 23.34g
          دلیل: ادغام دو پست برای جلوگیری از اسپم

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

          اگر هگز بخواید باید اینو تبدیل کنیم

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

          اینم یه تستی بکنید. در صورت موفق بودن خروجی 1 میشه و در غیر این صورت 0. رشته رو بهش میدید و وزن رو بر میگردونه:

          unsigned char DeserializeWeight(char *str, float *weight)
          {
          float weightBuffer;
          char preamble[3];
          char postamble;


          int rlen = sscanf(str, "%2[SD]%*[ \t]%f%c",
          preamble, &weightBuffer, &postamble);
          if (rlen != 3 || (strcmp(preamble, "SS") && strcmp(preamble, "SD")) || postamble != 'g')
          return 0;


          *weight = weightBuffer;
          return 1;
          }

          تا اشتباهات عجیب غریب رخ نداده بگم این یک تابع هستش و باید بذارید توی برنامه و بعد فراخوانی اش کنید. البته مطمئن نیستم روی کدویژن بیمار هم جواب بده یا نه!
          جدیدترین ویرایش توسط hossein.m98; ۲۱:۴۷ ۱۴۰۰/۰۴/۱۱.

          دیدگاه


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

            ممنون کد ویژن str نیست هلپش هم strتنها نداره

            دیدگاه


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

              نوشته اصلی توسط flightsazan نمایش پست ها
              ممنون کد ویژن str نیست هلپش هم strتنها نداره
              این str اسم متغیره چه ربطی به کدویژن داره؟؟؟

              دیدگاه


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

                این روش خطا ساختار می ده:
                کد:
                [FONT=Yekan]void main(void)[/FONT]{
                unsigned char DeserializeWeight(char *str, float *weight);
                //unsigned char lcd_buffer[20];
                //char Buffer[20] = "SS    235.23g";
                //float Weight = 0 ;
                //int result;
                float weightBuffer;
                char preamble[3];
                [FONT=Yekan]char postamble;[/FONT]
                دلیل: ادغام دو پست برای جلوگیری از اسپم

                برای
                کد:
                unsigned char DeserializeWeight(char *str, float *weight);
                دلیل: ادغام دو پست برای جلوگیری از اسپم

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

                ss فاصله فاصله چند تا 23.34g

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

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

                دیدگاه


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

                  نوشته اصلی توسط flightsazan نمایش پست ها
                  این روش خطا ساختار می ده:
                  کد:
                  [FONT=Yekan]void main(void)[/FONT]{
                  unsigned char DeserializeWeight(char *str, float *weight);
                  //unsigned char lcd_buffer[20];
                  //char Buffer[20] = "SS    235.23g";
                  //float Weight = 0 ;
                  //int result;
                  float weightBuffer;
                  char preamble[3];
                  [FONT=Yekan]char postamble;[/FONT]
                  دلیل: ادغام دو پست برای جلوگیری از اسپم

                  برای
                  کد:
                  unsigned char DeserializeWeight(char *str, float *weight);
                  دوست عزیزی داری چیکار میکنی جدا؟؟؟ چرا هرچی میفرستم یجور نا مربوطی تغییر میدی و بعد ارور گرفتن میگی ایراد داره؟ یکم توجه کن ببین چی میگیم
                  این جوری بخواد پیش بره شدیدا توصیه میکنم این پروژه رو رد کنید و حتما قبل از قبول پروژه مهارت های خودتونو بالا ببرید. به خدا کار همیشه هست ولی دو بار که اینجوری کار کنید کارفرماها بهتون بی اعتماد میشن و برای بعد هم مشکل پیدا میکنید! اگر هم پروژه شخصیه یا بدید به یک کار بلد، یا قبلش این چیزا رو تمرین کنید. الکترونیک و برنامه نویسی چیزی نیست که با آزمون و خطا، بدون منطق و دلیل پیش برید و تهش انتظار جواب گرفتن داشته باشید. توی بهترین حالت بعدا به ایرادات عجیب و غریب بر میخورید. اینا توصیه برادرانه من به شماس

                  دیدگاه


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

                    مهندس جان کار کجا بود.
                    دوم سعی دارم کد های شما رو درک کنم
                    سوم الان کدتونو بردم کد بلاکس انجا خطا نداره تو کامپایل
                    چهارم باید از جایی شروع کرد من الان 8 جلد کتاب زیر دستم هست کد های شما یه اشاره هم تو انها نیست
                    برای همین سعی می کنم بفهمم
                    مثلا اینطور سعی کردم عملکرد کدتون رو با رفتارش درک کنم:
                    کد:
                    [FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h>
                    
                    
                    int main()
                    {
                    unsigned char DeserializeWeight(char *str, float *weight)
                    {
                      float weightBuffer;
                      char preamble[3];
                      char postamble;
                    
                    
                    
                    
                      int rlen = sscanf(str, "%2[SD]%*[ \t]%f%c",
                                        preamble, &weightBuffer, &postamble);
                      if (rlen != 3 || (strcmp(preamble, "SS") && strcmp(preamble, "SD")) || postamble != 'g')
                        return 0;
                        printf("","%u\n",weightBuffer);
                    
                    
                      *weight = weightBuffer;
                      return 1;
                      printf("","",weightBuffer);
                    
                    
                    }
                    }

                    دیدگاه


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

                      نوشته اصلی توسط flightsazan نمایش پست ها
                      مهندس جان کار کجا بود.
                      دوم سعی دارم کد های شما رو درک کنم
                      سوم الان کدتونو بردم کد بلاکس انجا خطا نداره تو کامپایل
                      چهارم باید از جایی شروع کرد من الان 8 جلد کتاب زیر دستم هست کد های شما یه اشاره هم تو انها نیست
                      برای همین سعی می کنم بفهمم
                      مثلا اینطور سعی کردم عملکرد کدتون رو با رفتارش درک کنم:
                      کد:
                      [FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h>
                      
                      
                      int main()
                      {
                      unsigned char DeserializeWeight(char *str, float *weight)
                      {
                        float weightBuffer;
                        char preamble[3];
                        char postamble;
                      
                      
                      
                      
                        int rlen = sscanf(str, "%2[SD]%*[ \t]%f%c",
                                          preamble, &weightBuffer, &postamble);
                        if (rlen != 3 || (strcmp(preamble, "SS") && strcmp(preamble, "SD")) || postamble != 'g')
                          return 0;
                          printf("","%u\n",weightBuffer);
                      
                      
                        *weight = weightBuffer;
                        return 1;
                        printf("","",weightBuffer);
                      
                      
                      }
                      }
                      کتاب ها، همه چیز رو ندارن. بعدشم من کلی چیز با هم ترکیب کردم؛ نبایدم شبیه اش رو توی مطالب سر فصل محور کتاب ها ببینید. اگر من چیزی میفرستم همشون رو تست کردم و مطمئنم.
                      برای فهمیدن آخرین ارسال من در مورد تابع تحقیق کنید. چیزی که من فرستادم یک تابع هستش. شما بدنه تابع رو لازم نیست تغییر بدید کافیه یجایی بالای تابع main قرارش بدید و بعد توی برنامه اصلی فراخوانی و استفادش کنید:

                      #include <stdio.h>


                      unsigned char DeserializeWeight(char *str, float *weight)
                      {
                      float weightBuffer;
                      char preamble[3];
                      char postamble;


                      int rlen = sscanf(str, "%2[SD]%*[ \t]%f%c",
                      preamble, &weightBuffer, &postamble);
                      if (rlen != 3 || (strcmp(preamble, "SS") && strcmp(preamble, "SD")) || postamble != 'g')
                      return 0;


                      *weight = weightBuffer;
                      return 1;
                      }


                      int main()
                      {
                      char strWeight[] = "SD -2.9999g";
                      float weight;
                      if (DeserializeWeight(strWeight, &weight) == 1)
                      printf("Weight: %f\n", weight);
                      else
                      printf("Failed!\n");


                      return 0;
                      }

                      دیدگاه


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

                        سلام و ممنون متاسفانه بعلت مشکلات گوشیم اینترنت نداشتم ضمن تشکر از شما در این مدت که نبودم رو کد قبلی که کار نکرد ؛کار می کردم با تغیر %f به مثلا %u قسمت عدد صحیح جدامیشه و سوالی که برام پیش امد چرا کد ویژن با floatدرست رفتار نمی کنه در این تغیر جواب result یک میشه در مورد این کد هم چشم بررسی خواهم کرد ممنون
                        جدیدترین ویرایش توسط flightsazan; ۰۲:۵۳ ۱۴۰۰/۰۴/۱۳.

                        دیدگاه


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

                          نوشته اصلی توسط flightsazan نمایش پست ها
                          سلام و ممنون متاسفانه بعلت مشکلات گوشیم اینترنت نداشتم ضمن تشکر از شما در این مدت که نبودم رو کد قبلی که کار نکرد ؛کار می کردم با تغیر %f به مثلا %u قسمت عدد صحیح جدامیشه و سوالی که برام پیش امد چرا کد ویژن با floatدرست رفتار نمی کنه در این تغیر جواب result یک میشه در مورد این کد هم چشم بررسی خواهم کرد ممنون
                          سلام دوباره
                          گفتم که به صورت پیش فرض اعشاری پشتیبانی نمیکنه. یه جایی توی تنظیماتش باید اعشار رو فعال کنید. تا جایی که یادمه توی سربرگ Project در قسمت config باید این کار رو انجام بدید. داخلش یه قسمتی هست که چندتا گزینه داره یکش float هستش که باید اونو انتخاب کنید.

                          دیدگاه


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

                            سلام و درود مهندس اعمال کردم ولی عین خیال حضرت والا مقام کد ویژن نیست ممنون

                            دیدگاه


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

                              نوشته اصلی توسط flightsazan نمایش پست ها
                              سلام ضمن تشکر از راهنمایی دوستان
                              من ابتدا عرض کنم در سی مبتدی هستم بنابراین حتما لطف فرموده و راهنمایی لازمه را دریغ ننمایید ضمن تشکر مجدد
                              موضوع:
                              جدا سازی اعداد اعشاری از کلمات همراه و ارسالش به سونسگمنت می باشد من در همین اول راه ماندم
                              نحوه دریافت اطلاعات از پورت سریال است بدین صورت:
                              ss 123.34g
                              sd 234.456g
                              همانطور ملاحظه می فرمایید علاوه بر حروفات ، فاصله هم هست که مورد نیاز نیست فقط اعداد و ممیز اهمیت دارد
                              در جستجو در سایت برنامه نویس دوستان از حذف با دستور replace هم نوشتند که من نتونستم متاسفانه،
                              ممنون خواهم شد راهنمایی بفرمایید مثال هایی هم از محیط ویژوال دیدم که در سی و سی پلاس پلاس میکروها چندان کاربرد نداشتند و یا من تنونستم تفسیر نمایم
                              ممنون
                              راستی من در کد بلاکس برنامه نوشتم ولی در کد ویژن کتابخانه های سی نیستند مانند regex که برای مرتب سازی استرینگ کاربرد داره. حالا باید چکار کنم برای کار با این کتابخانه در کد ویژن

                              حسن



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

                              این کد رو پیدا کردم ولی اعشار رو جدا نمی کنه و در مواردی کار هم نمی کنه تو نحوه ورود اطلاعات منظور م هست:

                              کد:
                              [LEFT][COLOR=black][FONT=Consolas]#include <iostream>[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]#include<stdio.h>[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]#include<stdlib.h>[/FONT][/COLOR]
                              
                              [COLOR=#333333][FONT=Consolas]int main(void)[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]{[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]char *string = "abhsgs234cid*(hshshs349*(20hsh 246 2.45shkd ss 123.45g", *ptr = string;[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]while (*ptr) {[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]    if (isdigit(*ptr)) {[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]        long val = strtol(ptr, &ptr, 10);[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]        printf("%ld\n", val);[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]    } else {[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]        ptr++;[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]    }[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]}[/FONT][/COLOR]
                              [COLOR=#333333][FONT=Consolas]    return 0;[/FONT][/COLOR]
                              [COLOR=black][FONT=Consolas]}[/FONT][/COLOR][/LEFT]
                              دلیل: ادغام دو پست برای جلوگیری از اسپم

                              موضوع بعدی که متوجه شدم کتابخانه های کد ویژن dll هستند ولی کد بلاکس *.h و *.c هستند
                              سلام
                              من نمی دونم به جوابتون رسیدید یا نه ولی چند راه مختلف وجود داره
                              یکی اینکه رشته ای که می فرستید طول مشخصی داره واعداد رو می تونید مثلا از 4 مین تا مثلا 8 مین خانه بگذارید بعد در زمان دریافت می دونید که 4 تا 8 اعدادتون هست یعنی اعداد باید طولش مشخص باشه
                              راه دیگه مقایسه کردن تک تک خانه های حافظه با کدهای اسکی مربوط به اعداد هست که در سایت http://www.asciitable.com/ می تونید کدها رو ببنید
                              اون کتابخانه های تعریف شده هم از طریق مقایسه و غیره و ذالک کارشون رو پیش می برند
                              اللهم صل علی محمد و ال محمد و عجل فرجهم
                              پیامبر اکرم(ص):زکات علم نشر آن است.
                              در کشور های غربی انتقال تجربیات و دانش به افراد مبتدی یک پیشرفت محسوب شده و به آن مدیریت دانش می گویند. ولی متاسفانه این فرهنگ هنوز در کشور ایران رایج نشده است !!!

                              دیدگاه


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

                                سلام نه فعلا ممنون

                                دیدگاه

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