اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام ضمن تشکر از راهنمایی دوستان
    من ابتدا عرض کنم در سی مبتدی هستم بنابراین حتما لطف فرموده و راهنمایی لازمه را دریغ ننمایید ضمن تشکر مجدد
    موضوع:
    جدا سازی اعداد اعشاری از کلمات همراه و ارسالش به سونسگمنت می باشد من در همین اول راه ماندم
    نحوه دریافت اطلاعات از پورت سریال است بدین صورت:
    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 هستند
    جدیدترین ویرایش توسط flightsazan; ۰۱:۱۵ ۱۴۰۰/۰۴/۰۹.

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

    وقتی کد بلاکس رو برای برنامه نویسی avr می بری ایراد کامپایلر می گیره:
    Project/Target: "avr1 - Debug":
    The compiler's setup (GNU GCC Compiler for AVR) is invalid, so Code::Blocks cannot find/run the compiler.
    Probably the toolchain path within the compiler options is not setup correctly?!
    Do you have a compiler installed?
    Goto "Settings->Compiler...->Global compiler settings->GNU GCC Compiler for AVR->Toolchain executables" and fix the compiler's setup.


    Tried to run compiler executable 'C:\WinAVR/bin/avr-gcc.exe', but failed!
    Tried to run compiler executable 'C:\WinAVR/avr-gcc.exe', but failed!


    Skipping...
    Nothing to be done (all items are up-to-date).

    دیدگاه


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

      موضوعی که فهمیدم این کتابخانه ها مربوط به C++ هستند

      دیدگاه


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

        نوشته اصلی توسط flightsazan نمایش پست ها
        موضوعی که فهمیدم این کتابخانه ها مربوط به C++ هستند
        با سلام و احترام
        تجربه من اینه که استفاده از کمپایلرهای mikroElectronic برای شروع خیلی بهتره. از یک طرف هم برای pic و pic32 و 8051 و avr کمپایلر داره و از طرف دیگه میتونید از یکی از زبانهای بیسیک و یا سی و یا پاسکال استفاده کنید. برای امتحان میتونید یکبار از لینک زیر امتحانش کنید.
        دانلود بسته نرم افزاری mikroC PRO برای برنامه نویسی avr و پشتیبانی از تمامی میکروکنترلر های AVR و همچنین پشتیبانی از تمامی میکروکنترلر های PIC

        البته اگه avr شما یکی از مدلهای ATmega 8 ویا ATmega168 و یا ATmega328 ویا ATmega1280 ویا ATmega2560 باشه میتونید از کمپایلر آردوینو هم استفاده کنید.
        موفق باشید.

        دیدگاه


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

          ممنون avr مگا 32 هست

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

          یعنی تو سی امکان جداسازی اعشار از یه رشته درهم نیست

          دیدگاه


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

            نوشته اصلی توسط flightsazan نمایش پست ها
            ممنون avr مگا 32 هست

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

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

            دیدگاه


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

              سلام مهندس الان نصبه ولی خب من ازش نتونستم بهره ببرم

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



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

              این پست و دیدم شاید بعلت تحریم باز کردنش مشکل دار باشه ولی کد هاش کار نکرد
              I have a .txt file that contains an unknown (each time) number of lines. In every line there are 4 floats separated by the space character. My problem is that I have no clue how to separate each f...


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

              کد:
              [FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h>
              
              
              int main()
              {
               int i;
               float f;
               char c;
              
              
               printf("Enter an integer and a float, then Y or N\n> ");
               scanf("%d%f%c", &i, &f, &c);
              
              
               printf("You entered:\n");
               printf("i = %d, f = %f, c = %c\n", i, f, c);
              
              
              [FONT=Yekan]}[/FONT]
              این کد و نوشتم ولی دچار مشکل میشه اگر ورودی اش اینطور باشه کار می کنه:
              23.34g
              ,ولی:
              ss space space 23.45g
              space=چندین فاصله

              باشه کار نمی کنه
              ممنون

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

              البته در موقع کار کردن هم اعشار رو به قسمت عدد صحیح و قسمت اعشار تقسیم می کنه که من یکجا می خواهم

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

              برای نمایش در سونسگمنت
              جدیدترین ویرایش توسط flightsazan; ۲۱:۴۱ ۱۴۰۰/۰۴/۰۹.

              دیدگاه


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

                نوشته اصلی توسط flightsazan نمایش پست ها
                سلام ضمن تشکر از راهنمایی دوستان
                من ابتدا عرض کنم .....

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

                کد:
                [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 هستند
                با سلام مجدد
                کد رو بصورت زیر اصلاح کنید و ببینید آنچه مد نظرتون هست رو انجام میده؟
                کد:
                [LEFT]#include<stdio.h>
                #include<stdlib.h>
                
                
                int main(void)
                {
                char *string = "abhsgs   234cid*(hshshs349*(20hsh 246 2.45shkd ss 123.21a jkj", *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;
                }[/LEFT]

                دیدگاه


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

                  با عرض ادب خدمت مهندس evrygreen عزیز ممنون بلی بزرگواری فرمودید وقت گذاشتید
                  ممنون

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

                  تو کد بلاکس همه چیز درسته ولی کد ویژن ایراد زیادی می گیره مثلا strtof

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

                  همچنین ceilf و val باید به برنامه اعلام بشوند نوع انها float هست یا char

                  دیدگاه


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

                    نوشته اصلی توسط flightsazan نمایش پست ها
                    با عرض ادب خدمت مهندس evrygreen عزیز ممنون بلی بزرگواری فرمودید وقت گذاشتید
                    ممنون

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

                    تو کد بلاکس همه چیز درسته ولی کد ویژن ایراد زیادی می گیره مثلا strtof
                    با سلام مجدد
                    من دقیقا نمیدونم چه اطلاعاتی رو میخواهید با سریال جابجا کنید ولی توصیه من به شما اینه که سعی کنید برای اطلاعاتی که مد نظرتون هست که جابجا کنید زمان ارسال یک قالب مشخص طراحی نمایید و برای خودتون یه پروتکل تعریف کنید مثلا دیتای ارسالی یه هدر داشته باشه، یک یا چند قسمت دیتا با طول مشخص داشته باشه و در پایان هم CRC و کد پایان تعریف کنید تا هر بسته دیتای سریال که میگیرید بتونید چک کنید که آیا درست ارسال شده یا نه و همچنین جداسازی اطلاعات از داخلش راحتتر باشه.
                    موفق باشید.

                    دیدگاه


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

                      سلام دیتا ی دریافتی م به این صورت هست
                      ss 23.34g

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

                      البته فاصله هست بین اس اس و عدد

                      دیدگاه


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

                        نوشته اصلی توسط flightsazan نمایش پست ها
                        سلام دیتا ی دریافتی م به این صورت هست
                        ss 23.34g

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

                        البته فاصله هست بین اس اس و عدد
                        اگه بیشتر توضیح بدید که چکار میخواهید انجام بدید راحتتر میشه کمک کرد

                        دیدگاه


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

                          بلی دیتام تقریبا شکلش ثابت هست یصورت:
                          ss 23.34g
                          البته بین اس اس و عدد فاصله هست
                          ممنون

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

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

                          دیدگاه


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

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

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

                            این ورودی از ترازو هست می خواهم ان و تو سونسگمنت نمایش بدم ال سی دی ترازو کوچک و ناخوانا هست
                            برای بزرگترین و کوچکترین وزنی که قراره ترازو بخونه و ارسال کنه فرمت دیتایی که از سریال میگیرید چیه؟

                            دیدگاه


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

                              3000 ماکزیمم هست و فرمت همون هست که می بینید و از پورت rs232 می گیرم

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

                              کوچکتر هم .0200

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

                              تقریبا با ممیز 7 رقم اعشار میشه تو سون سگمنت

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

                              البته دقت بالا در نظر بگیریم 8 رقم

                              دیدگاه

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