اطلاعیه

Collapse
No announcement yet.

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

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

  • flightsazan
    replied
    پاسخ : جداسازی اعداد از متن در 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 تغیر می کرد همین
    من متوجه مورد دیگری نشدم
    ممنون

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

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

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

    یک دیدگاه بنویسید:


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

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

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : جداسازی اعداد از متن در 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; 2021/07/02, 21:47.

    یک دیدگاه بنویسید:


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

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

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

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

    موفق باشید.

    یک دیدگاه بنویسید:


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

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

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

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

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

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

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

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

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

    یک دیدگاه بنویسید:


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

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


    جدیدترین ویرایش توسط evergreen; 2021/07/02, 21:27.

    یک دیدگاه بنویسید:


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

    نه متوجه شدم ان و گذاشتم حداقل یه کاراکتر a نمایش داده بشه الان کمی رو کد کار کردم وقتی result==0 قرار می دم 0 نشون می ده

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

    %f با % u و %c تعویض کردم چون رشته داریم ولی توفیقی نکرد
    ممنون

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

    کد:
    [FONT=Yekan]  result = sscanf(Buffer, "SS  %fg", &Weight);[/FONT]       if (result == 0)
    //{
        //printf("%.3f",Weight);
        sprintf(lcd_buffer,"%u",Weight);
        
       // lcd_clear();
        puts(lcd_buffer);
        lcd_puts(lcd_buffer);
       // delay_ms(250);
      // Success
      //  return 0;
    [FONT=Yekan]//}[/FONT]
    صفر نشان داده می شود

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

    البته اضافه نمایم در پروتئوس تست می زنم کد ها.

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

    کاراکترهای کنترلی printf که مورد توجه قرار دادم:
    کد:
    [COLOR=#333333][FONT=IRANSans]کاراکترفرمت | نوع اطلاعات که باید به خروجی منتقل شود[/FONT][/COLOR][COLOR=#333333][FONT=IRANSans]%C :  یک کاراکتر
    %d : اعداد صحیح دهدهی مثبت و منفی
    %i  : اعداد صحیح دهدهی مثبت و منفی
    %e : نمایش علمی عدد همراه با حرف e
    %E : نمایش علمی عدد همراه با حرف E
    %f : عدد اعشاری ممیز شناور
    %g : اعداد اعشاری ممیز شناور
    %G : اعداد اعشاری ممیز شناور
    %O : اعداد مبنای ۸ مثبت
    %S : رشته ای از کاراکترها ( عبارت رشته ای )
    %U : اعداد صحیح بدون علامت ( مثبت )
    %x : اعداد مبنای ۱۶ مثبت با حروف کوچک
    %X : اعداد مبنای ۱۶ مثبت با حروف بزرگ
    %p : اشاره گر
    %n : موجب میشود تا تعداد کاراکترهایی که تا قبل ازاین کاراکتر به خروجی منتقل شده اند شمارش شده و در پارامتر متناظر با آن قرار گیرد .
    [/FONT][/COLOR]
    [COLOR=#333333][FONT=IRANSans]%% : علامت %
    [/FONT][/COLOR]

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

    نوشته اصلی توسط flightsazan نمایش پست ها
    سه رقم اعشار منظور م بود جایی دیدم باید در کامپایلر هم برای دستور sprintf تغیراتی بدم اعمال کردم ولی ظاهرا تبدیل من درست نیست
    کد:
    [COLOR=#666666][FONT=Vazir]ای تغییر روش استفاده از  می*توانید sprintf() به مسیر Menu < Project > Configure بروید و تب C Compiler را انتخاب کنید.در این تب، منوی آبشاری (s)printf features را پیدا کنید و عملکردی که به آن نیاز دارید را انتخاب کنید. به عنوان پیشفرض، این گزینه*ها بر int و width قرار دارد. برای این گزینه تنها حروف «c، s، p، i، d، u، x، X و %» و «+» قابل نمایش است. فاصله و دیگر کاراکترها پشتیبانی نمی*شوند.[/FONT][/COLOR]
    کد:
    https://hadibanelectronic.com/mag/character-lcd-setup-tutorial-with-codevision-avr/
    شما اصلا منظور منو متوجه نیستید!!! دارم میگم علامت % توی الگوی توابع printf معنی خاصی داره. اون % دومی که توی الگوش گذاشتید نباید باشه! اگر میخوایید خود % چاپ بشه باید از %% استفاده کنید

    یک دیدگاه بنویسید:


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

    سه رقم اعشار منظور م بود جایی دیدم باید در کامپایلر هم برای دستور sprintf تغیراتی بدم اعمال کردم ولی ظاهرا تبدیل من درست نیست
    کد:
    [COLOR=#666666][FONT=Vazir]ای تغییر روش استفاده از  می*توانید sprintf() به مسیر Menu < Project > Configure بروید و تب C Compiler را انتخاب کنید.در این تب، منوی آبشاری (s)printf features را پیدا کنید و عملکردی که به آن نیاز دارید را انتخاب کنید. به عنوان پیشفرض، این گزینه*ها بر int و width قرار دارد. برای این گزینه تنها حروف «c، s، p، i، d، u، x، X و %» و «+» قابل نمایش است. فاصله و دیگر کاراکترها پشتیبانی نمی*شوند.[/FONT][/COLOR]
    کد:
    https://hadibanelectronic.com/mag/character-lcd-setup-tutorial-with-codevision-avr/

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

    نوشته اصلی توسط flightsazan نمایش پست ها
    سلام مجدد منظورتون این هست
    کد:
    [COLOR=#28282B][FONT=monospace]"%.3f%CA"[/FONT][/COLOR]
    float هست

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

    با حذف آنها هم هنوز رو ال سی دی چیزی ندارم
    کد:
    %CA
    منظورم این بود.
    "%.3fCA"

    یک دیدگاه بنویسید:


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

    سلام مجدد منظورتون این هست
    کد:
    [COLOR=#28282B][FONT=monospace]"%.3f%CA"[/FONT][/COLOR]
    float هست

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

    با حذف آنها هم هنوز رو ال سی دی چیزی ندارم
    کد:
    %CA

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

    نوشته اصلی توسط flightsazan نمایش پست ها
    ممنون درسته سواد سی بنده پایین هست
    و سعی کردم طبق اطلاعات کامپایلر عمل کنم ممنون
    الان سعی کردم عدد استخراجی رو به رشته قابل نمایش رو ال سی دی تبدیل کنم ولی کار درست نبود یا دستور تبدیل درست نیست بنابراین چیزی نمایش نمی دهد
    //printf(lcd_Buffer,"%.3f%CA",Weight);[/FONT]    sprintf(lcd_buffer,"%.3f%CA",Weight);
    lcd_clear();
    puts(lcd_buffer);
    lcd_puts(lcd_buffer);
    delay_ms(250)

    چیزی های به کدم اضافه میشه:
    کد:
    //printf(lcd_Buffer,"%.3f%CA",Weight);    sprintf(lcd_buffer,"%.3f%CA",Weight);
        lcd_clear();
        puts(lcd_buffer);
        lcd_puts(lcd_buffer);
        delay_ms(250);
    اون % بعد از f توی الگوی تابع sprintf چیه؟ اگر منظور خود کاراکتر % باشه باید ۲ تا % پشت سر هم بذارید

    یک دیدگاه بنویسید:


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

    ممنون درسته سواد سی بنده پایین هست
    و سعی کردم طبق اطلاعات کامپایلر عمل کنم ممنون
    الان سعی کردم عدد استخراجی رو به رشته قابل نمایش رو ال سی دی تبدیل کنم ولی کار درست نبود یا دستور تبدیل درست نیست بنابراین چیزی نمایش نمی دهد
    //printf(lcd_Buffer,"%.3f%CA",Weight);[/FONT]    sprintf(lcd_buffer,"%.3f%CA",Weight);
    lcd_clear();
    puts(lcd_buffer);
    lcd_puts(lcd_buffer);
    delay_ms(250)

    چیزی های به کدم اضافه میشه:
    کد:
    //printf(lcd_Buffer,"%.3f%CA",Weight);   
     sprintf(lcd_buffer,"%.3f%CA",Weight);
        lcd_clear();
        puts(lcd_buffer);
        lcd_puts(lcd_buffer);
        delay_ms(250);
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    فونت بودند بصورت دستی پاک کردم تا کد نوشته شده اینجا ثبت بشه ممنون
    جدیدترین ویرایش توسط flightsazan; 2021/07/02, 18:03.

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

    نوشته اصلی توسط flightsazan نمایش پست ها
    این اضافه کردم ولی خطا همچنان باقی است ممنون
    unsigned char Buffer;
    فکر میکنم شما به قدر کافی مهارت زبان C ندارید و بهتره کمی روش کار کنید!
    توی ارسال قبلی گفتم که تعریف Buffer رو ابتدای بلوک انجام بدید. نمیدونم هنوزم اینجوریه یا نه ولی قدیم یادمه باید حتما متغیر رو ابتدای بلوک معرفی میکردیم تا کدویژن ایراد نگیره. حالا بلوک چیه؟ هر چیزی بین این دوتا {} قرار بگیره میشه یک بلوک.

    یک دیدگاه بنویسید:

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