باسلام خدمت همه اساتید
من خیلی سعی کردم عدد اعشاریو توی eeprom ذخیره کنم ولی نشد که نشد و حتما باید اونو به unsigned char تبدیل کنم تا بشه ذخیره کردش و اینم میشه شامل تبدیل float به unsigned char و برعکسش .
توی تاپیک های مختلف گشتم و خب راه حل های زیادی هم پیشنهاد شده بود ولی من هرکدومو امتحان کردم یا کار نکرد یا خطا داد !
کم کم به این نتیجه رسیدم که بیام عدد اعشاریو بصورت دوتا عدد صحیح تفکیک نم ، یعنی یه عدد صحیح که قسمت صحیح عدد من هستش و قسمت اعشارشم بصورت یه عدد صحیح دیگه و در نهایت این دوتا عدد صحیح رو بصورت جداگانه توی دوتا متغیر eeprom ذخیره کنم . موقع خوندن هم بیام این دوتا عدد رو بخونم و به صورت یه عدد اعشاری درش بیارم .
بعنوان مثال : 3.14 رو به 3 و 14 تبدیل کنم و بعد این دوتارو جداگانه ذخیره کنم توی eeprom و بعدش 3 و 14 رو بخونم و تبدیلش کنم به 3.14
ولی نمیدونم اینو چطور توی کدویژن بنویسم چون من قبلا بیسیک کار میکردمو تازه اومدم کدویژن اگه ممکنه یکی برام یه مثال بزنه و توضیحش بده :-(
باتشکر
یه راه بهتر به نظرم در آوردن بایت های اون عدده. یه همچین چیزی
کد php:
float a=3.1415;
unsigned char *p;
p=&a;
for(int i=0;i<4;i++)
send(p[i]);
از union هم میشه استفاده کرد.
کد php:
union aa{
float a;
uchar *p
}
...
(۲۲-اردیبهشت-۱۳۹۴, ۰۸:۱۷:۴۱)MicrowaveCO نوشته است: [ -> ]باسلام خدمت همه اساتید
من خیلی سعی کردم عدد اعشاریو توی eeprom ذخیره کنم ولی نشد که نشد و حتما باید اونو به unsigned char تبدیل کنم تا بشه ذخیره کردش و اینم میشه شامل تبدیل float به unsigned char و برعکسش .
توی تاپیک های مختلف گشتم و خب راه حل های زیادی هم پیشنهاد شده بود ولی من هرکدومو امتحان کردم یا کار نکرد یا خطا داد !
کم کم به این نتیجه رسیدم که بیام عدد اعشاریو بصورت دوتا عدد صحیح تفکیک نم ، یعنی یه عدد صحیح که قسمت صحیح عدد من هستش و قسمت اعشارشم بصورت یه عدد صحیح دیگه و در نهایت این دوتا عدد صحیح رو بصورت جداگانه توی دوتا متغیر eeprom ذخیره کنم . موقع خوندن هم بیام این دوتا عدد رو بخونم و به صورت یه عدد اعشاری درش بیارم .
بعنوان مثال : 3.14 رو به 3 و 14 تبدیل کنم و بعد این دوتارو جداگانه ذخیره کنم توی eeprom و بعدش 3 و 14 رو بخونم و تبدیلش کنم به 3.14
ولی نمیدونم اینو چطور توی کدویژن بنویسم چون من قبلا بیسیک کار میکردمو تازه اومدم کدویژن اگه ممکنه یکی برام یه مثال بزنه و توضیحش بده :-(
باتشکر
سلام.
حالت عادی چطوری استفاده می کنید که نمی شه؟!
کدهاتون رو لطفا بذارید، ببینم نحوه ی تعریف و استفاده تون به چه صورت بودهه ...
موفق باشید.
سلام
char a=0;
float b =1.1f;
;a=(char)b
a=char(b);
...
اینو امتحان کردم اما هیچ عکس العملی نشون نداد !
ftoa(float n,unsigned char decimal,char str)
اینم امتحان ردم ولی نمیدونم چرا مدام خطا میداد!
از این تاپیک :
http://www.iranled.com/forum/thread-26554.html
من دنبال یه روشی هستم که باهاش بشه عدد اعشاریو توی eeprom داخلی میکرو ذخیره کرد
لطفا اگه ممکنه یه نمونه برنامه برام مثال بزنید که عدد اعشاریو ذخیره کنه و بشه دوبار از ش خواند
یا حداقل یه نمونه پروژه که اینکارو کرده بزارین که خودم باهاش سروکله بزنم ببینم چیکار کرده
چند هفته هستش که دارم باهاش سروکله میزنم اما نمیشه که نمیشه
کدای قبلیمو پاک کردم وگرنه میزاشتم ، هربار هرکدومو امتحان کردمو جواب نداد
لطفا یه مثال کامل بزنین چون توی اینترنتم گشتم انگار مشکل خیلیا هستش ولی هیچ مثال علی ازش پیدا نکردم
با تشکر
مهندس چرا لقمه رو دور سرت می چرخونی؟!
با این دستور یه متغییر از نوع eeprom تعریف می کنی، مقدار دهیش هم کردم:
بعد مثل یه متغییر عادی باهاش کار می کنی، همین!
اینم بریز رو میکرو که مطمئن بشی ...
کد php:
eeprom float test = 1.1;
char buf[16];
main()
{
if(test == 1.1)
{
test = 3.14;
lcd_clear();
ftoa(test,2,buf);
lcd_puts(buf);
delay_ms(3000);
}
while(1)
{
}
}
اون لینک تاپیکی رو که در پستتون گذاشتید، مربوط به کست کردن تایپ های مختلف متغییر ها به هم هست ، ربطی به eeprom نداشت.
موفق باشید.
سلام
آقا واقعا در عجبم ! باورکن من اینو امتحان کرده بودم ولی جواب نمیداد ولی کد شما جواب داد !
شاید یجا یه نکته ریزیو رعایت نمیکردم ولی این که فوق العاده هستش نه نیازی به تبدیل داره نه کد اضافی و براحتی و مستقیما داره عدد اعشاریو ذخیره میکن . خداییش دمت کرد
خیلی خیلی لطف کردی ( راستی ، فقط یه اشتباه تایپی کوچولو داره که توی قسمت شرط برابر بودن تست مساوی با 1.1 باید دوتا مساوی باشه )
بازم خیلی خیلی ممنونم از کمکی که کردی بهم
نقل قول: فقط یه اشتباه تایپی کوچولو داره که توی قسمت شرط برابر بودن تست مساوی با 1.1 باید دوتا مساوی باشه
بله حق با شماست، اصلاحش کردم.
موفق باشی.