پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
atme studio هم مورد دار هست من نتونستم ازش در پروتئوس روی ال سی دی چیز درست نشان بدم همان دستورات البته مشابهش با کد ویژن خیلی راحت اطلاعات رو نمایش می ده ولی تو فایل کامپایلی اتمل استادیو مثلا برای یه کلمه فقط در وسط lcd - اف رو نشان داد
دستور rprintf(";test")
دلیل: ادغام دو پست برای جلوگیری از اسپم
ورژن تست شده 7 اتمل می باشد
ممنون
اطلاعیه
Collapse
No announcement yet.
جداسازی اعداد از متن در C یا c++ برای میکرو AVR
Collapse
X
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
سلام
شما هم به سختی وارد انجمن میشید
یک روش دیدم تبدیل وردی ام به اینتجر و تبدیل و استخراج هست
دلیل: ادغام دو پست برای جلوگیری از اسپمکد:http://irccode.ir/question/%d8%aa%d8%a8%d8%af%db%8c%d9%84-%da%a9%d8%a7%d8%b1%d8%a7%da%a9%d8%aa%d8%b1-%d8%b9%d8%af%d8%af%db%8c-%d8%af%d8%a7%d8%ae%d9%84-%d8%b1%d8%b4%d8%aa%d9%87-%d8%a8%d9%87-%d8%a7%db%8c%d9%86%d8%aa%db%8c%d8%ac/
البته برای اعداد هست
دلیل: ادغام دو پست برای جلوگیری از اسپم
این کد رو دارم تو کد بلاکس کار می کنه ولی کد ویژن ایراد جالبی می گیره:
دلیل: ادغام دو پست برای جلوگیری از اسپمکد:[FONT=Yekan]#include <stdio.h>[/FONT] //#include <stdlib.h> //#include <string.h> int main() { char str[] = "sd 23.45g"; int init_size = strlen(str); char delim[] = "sdg"; char *ptr = strtok(str, delim); while (ptr != NULL) { printf("%s\n", ptr); ptr = strtok(NULL, delim); } return 0; }
کد:Error: C:\Users\FLIGHTSAZAN-AIRSHIP\Documents\test1\test1.c(56): function argument #2 of type 'unsigned char [4]' is incompatible with required parameter of type 'flash unsigned char *'
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
با این حساب یا باید بیخیال کدویژن بشی و بری روی یک کمپایلر و محیط بهتر مثل Atmel Studio، یا اینکه از روش هایی که ابتکاری هستن و یک مقدار کثیف کاری دارن استفاده کنی!نوشته اصلی توسط flightsazan نمایش پست هاتست کردم مشکل float هنوز هم هست
دلیل: ادغام دو پست برای جلوگیری از اسپم
تو کدهای قبلی که داشتیم این قسمت کار نمی کنه علتش نبود float در تنطیمات هست
دلیل: ادغام دو پست برای جلوگیری از اسپمکد:result = sscanf(Buffer,"Sd %fg",Weight);
دلیل: ادغام دو پست برای جلوگیری از اسپم

