اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط flightsazan نمایش پست ها
    سلام مهندس جان تو کد ویژن وقتی %f هست هیچکاری اتفاق نمی افته حتی خطا هم نمی گیره.دلیل: ادغام دو پست برای جلوگیری از اسپمراستی سوالی دارم:همزمان تو نرم افزار دوتا while باشه با اجرا شدن اولی دومی از کار می افته این راحلش چیه ایا باید از اینتراپت خارجی استفاده کرد
    استفاده از while های مختلف و یا حتی تو در تو از لحاظ برنامه نویسی ایرادی ندارد.

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


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

    سلام مهندس جان تو کد ویژن وقتی %f هست هیچکاری اتفاق نمی افته حتی خطا هم نمی گیره.

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

    راستی سوالی دارم:
    همزمان تو نرم افزار دوتا while باشه با اجرا شدن اولی دومی از کار می افته این راحلش چیه ایا باید از اینتراپت خارجی استفاده کرد

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


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

    باسلام.
    اون puts صرفا جهت تست بود و وجودش اصلا مهم نیست، شما صرفا از بخش sscanf استفاده کنید تا عدد اعشاری در متغیر دیتا ذخیره بشه.
    بعد از اون میتونید هر بلایی سر دیتا بیارید.
    کد:
    [CPP]
    int extract(char raw_data){
        float data;
        sscanf(raw_data,"%*s%f%*s",&data);
        return data;
    }
    [/CPP]
    این هم یه نمونه تابع که میتونید به راحتی ازش استفاده کنید(البته فایل stdio.h حتما اینکلود بشه و تابع حتما بالای برنامه معرفی بشه)

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


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

    فرصت شد کدتتون رو تست کردم فقط puts رو تو ترمینالم نشون می ده و ssanf رو نشون نمی ده:
    کد:
    [FONT=Yekan]puts(raw_data);
    [/FONT][FONT=Yekan]        sscanf(raw_data,"%*s%f%*s",&data);[/FONT]
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    یعنی خروجی فقط اینه:
    کد:
    "SS      120.23454g"

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


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

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

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


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

    باسلام.
    خب برادر من تقصیر خودته دیگه!این کدویژن در حالتی که خریداری بشه هم کامپایلر استاندارد و جالبی نیست چه برسه نسخه های کرک.
    من به شما پیشنهاد میکنم از avr-gcc استفاده کنید ،این کامپایلر بااستاندارد های c مطابقت کامل داره همچنین داکیومنت استاندارد خودشو داره که بروز هم هست:http://savannah.nongnu.org/projects/avr-libc/
    به شخصه pdf داکیومنت رو پرینت کردم همیشه هم کنار دستمه ،انگلیسی سطح بالایی هم نداره میشه راحت خوندش.
    برای درک کار با رجیستر ها هم بهتره آموزش های مهندس کی نژاد رو استفاده کنید با اختلاف کامل ترین و بهترین آموزش AVR هست.البته بهتره register summary چند تا از میکرو های پر کاربرد مثل مگا 32 ،مگا 8،مگا 16 ،تاینی 13 رو هم پرینت بگیرید تا بهشون راحت دسترسی داشته باشید.

    درکل اگه برای کار ساده ای مثل جدا کردن عدد از رشته نشه از امکانات استاندارد c استفاده کرد حتما مشکلات بدتری هم بوجود خواهد اومد!

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


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

    لینک کتابخانه:

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


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

    سلام خدمت دوستان کلی مطلب بالا گفته شد برام با کمال احترام قبلا پاسخ دادم خدمتتون بنابراین لیست می نمایم:
    1- دوست گرامی گرین عزیز من قبلا تصویر لازم رو قرار دادم خروجی ترازو با پورت rs232 همون هست که گذاشتم در حالت صفر و ماگزیمم که 3 کیلو رو می تونه اندازه بگیره فرمتش همون هست که براتون قرار دادم.
    2-من کدهای شما رو سعی کردم کاربردی اش کنم و شاید سازگار کنم با نیازم فکر نمی کردم برای شما حرفه ایها نامفهوم باشد ... بیشتر برای من نامفهوم هستند.
    3-دوست گرامی aie دقیقا کد ویژن همانطور که در قبل تر تصویر تنظیماتش و گذاشتم در printf - قادر به استفاده از float هست ولی دستور scanf قادر نیست و بیشتر برای اعداد صحیح کاربردی است.
    4- مهندس جان بنده با هواوهوس کار نمی کنم پیشنهاد شما مورد توجه بود و حتی اموزش از فرادرس تهیه شد ولی به بخش نظرات همون اموزش مراجعه نمایید دوستان دیگر هم مورد داشتند و بنده تنها نیستم حتی برای بررسی سعی کردم کتابخانه دیگه پیدا کنم و در کار با ان ناموفق بودم و هلپش و هم دیدم ولی خروجی دریافت نکردم
    لینک قسمت نظرات رو مشاهد ه نمایید:
    کد:
    https://faradars.org/courses/fvee9808-avr-microcontroller-using-atmel-compiler
    بنده هم نظر گذاشتم ولی انجا دیده نمیشه.

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

    لینک کتابخانه:
    کد:
    https://s19.picofile.com/file/8437974176/lcd.rar.html
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    همانطور که ملاحظه می فرمایید من فقط این انجمن رو به تنهایی اکتفا نکردم و جاهای گوناگون و سایت های های خارجی هم مورد بررسی قرار می دهم
    نمونه:
    کد:
    https://stackoverflow.com/questions/21264995/c-split-a-floating-point-number-into-individual-digits
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    کد:
    https://www.codingame.com/playgrounds/14213/how-to-play-with-strings-in-c/string-split
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    کد:
    https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=net-5.0
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    و کلی جاهای گوناگون دیگه
    جدیدترین ویرایش توسط flightsazan; 2021/07/12, 03:15.

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


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

    نوشته اصلی توسط A.I.E نمایش پست ها
    سلام.
    چرا از sscanf استفاده نمیکنید؟
    کد:
    #include <stdio.h>
    
    
    int main(){
            float data;
            char raw_data[] = "SS      120.23454g";
            puts(raw_data);
            sscanf(raw_data,"%*s%f%*s",&data);
            printf("\n%f\n",data);
            return 0;
    }
    این پیشنهاد قبلا داده شده. منتهی کدویژن ظاهرا نمیتونه عدد اعشاری از رشته استخراج کنه.

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


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

    سلام.
    چرا از sscanf استفاده نمیکنید؟
    کد:
    #include <stdio.h>
    
    
    int main(){
            float data;
            char raw_data[] = "SS      120.23454g";
            puts(raw_data);
            sscanf(raw_data,"%*s%f%*s",&data);
            printf("\n%f\n",data);
            return 0;
    }

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


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

    نوشته اصلی توسط evergreen نمایش پست ها
    با سلام خدمت شما دوست عزیز
    ما همه اینجا جمع شدیم که دانشی که داریم را با هم به اشتراک بگذاریم تا به دانسته هامون افزوده بشه و در این وسط اگر کمکی هم از دستمون بر می آید به همدیگر برسانیم بنابراین به نظر من اگر دوستان مختلف درباره موضوعی نظر میدن نباید اصلا بعنوان پا تو کفش هم کردن تعبیر بشه.
    من بر خلاف شما اعتقادی به اینکه یک کار برای یک نفر سنگینه ندارم. بنظرم هر کی میتونه حتی کارهای سنگین رو هم انجام بده ولی به شرطیکه از روش صحیح و مرحله به مرحله جلو بره. این دوست عزیزمون پشتکار و پیگیری خوبی برای کاری که میخواهد انجام بدهد دارد ولی متاسفانه روش کار رو بجای اینکه بصورت مرحله ایی و از اول شروع کند اصرار دارد که از آخر به اول حرکت نماید که این مساله باعث کند شدن کار و ایجاد خستگی و دردسرهای گاها بیمورد برایشان میشود.
    موفق باشید.
    منظور از سنگین بودن اینه در این مرحله براشون سخته همچین کاری. همه ما مبتدی بودیم و همه ما دورانی چیزایی برامون سنگین بوده ولی حالا نیست. هرکاری احتیاج به پیش زمینه و اطلاعات داره و همیشه توی هر نقطه ای یکسری کارها برامون سنگینه. برای مثال من که اطلاعی از قوانین و معادلات حرکت موشک ندارم، ارسال فضاپیما برام واقعا سنگینه! مشکل دقیقا از جایی شروع میشه که همه میخوان زود به جواب برسن و نمیخوان روند درست رو طی کنن. ایشون هم باید اول اطلاعاتشون رو در مورد خود زبان C تا حد قابل قبولی بالا ببرن، بعد بخوان باهاش برای میکروکنترلر برنامه نویسی کنن.
    کنجکاو بودنشون هم درسته، کنجکاو هستن. خودشون گفتن چند جلد کتاب در مورد زبان C کنار دستشونه و داخلش مطلبی راجع به کدهایی که من فرستادم پیدا نکردن. خوب این راهش نیست. کتابایی که کنار دستشونه احتمالا آموزشیه و مثل دیکشنری نیست که بریم توش در فلان مورد سرچ کنیم و کد در بیاریم.

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


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

    نوشته اصلی توسط hossein.m98 نمایش پست ها
    با سلام و عرض ادب
    بله در جریان کمک های شما بودم و ببخشید اگر پا توی کفش شما کردم.
    چند باری هم بهشون گفتم این کار یکم برای شما سنگینه ولی اصرار دارن خودشون انجامش بدن. من حتی چند نمونه کد براشون فرستادم که توی حالت کلی و با اطلاعات کمی که از خروجی سنسورشون به ما دادن هم جواب بده ولی خوب ظاهرا فایده ای نداشته!
    با این همه راهنمایی باید تا حالا توی هر محیط کدنویسی ای که بودن به طریقی، هر چند غیر استاندارد، جواب میگرفتن اما به دلیل دانش کمی که توی موارد پایه ای برنامه نویسی دارن، هنوز تلاششون جواب نمیده و هر بار فقط یک گزارش نا مفهوم از کدی که استفاده کردن و خطایی که بهش برخوردن ارائه میکنن.
    منم مثل شما اعتقاد دارم به جای تلاش بیخودی بهتره کار رو بسپارن به یک کاردان و خودشون برن سراغ مطالعات اولیه این کار و وقتشون رو با سعی و خطا تلف نکنن که این کار سعی و خطا بر نمیداره.
    با سلام خدمت شما دوست عزیز
    ما همه اینجا جمع شدیم که دانشی که داریم را با هم به اشتراک بگذاریم تا به دانسته هامون افزوده بشه و در این وسط اگر کمکی هم از دستمون بر می آید به همدیگر برسانیم بنابراین به نظر من اگر دوستان مختلف درباره موضوعی نظر میدن نباید اصلا بعنوان پا تو کفش هم کردن تعبیر بشه.
    من بر خلاف شما اعتقادی به اینکه یک کار برای یک نفر سنگینه ندارم. بنظرم هر کی میتونه حتی کارهای سنگین رو هم انجام بده ولی به شرطیکه از روش صحیح و مرحله به مرحله جلو بره. این دوست عزیزمون پشتکار و پیگیری خوبی برای کاری که میخواهد انجام بدهد دارد ولی متاسفانه روش کار رو بجای اینکه بصورت مرحله ایی و از اول شروع کند اصرار دارد که از آخر به اول حرکت نماید که این مساله باعث کند شدن کار و ایجاد خستگی و دردسرهای گاها بیمورد برایشان میشود.
    موفق باشید.

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


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

    نوشته اصلی توسط evergreen نمایش پست ها
    با سلام و احترام
    همانگونه که خودتان نیز از ابتدا در جریان این تاپیک بوده اید انواع راهنماییها به این دوست عزیز شده . از ابتدا mikroC ,و بعد winAVR به ایشان معرفی شد. سپس توصیه کردم حداقل خروجی دستگاه رو بررسی دقیق نمایید شاید اصلا نیاز به این همه دردسر برای جداسازی نداشته باشید و براحتی بتونید عدد رو از یک رشته جدا کنید. شما هم که همه گونه کمک انجام دادید ولی بنظر میرسد ایشان با وجودی که پشتکار و کنجکاویشون برای یادگیری خوبه ولی کلا مسیر خود را میرود و توجهی به هیچکدام از راهنماییها ندارد!
    موفق باشید
    با سلام و عرض ادب
    بله در جریان کمک های شما بودم و ببخشید اگر پا توی کفش شما کردم.
    چند باری هم بهشون گفتم این کار یکم برای شما سنگینه ولی اصرار دارن خودشون انجامش بدن. من حتی چند نمونه کد براشون فرستادم که توی حالت کلی و با اطلاعات کمی که از خروجی سنسورشون به ما دادن هم جواب بده ولی خوب ظاهرا فایده ای نداشته!
    با این همه راهنمایی باید تا حالا توی هر محیط کدنویسی ای که بودن به طریقی، هر چند غیر استاندارد، جواب میگرفتن اما به دلیل دانش کمی که توی موارد پایه ای برنامه نویسی دارن، هنوز تلاششون جواب نمیده و هر بار فقط یک گزارش نا مفهوم از کدی که استفاده کردن و خطایی که بهش برخوردن ارائه میکنن.
    منم مثل شما اعتقاد دارم به جای تلاش بیخودی بهتره کار رو بسپارن به یک کاردان و خودشون برن سراغ مطالعات اولیه این کار و وقتشون رو با سعی و خطا تلف نکنن که این کار سعی و خطا بر نمیداره.

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


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

    نوشته اصلی توسط hossein.m98 نمایش پست ها
    این Atmel Studio دیگه مثل کدویژن بدبخت نیست که راحت همه مشکلات رو بندازیم گردنش و بگیم به خاطر اونه که هیچی جواب نمیده! من چند سال باهاش کار کردم و مشکلی نداشتم. این که شما توی راه اندازی کوچکترین چیز مثل LCD هم گیر کردی نشون میده خودت تجربه لازم رو نداری و باید مشکل رو ابتدا در خودت حل کنی دوست من. قبلا هم گفتم توی محیط خارج از کدویژن دیگه خبری از کتابخونه های آماده برای LCD و بقیه چیزای دم دستی نیست و باید خودت براش کتابخونه جور کنی. نمیدونم دقیقا قصدت چی بوده تابع rprintf رو از کجا آوردی ولی حتما کارت مشکلی داشته که جواب نگرفتی.
    یک مورد رو در مورد کمپایلرهای AVR دوباره تکرار میکنم؛ توی Atmel Studio هم اگر اشتباه نکنم از عملیات اعشاری توی رشته ها به شکل پیش فرض پشتیبانی نمیشه و باید دستی فعالش کنی. در این مورد باید توی اینترنت سرچ کنی چون منم راهشو یادم نیست که بگم.
    با سلام و احترام
    همانگونه که خودتان نیز از ابتدا در جریان این تاپیک بوده اید انواع راهنماییها به این دوست عزیز شده . از ابتدا mikroC ,و بعد winAVR به ایشان معرفی شد. سپس توصیه کردم حداقل خروجی دستگاه رو بررسی دقیق نمایید شاید اصلا نیاز به این همه دردسر برای جداسازی نداشته باشید و براحتی بتونید عدد رو از یک رشته جدا کنید. شما هم که همه گونه کمک انجام دادید ولی بنظر میرسد ایشان با وجودی که پشتکار و کنجکاویشون برای یادگیری خوبه ولی کلا مسیر خود را میرود و توجهی به هیچکدام از راهنماییها ندارد!
    موفق باشید

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

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

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

    موفق باشید.
    جدیدترین ویرایش توسط evergreen; 2021/07/11, 11:04.

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


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

    نوشته اصلی توسط flightsazan نمایش پست ها
    atme studio هم مورد دار هست من نتونستم ازش در پروتئوس روی ال سی دی چیز درست نشان بدم همان دستورات البته مشابهش با کد ویژن خیلی راحت اطلاعات رو نمایش می ده ولی تو فایل کامپایلی اتمل استادیو مثلا برای یه کلمه فقط در وسط lcd - اف رو نشان داد
    دستور rprintf(";test")

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

    ورژن تست شده 7 اتمل می باشد
    ممنون
    این Atmel Studio دیگه مثل کدویژن بدبخت نیست که راحت همه مشکلات رو بندازیم گردنش و بگیم به خاطر اونه که هیچی جواب نمیده! من چند سال باهاش کار کردم و مشکلی نداشتم. این که شما توی راه اندازی کوچکترین چیز مثل LCD هم گیر کردی نشون میده خودت تجربه لازم رو نداری و باید مشکل رو ابتدا در خودت حل کنی دوست من. قبلا هم گفتم توی محیط خارج از کدویژن دیگه خبری از کتابخونه های آماده برای LCD و بقیه چیزای دم دستی نیست و باید خودت براش کتابخونه جور کنی. نمیدونم دقیقا قصدت چی بوده تابع rprintf رو از کجا آوردی ولی حتما کارت مشکلی داشته که جواب نگرفتی.
    یک مورد رو در مورد کمپایلرهای AVR دوباره تکرار میکنم؛ توی Atmel Studio هم اگر اشتباه نکنم از عملیات اعشاری توی رشته ها به شکل پیش فرض پشتیبانی نمیشه و باید دستی فعالش کنی. در این مورد باید توی اینترنت سرچ کنی چون منم راهشو یادم نیست که بگم.

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

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