دلیل: ادغام دو پست برای جلوگیری از اسپم
موضوع مهم:
خدمت مدیران عزیز:
سایت بدون فیلتر شکن قابل دسترسی نیست
ممنون
دلیل: ادغام دو پست برای جلوگیری از اسپم
کل کد:
کد:[FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h> int main() { char Buffer[20] = "SS 235.23g"; float Weight = 0 ; int result; result = sscanf(Buffer, "SS %fg", &Weight); if (result == 1) { printf("%.3f\n", Weight); // Success return 0; } }
روش جایگزین نیاز داره که دقیق بدونی خروجی سنسور، ترازو یا هرچی که هست در شرایط مختلف به چه شکله، بعد بیای با توجه به اونا خودت دستی با گشتن توی رشته عدد قبل و بعد از نقطه اعشار رو بدست بیاری و بعد با هم ترکیب کنی که وزن بدست بیاد. این روش دیگه ابتکاریه و من با اطلاعات محدود نمیتونم دقیق براش کد بنویسم بهت بدم.
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
تست کردم مشکل float هنوز هم هست
دلیل: ادغام دو پست برای جلوگیری از اسپم
تو کدهای قبلی که داشتیم این قسمت کار نمی کنه علتش نبود float در تنطیمات هست
دلیل: ادغام دو پست برای جلوگیری از اسپمکد:result = sscanf(Buffer,"Sd %fg",Weight);
دلیل: ادغام دو پست برای جلوگیری از اسپم

دلیل: ادغام دو پست برای جلوگیری از اسپم
موضوع مهم:
خدمت مدیران عزیز:
سایت بدون فیلتر شکن قابل دسترسی نیست
ممنون
دلیل: ادغام دو پست برای جلوگیری از اسپم
کل کد:
کد:[FONT=Yekan]#include <stdio.h>[/FONT]#include <stdlib.h> int main() { char Buffer[20] = "SS 235.23g"; float Weight = 0 ; int result; result = sscanf(Buffer, "SS %fg", &Weight); if (result == 1) { printf("%.3f\n", Weight); // Success return 0; } }
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
سلام فکر کرئم انجمن از دست رفت سرعت لود صفحات هم بسیار پایین هست
دلیل: ادغام دو پست برای جلوگیری از اسپم
دوستان طبق تحقیقی که کردم علت کار نکردن کد ویژن این است که تعدادی از خصوصیاتش فقط در ورژن پروفشینالش فعال است این ورژن موجود هست من ورژن قدیمی از ان رو دیدم
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
[COLOR=#28282B][FONT=Yekan]اینم یه تستی بکنید. در صورت موفق بودن خروجی 1 میشه و در غیر این صورت 0. رشته رو بهش میدید و وزن رو بر میگردونه:[/FONT][/COLOR]
[RIGHT][COLOR=#28282B][FONT=Yekan][FONT=inherit][TABLE="width: 948"]
[TR]
[TD="class: gutter"][RIGHT]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[/RIGHT]
[/TD]
[TD="class: code"]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;
}
متاسفانه من نتونستم این تابع رو استفاده کنم
[/TD]
[/TR]
[/TABLE]
[/FONT]
[/FONT][/COLOR][/RIGHT]
دلیل: ادغام دو پست برای جلوگیری از اسپم
دلیل: ادغام دو پست برای جلوگیری از اسپمکد:unsigned char[LEFT][COLOR=#28282B][FONT=Consolas] [/FONT][/COLOR][/LEFT]DeserializeWeight(char[LEFT][COLOR=#28282B][FONT=Consolas] [/FONT][/COLOR][/LEFT]*str, float[LEFT][COLOR=#28282B][FONT=Consolas] [/FONT][/COLOR][/LEFT]*weight)[LEFT][COLOR=#28282B][FONT=Consolas]{[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] float weightBuffer;[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] char preamble[3];[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] char postamble;[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] [/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] [/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] int rlen = sscanf(str, "%2[SD]%*[ \t]%f%c",[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] preamble, &weightBuffer, &postamble);[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] if (rlen != 3 || (strcmp(preamble, "SS") && strcmp(preamble, "SD")) || postamble != 'g')[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] return 0;[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] [/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] [/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] *weight = weightBuffer;[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas] return 1;[/FONT][/COLOR] [COLOR=#28282B][FONT=Consolas]}[/FONT][/COLOR] [COLOR=black][FONT=Consolas]متاسفانه من نتونستم این تابع رو استفاده کنم[/FONT][/COLOR][/LEFT]
کد ویژن با وجود اعمال تغیرات در تنظیمات با float مشکل داره:

دلیل: ادغام دو پست برای جلوگیری از اسپم
این بحث در مورد بنده هم صادق هست:
https://barnamenevis.org/showthread.php?352960-%D8%AC%D8%AF%D8%A7-%D9%83%D8%B1%D8%AF%D9%86-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B2-%D9%8A%D9%83-%D8%B1%D8%B4%D8%AA%D9%87
دلیل: ادغام دو پست برای جلوگیری از اسپم
دلیل: ادغام دو پست برای جلوگیری از اسپمکد:https://barnamenevis.org/showthread.php?352960-%D8%AC%D8%AF%D8%A7-%D9%83%D8%B1%D8%AF%D9%86-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B2-%D9%8A%D9%83-%D8%B1%D8%B4%D8%AA%D9%87
البته بحث بیشتر در محیط ویزوال هست ممنون
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
همچنین قسمت float فعال نشد و تنظیمات روش اثری ندارد در کد ویژن ممنون
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
سلام نه فعلا ممنون
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در 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/ می تونید کدها رو ببنید
اون کتابخانه های تعریف شده هم از طریق مقایسه و غیره و ذالک کارشون رو پیش می برند
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
سلام و درود مهندس اعمال کردم ولی عین خیال حضرت والا مقام کد ویژن نیست ممنون
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
سلام دوبارهنوشته اصلی توسط flightsazan نمایش پست هاسلام و ممنون متاسفانه بعلت مشکلات گوشیم اینترنت نداشتم ضمن تشکر از شما در این مدت که نبودم رو کد قبلی که کار نکرد ؛کار می کردم با تغیر %f به مثلا %u قسمت عدد صحیح جدامیشه و سوالی که برام پیش امد چرا کد ویژن با floatدرست رفتار نمی کنه در این تغیر جواب result یک میشه در مورد این کد هم چشم بررسی خواهم کرد ممنون
گفتم که به صورت پیش فرض اعشاری پشتیبانی نمیکنه. یه جایی توی تنظیماتش باید اعشار رو فعال کنید. تا جایی که یادمه توی سربرگ Project در قسمت config باید این کار رو انجام بدید. داخلش یه قسمتی هست که چندتا گزینه داره یکش float هستش که باید اونو انتخاب کنید.
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR
سلام و ممنون متاسفانه بعلت مشکلات گوشیم اینترنت نداشتم ضمن تشکر از شما در این مدت که نبودم رو کد قبلی که کار نکرد ؛کار می کردم با تغیر %f به مثلا %u قسمت عدد صحیح جدامیشه و سوالی که برام پیش امد چرا کد ویژن با floatدرست رفتار نمی کنه در این تغیر جواب result یک میشه در مورد این کد هم چشم بررسی خواهم کرد ممنونجدیدترین ویرایش توسط flightsazan; 2021/07/04, 02:53.
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در 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;
}
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در 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); } }
یک دیدگاه بنویسید:
-
پاسخ : جداسازی اعداد از متن در 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);

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