نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
آزادی حجاز از دست نااهلان
مهدی دمیرچیلو

آموزش جامع آردوینو جلسه ۱۲ Data Types And Conversion

به نام خدا : سلام داشای گل خودم، رسیدیم به جلسه ۱۲ ام از آموزش آردوینو، این مطلب چیز ساده و مهمی هستش، قسمت انواع داده در آردوینو که چیز زیاد مهمی نیست و هموتون میدونید(البته ۲-۳ تا چیز مهم داره) و اصل مطلب تبدیل انواع داده در آردوینو هستش که تو قسمت دوم مطلب میگمش، این قسمت مهمه و باس یادش بگیرید(تو هر قسمت سعی کردم پروژهای از آردوینو هم براتون بزارم) rtfm
 

داستان
داستان : راسش این مطلب رو خیلی وقت پیش نوشته بودم(قرار بود روز تولدم بزارمش رو سایت :-D) و قرار بود مطلب جلسه ۱۰ باشه که الان شد مطلب جدید ۱۱ ، نمیدونم چرا منتشرش نکردم، پیش خودم میگفتم چیز ساده ای هستش و از این جور حرفا، الان دیگه اعصابم خورد شد، آخه بیکار میشم اعصابم خورد میشه :-D، گفتم بیام ببینم مطلب نصفه و نیمه ای هستش که تکمیلش کنم، به این بر خوردم، آردوینو هم چند وقتی هستش که مطلبش رو نزاشتم، دلیلش هم اینه که میخوام مطلب sPI رو بزارم ولی فقط یه دونه برد آردوینو دارم، الان اعصاب معصابم خورده، لامسب نه پول داریم قطعه بخریم، کلی مطلب میخوام بزارم تو سایت و اصلی ترین دلیلش که تا حالا نزاشتم تو سایت همین پول نداشتنه، مثلا مطلب انواع روش پروگرام کردن لنگ یه پروگرامر هستش، مطلب آردوینو بحث SPI لنگ یه برد دیگه هستش، مطلب قطعات الکترونیکی و ماژول و LCD ها لینگ قطعش هستش، مطلب کوفت لنگ پوله مطلب ضهر مار لنگ پوله، دانشگاه میخوایم بریم لنگ پولیم، بدهکاریم رو میخوام بدم لنگ پولم و نمیدونم از کجا بیارم، این سایت رو هم که زدم طرف میاد به ما میگه ....بگذریم، الان میخوام مطلب aVR رو بزارم تو سایت لنگ یه کریستال ساعت هستم، اصلا خودم هم موندم، نمیدونم چیکار کنم bomb ، حالا باید وایسیم ببینیم خدا چی میخواد.
مثلا خیلی دوست داشتم قطعات کواد و بخرم و بسازم، ولی کو پول، لامسب کلی پول میخواد، تو این زمونه هم خرمای شب ۵شنبش مفت نیست و باید فاتحه بفرستی، بگذریم از این چرندیات، این حرفا فایده ای نداره و همش بهونس. :-)، کسی که عاشق هدفی باشه همه سعیش رو میکنه تا به هدفش برسه...
خوب دیگه این حرفا فایده ای نداره، سریع مطلب رو بنویسیم بریم بازی پرسپولیس رو نگاه کنیم که این روزا از آخر اوله bad
بیکاری داری این حرفای منو میخونی ها :-D، بچه به جای بازی گوشی برو مطلب زیر رو بخون اینا برات نون و آب نمیشهfocus
توجه : منبع این مطلب لینک مقابل هستش، که من این مطالب رو از سایت اصلی آردوینو خوندم و یاد گیرفتم و اینجا برا شما گزاشتم: Arduino Reference
آموزش جامع آردوینو جلسه ۱۲ Data Types And Conversion

آموزش جامع آردوینو جلسه ۱۲ Data Types And Conversion




انواع داده در آردوینو

int : اعداد صحیح، مثال ۱و۲و۳و۰و۱-و۲۵- و…
در آردوینو uno که ۱۶ بیتی(۲ بایتی) هستش، به متغییر های از نوع int میشه مقادیر بین ۳۲,۷۶۸ تا ۳۲,۷۶۷- رو انتساب داد(۲به توان ۱۵ = ۳۲,۷۶۸)
توجه : برد آردوینو Due که ۳۲ بیتی(۴ بایت) هستش اعداد بین ۲,۱۴۷,۴۸۳,۶۴۸ تا ۲,۱۴۷,۴۸۳,۶۴۷- رو میشه انتساب داد(۲ به توان ۳۱ = ۲,۱۴۷,۴۸۳,۶۴۸)

 
unsigned int : مثل متغییر int هستش، تنها فرقش اینا که فقط شامل اعداد بزرگتر مساوی ۰ هستش(اعداد منفی رو پشتیبانی نمیکنه)، که برا وقتایی که نیاز به عدد منفی نداریم میتونی از این نوع متغییر استفاده کنیم که حافظه کمتری هم نسبت به int مصرف میکنه.
اعداد بین ۰ تا ۳۲,۷۶۸ رو میشه به این متغییر نسبت داد(۲به توان ۱۵ = ۳۲,۷۶۸)

 
word : مثل متغییر unsigned int هستش فقط با تفاوت این که اعداد بین ۰ تا ۶۵,۵۳۵ رو پشتیبانی میکنه(۲ به توان ۱۶ = ۶۵,۵۳۵)

 
long : این مثل متغییر int هستش، با این تفاوت که ۳۲ بیتی هستش(بر خلاف int که ۱۶ بیتی هستش) و اعداد ۲,۱۴۷,۴۸۳,۶۴۸ تا ۲,۱۴۷,۴۸۳,۶۴۷- رو پشتیبانی میکنه(۲ به توان ۳۱ = ۲,۱۴۷,۴۸۳,۶۴۸)

 
unsigned long : مثل متغییر از نوع long هستش فقط این که اعداد بزرگتر مساوی ۰ رو پشتیبانی میکنه فقط(و حافظه کمتری مصرف میکنه نسبت به long، اگه با اعداد منفی کایر نداریم، این متغییر بهتره از long)
توجه : long شبیه unsigned int هم هستش که اعداد ۱۶ بیتی رو پشتیبانی میکنه و long اعداد ۳۲ بیتی رو.(تنها فرقشون همینه)

 
short : والا این دقیقا مثل int هستش، ۱۶ بیتی هستش و ۲ بایت از حافظه اشغال میکنه، دقیقا مثل int، حالا این دو په فرقی با هم دارن رو نمیدونم pardon (کسی اگه میدونه به ما هم بگه blush )

تحقیق کنید : فرق int و short در آردوینو؟؟؟ >>>> اینو تحقیق کنید و تنیجش رو به ما بگید. blush
 
byte : یع متغییر هستش که فقط اعداد صحیح رو پشتیبانی میکنه و ۸ بیتی(۱بایتی) هستش و اعداد ۰ تا ۲۵۵ رو پشتیبانی میکنه(کمترین حافظه رو در بین متغییر های هم نوعش مصرف میکنه)

 






 
float : متغییر های بالا همشون فقط اعداد صحیح رو پشتیبانی میکردن ولی float اعداد اعشاری رو هم پشتیبانی میکنه و محدوده این متغییر بین ۳٫۴۰۲۸۲۳۵E+38 تا  ۳٫۴۰۲۸۲۳۵E+38- هستش(که یعنی ۳٫۴۰۲۸۲۳۵ ضرب در ۱۰ به توان ۳۸)>>>> ولی این که این عدد از کجا اومده نمیدونم و حال فکر کردن و سرچ رو هم ندارم(کسی اگه میدونه به ما هم بگه bomb) ، متغییر float از نوع ۳۲ بیتی(۴بایت) هستش و ۶-۷ رقم اعشار دقت داره
 
double : دقیقا مثل float هستش فقط با این تفاوت که دقتش تا ۱۵ رقم اعشار هستش.
 






 
boolean : متغییری که یا ۰(false) هستش یا ۱(true)، این متغییر ۱ بایت حافظه مصرف میکنه
تحقیق کنید : والا من از زمان غاجار تا الان فرق بین bool و boolean رو نفهمیدم، برید تحقیق کنید و فهمیدید بیاید و به ما هم بگید. blush
 






 
char : این متغییر ۱ بایت حافظه مصرف میکنه، و اعداد -۱۲۸ تا ۱۲۷ رو میگیره؛ میشه گفت یه تک کاراکتر ذخیره میکنه؛ هر چی بهش بدی به صورت کد اسکی ذخیره میکنه.
جدول کدهای اسکی
بهتره پروژه زیر رو رو بردتون پروگرام کنید و تو پورت سریال چیزی که دریافت میکنید رو ببینید؛ این طوری فک کنم بهتر با تابع آشنا میشید :
۱) چیزی که به جای MyChar1 نشون میده یه کاراکتر هستش که کد اسکیش ۳۵ هستش(و باس از لینک بالا ببینید که این کد اسکی برا چه کاراکتری هستش)
۲) چیزی که با جای MyChar2 نشون میده همون عدد ۹ هستش؛ در واقع وقتی ما عدد ۹ رو میزاریم داخل  ‘ ‘ یعنی کد اسکی عدد ۹ میره داخل MyChar2  و به همین دلیل هنگام نمایش MyChar2 عدد ۹ رو نشون میده.
۳) و در نهایت چیزی که به جای MyChar3 نشون میده کاراکتر A هستش، دلیلش هم مثل دلیل بالا
به نظرم بهتره به جای این که فقط این چرندیات من رو بخونید، خودتون چن تا مثال بزنید و نحوه کار تابع رو ببینید، پروژه زیر رو هم تست کنید.
 
unsigned char : اینم مثل char هستش فقط اعداد ۰ تا ۲۵۵ رو پشتیبانی میکنه.
تحقیق کنید : والا من نمیدونم فرق بین unsigned char و char تو چیه و این که کجا باس از کدوم استفاده کرد؛ چون تاجایی که میدونم نام گزاری کاراکتر ها، همون کد اسکی مد نظرمه، از ۰ شروع میشه تا ۲۵۵، کاراکتری ندیدم که کد اسکی منفی داشته باشه، اگه فهمیدید به ما هم بگید(ثواب داره جان داش cry )
 






 
 
String : خوب این نوع از متغییر تقریبا مثل char هستش، فقط با این تفاوت که متغییر های char فقط یه کاراکتر میتونن تو خودشون ذخیره کنن اما متغییر های String میتونن یه سری کاراکتر(یه رشته) رو تو خودشون ذخیره کنن.
مورد اول که معلومه، اما مورد دوم (char *myString) که میبینید یه * داره، که دقیقا مثل String هستش، حالا این که فرقشون چیه، دقیقا خاطرم نیست، اینو چند وقت پیش تو کتاب c خوندم،(فقط میدونم که برا پیام نور هستش) ، تو اون توضیح داده بود، منم الان یادم نیست، اگه شما فهمیدید فرق دو مورد زیر رو به من هم بگید.
 
String Functions

String Functions in Arduino

خوب تو اینجا میخوام توابع مرتبط با رشته رو براتون بگم(منبع این قسمت : String Functions in Arduino )
این قسمت هم بمونه برا بعد، اگه بخوام بگم خیلی بد توضیح میدم، چون خسته شدم، اگه کسی خواست بگه براش توضیح بدم. blush و مطلبش رو اینجا اضافه میکنم.

 







 
 
والا الان دلم میخواد سریع ماست مالی کنم مطب رو بره، خیلی مونده تا تموم بشه، اینایی که من دارم میگم همش اموزش c هستش، آموزش c هم که الی ماشاالله تو نت پره….وای خدا……… cry
 
Array : خب اینم یه نوع دیگه از متغییر ها، این متغییر موتونه چندین متغییر رو درون خودش نگه داره، هر کدوم از متغییر های int-float-double و… فقط یه مقدار میتونستن بگیرن ولی آرایه میتونه شونصد تا مقدار تو خودش ذخیره کنه.
 

  • ۱) آرایه از نوع int : 

همون طور که در زیر میبینید ما ۴ آرایه از نوع int تعریف کردیم، که همون طور که میبینید مثل توم متغییر های دیگه، آرایه رو هم میشه همون زمان تعریف مقدار دهی کرد و هم میشه بعدا، که در اینجا آرایه myInt1 بعدا مقدار دهی شده و بقیا آرایه ها هنگام تعریف مقدار دهی شده اند.
اون عدد داخل براکت [ ] هم اندازه آرایه رو تعیین میکنه که میتونید قرارش بدید یا قرارش ندید، ولی اگه مقدار آرایه رو تعیین کردی و تو این براکت عدد گزاشتی، حتما باید تعداد مقادیری که به اون آرایه میدی کوچکتر مساوی اندازه آرایمون باشه،
مثلا برا آرایه myInt2 ما اندازه آرایه رو تعیین نکردیم، لذا هر چند مقدار که بخوایم میتونیم به این آرایه بدیم و اطلاعات رو توش ذخیره کنیم.
ولی برا آرایه myInt3 ، اندازه آرایه رو هم تعیین کردیم و به همون اندازه مقادیر به آرایه دادیم، یعنی اندازه آرایه ۵ است، ما هم ۵ تا مقدار به آرایه دادیم، لذا دیگه نمیتونیم مقادیر دیگه ای به این آرایه بدیم.
آرایه myInt4 هم اندازش رو ۱۰ تعیین کردیم و ۵ خونه اول این آرایه رو مقدار دهی کردیم، و میتونیم در آینده ۵ خونه بعدی رو هم مقدار دهی کنیم یا نکنیم.

 
توجه مهم : در آرایه شمارش از ۰ شروع میشود، مثلا برا دسترسی به اولین خونه آرایه myInt1 باید از دستور [۰]myInt1 استفاده کنیم و برا دسترسی به خونه آخر آرایه فوق باید از دستور [myInt1[4 استفاده کنیم، و این در حالی هستش که ما داخل براکت [ ] اومدیم و عدد ۵ رو نوشتیم، این عدد بیانگر تعداد اعضای آرایه هستش و شمارش خونه های آرایه از ۰ تا ۴ هستش(در مورد آرایه myInt1  دارم صحیبت میکنم) و این ۰ تا ۴ میشه ۵ تا مقدار، فقط شمارش به جای شروع از ۱، از صفر شروع میشه..وسلااااااااااااااااااااااامممممممممممممممم. wacko
 

  • ۲) آرایه از نوع float : این مورد هم مثل آرایه های از نوع int هستش، فقط با این تفاوت که به جای int ما float قرار میدیم و اعدادی که تو آرایه ذخیره میشه، اعدادی اعشاری هستن.
  • ۳) آرایه از نوع char : اینم مثل دو مورد بالا هستش.
  • ۴) آرایه از نوع String در آردوینو : در زیر یه مثال از این مورد میبینید.
  • ۵) برا بقیه موارد انواع داده هم به همین صورت هستش.

در زیر کد های مورد ۲ و ۳ رو قرار میدم :

 
 








 

انتصاب انواع داده به یکدیگر در آردوینو

خوب تو این قسمت میخوایم به این موضوع بپردازم که اگه مثلا یه عدد از نوع int رو به یه عدد از نوع float انتصاب بدیم یا برعش یا انواع داده دیگه به همدیگه انتصاب بدیم چه اتفاقی میوفته(راستی انتساب درسته یا انتصاب؟ :-D)
البته این موضوع رو شما باس درک کنید و بفهمید وگرنه چیز حفظی ایی نیستش، درکش کنید buba
توجه ۱ : خودتون هم میتونید کد های زیر  رو تو بردتون پروگرام کنید و تغیر بدید، ور برید و … تا ت اون قسمت مربوطه مطلب براتون جا بیوفت کامل.
توجه ۲ : با توجه به گستردگی این مطلب ، اگه چیزی جا افتاد لطفا بگید تا به این مطلب اضافه کنم.
توجه ۳ : این مطلب، مخصوصا این قسمت، خیلی مهمه، خوب و دقیق بخونید.
توجه ۴ : این مطلب شاید یکم گیج کننده باشه براتون، اگه متوجه نشدید، تو گول بسرچید و مطالب و فیلم در این مزنیه زیاد هستش و چند تا پروژه خودتون تست کنید و انواع حالات و تفاوت ها رو ببینید تا کامل متوجه بشید، اگه هم خواستین ما درخدمتیم، ولی اگه خودتون با کد ها ور برید و نتیجه رو ببینید خیلی بهتره تا…
 

۱) int to int

تو کد زیر وقتی a1 رو تقسیم بر ۲ میکنی مقدارش میشه ۲ و این ۲ درون a2 قرار میگیره، که درست هستش و مشکلی نداره.
اما وقتی b1 بر دو تقسیم میشه مقدار حاصل از این تقسیم میشه ۲٫۵، ولی یه مشکل، عدد اعشاری رو که نمیشه تو یه عدد از نوع int ریخت، اتفاقی که اینجا میوفته اینه که این عدد ۲٫۵ رند میشه و به عدد ۲ تبدیل میشه و این عدد ۲ در b2 قرار میگیره.
حالا اگه مقادیر ۲٫۱ ، ۲٫۵ و ۲٫۹ رو به اعداد صحیح b3 ، a3 و c3 انتصاب بدیم، فقط قسمت صحیح این اعداد(۲) به این ۳ متغییر انتصاب داده میشود.
نکته : تو آردوینو هنگام انتصاب عدد اعشاری به یه عدد صحیح عدد به سمت پایین گرد میشود.

 
 

۲) float to int

خوب تو این قسمت ما اعداد اعشاری تو متغییر هایی از نوع float ذخیره کردیم، حالا میخوایم این عدد از نوع float رو انتصاب بدیم به یه عدد از نوع int ، بازم مشکل دارم، و اونم اینه که فقط قسمت صیحیح این عدد اعشاری(از نوع float) به متغییرمون(که از نوع Int هستش) انتصاب داده میشه، تو کد زیر هر سه متغییر a2,b2,c2 برابر ۴ میشن.

 

۳) int to float

تو این مورد مشکلات بالا پیش نمیاد، چون این عدد از نوع int رو هر بلایی سرش بیاری آخر سر یا عدد صحیح میشه یا اعشاری که اگه انتصابتش بدی به float مشکلی ایجاد نمیشه.
ولی مشکلی که ممکنه پیش بیاد laugh اینه که اگه یه عدد صحیح بر عدد صحیح دیگه ای تقسیم بشه حاصل هم یه عدد صحیح خواهد بود، برا حل مشکل باس یکی از این دو عدد (مقسوم یا مقسوم علیه) رو تبدیل به اعشاری کنیم :
تو کد زیر مقدار a2 برابر ۰ میشه، چون حاصل تقسیم دو عدد صحیح میشه صحیح و چون ۳ و a1 هر دو صحیح هستند لذا جاصل تقسیمشون عدد صحیح خواهد بود، و لذا مقدار ۰ در a2 ذخیره میشه و نه مقدار ۰٫۳۳
تو تقسیم b1 بر ۳ میبینید که ما اومدیم عدد ۳ رو به صورت ۳٫۰ نوشتیم یعنی تبدیل به عدد اعشاریش کردیم، حالا حاصل تقسیم b1 بر ۳٫۰ عدد اعشاری میشه، و لذا عدد اعشاری ۰٫۳۳ که حاصل این تقسیم هستش درون b2 قرار میگیره.
تو تقسیم c1 بر ۳ هم اومدیم کنار c1 نوشتیم (float) که یعنی عدد c1 رو float در نظر بگیر، و لذا مقدار ۰٫۳۳ درون c2 قرار میگیره.
نکته : هنگام تقسیم دو عدد صحیح بر هم و انتساب به یک عدد اعشاری باید حداقل یکی از دو عدد صحیح رو به عدد اعشاری تبدیل کرد(که در زیر کدش رو میبینید و در بالا هم توضیحش رو.)؛ حداقل باید یکی اعشاری بشه، حالا اگه هر دو رو هم اعشاری کردین فرقی نداره ولی یکی کافیه.

 
توجه مهم : ممکنه شما بخواین ۲ عدد (که یکیش حتما اعشاری هستش) رو بر هم تقسیم کنید و نتیجه حاصله هم صحیح باشه باید به صورت زیر عمل کنید :
همون طور که میبینید اومدیم و عدد اعشاری a2 رو بر یه عدد صحیح تقیسیم کردیم لذا جواب هم صحیح خواهد بود که همون طور میبینید جواب برابر ۱٫۱۷ میشد، یعنی a1 برابر ۱٫۱۷ میشه.
حالا تو خط بعد اومدیم و عدد اعشاری b2 رو بر عدد صحیحی تقیسیم کردیم ولی یه کار دیگه هم کردیم و اونم اینه که اومدیم و عدد b2 که اعشاری هستش رو با نوشتن دستور (int) در کنارش به عدد صحیح تبدیل کردیم، لذا این جا در واقع عدد ۳ بر ۳ تقسیم میشه و جواب ۱ میشه، یعنی b1 برابر ۱ میشه.

 
 

خوب فک کنم بحث یکم سنگین شد، برید یکم استراحت کنید و بعد موارد بالا رو که گفتم یکم تمرین کنید و ۳ تا صلوات برا هر کی که به اسلام خدمت کرده و میکنه بفرستید. good
خوب میبینم که خستگیتون در رفت، این پرسپولیس کیسه هم که به سایپا باخت dash ، فک کنم کمر همت بسته که از آخر اول بشه laugh.
 

۴) float to int

خوب تو این حالت هر چی عدد اعشاری به یه عدد Int انتصاب بدید فقط قسمت صحیح عدد تو متغییر از نوع int ذخیره میشه.(تو این که مشکلی نیست)
حالا اگه یه عدد اعشاری رو بخوایم بر یه عدد دیگه تقسیم کنیم(صحیح یا اعشاری) و نتیجه تقسیم رو به یه عد صحیح انتساب بدیم فرقی نداره که از (int) استفاده کنیم یا نه، چون اگه از (int) استفاده کنیم و عدد اعشاری رو به عدد صحیح تبدیل کنیم و بعد تقسیم کنیم حاصل هر چی باشه تبدیل به عدد صحیح شده و در متغییر صحیح ما قرار میگیره و اگه هم از (int) استفاده نکنیم عدد اعشاری ما بر اون یکی عدد تقسیم شده و حاصل تبدیل به عدد صحیح میشه و درون متغییر صحیح ما قرار میگیره(فک کنم یکم پیچیده شد pardon)، پروژه زیر رو ببینید متوجه میشید :

 
 

۵ و ۶) int to double و double to int

این دو مورد هم مصل مورد ۳و ۴ هستن، که برا تبدیل اعداد به double میتونید از دستور (double) استفاده کنیم.
 

۷ و ۸ ) float to double و double to float

تو این ۲ مورد تنها زمانی مشکل میتونه ایجاد بشه که بخواین یه عدد از نوع double (که تعداد ارقام اعشارش از ۷ رقم بیشتر هستش) رو به یه عدد از نوع float انتصاب بدید، تو این حالت چون حداکثر اعشاری که یه عدد از نوع float میتونه گه داره ۷ رقم هستش،بقیه ارقام اعشار از بین میره، مثلا اگه عدد ۱٫۶۶۶۶۶۶۶۶۶۶۶۶۶۶۶۶ رو به یه عدد از نوع float انتصاب بدیم فقط ۷ رقم اعشار این عدد تو متغییر float ما دخیره میشه.
 

۹) …

خوب فعلا برا نپیچوندن مطلب همین ۸ تا کافیه، چون شونصد تا متغییر داریم که بخوام انتصاب همشون به همدیگه رو بگم کلی طول میکشه خودتون برید اون حالت ها رو بررسی کنید و  اگه موردی رو مد نظرتون بود بگید تا توضیحاتش رو اینجا اضافه کنم.
 
 
توجه : ممکنه خودم هم این وسط قاطی کنم، اگه چیزی رو جا انداختم یا اشتب گفتم، اگه جایی رو کم توضیح دادم یا بد گفتم لطفا بهم بگید.
خوب این مطلب هم با تموم کم و کاستیش crazy  توم شد رفت، نمیدونم چرا جدیدا مطابی که مینویسم خیلی طولانی میشه…..ابته اون داستان اول مطلب رو هم حذف کنیم، بازم مطلب خیلی طولانیه و تعداد نظرات خیلی کم focus خداییش نتیجه گیری رو حال کردی laugh
داشای گلم فعلا با اجازتون ما بریم. bye

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

1) نظرات غیر فارسی به صورت خودکار حذف میشوند ( حداقل 5 حرف فارسی وارد کنید ).

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید ( طبیعتا لینک کدتون رو باید برای من بفرستید! ) : debian

4) پسورد فایل های سایت : www.dmf313.ir

  1. Avatar

    مهمان

    محمد

    سلام یکی منو ریست کنه از بس که مطلب کامل و جامع بود ماشاءالله،هنگگگگگگگ کردم dash2 dash pardon

  2. Avatar

    مهمان

    بابک

    سلام بر دوستان عزیز مخصوصا جناب دمیرچیلو.نحوه تبدیل char به string رو توضیح میدید؟من یک مقداری رو از یک تابعی که خروجیش از نوع char هست میگیرم ومیخوام همونو به ورودی یک تابع دیگه که ورودیش از نوع string هست بدم.باید چیکار کنم؟

  3. Avatar

    مهمان

    مهدی

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

  4. Avatar

    مهمان

    مهدی

    سلام مهندس…ایا میشه مقدار انالوگ رو تو پنجره نمایش خود اردینووتا یک رقم اعشار نمایش داد.فقط یک رقم؟؟

    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام – چرا نشه! – تابع print رو بررسی کن.

      • Avatar

        مهمان

        مهدی

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

  5. Avatar

    مهمان

    مهدی

    با سلام
    مهندس خسته نباشی
    خواستم بپرسم میشه داخل Array متغير گذاشت بعد مقدارشو تغییر داد(آردینو) ؟
    مثلا M1
    اول مقدارش 100 باشه
    بعدا بکنیم 200؟
    {int sPWMArray[] = {500,500,500,750,1250,M1,1250,750,500,500,500
    ممنون

    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام – دقیقا نفهمیدم منظورتو ولی مقدار یه متغییر رو میتونی به یه خونه از آرایه بدی.

  6. Avatar

    مهمان

    BlackBerry

    سلام مهندس
    این بار دومه که این پیام رو میفرستم
    من یه برنامه نوشتم که کامپیوتر تعدادی صدد صحیح از -200 تا 200 رو از طریف پورت usb serial برای ایرسونو ارسال میکنه و اردیونو یک استپر موتور رو به تعداد عدد دریافتی حرکت میده
    اول من این اعداد رو به صورت رشته ارسال میکردم و در اردیونو این رشته هارو به عدد تبدیل میکردم ولی اینجوری دوتا مشکل داشت
    1- به دلیل سرعت پایین اردینو این تبدیل تقریبا 2 ثانیه طول میکشید که باعث به وجود اوردن وقفه در حرکت موتور میشد ولی من نمیخاستم وقفه داشته باشه و به محض چرخیدن به میزان اولین عدد بدون وقفه به اندازه دومین عدد دریافتی بچرخه که این کار امکان نداشت
    2- اگر چند عدد پشت سر هم ارسال میکردم یا موتور نمیچرخید یا به اندازه بی نهایت میچرخید که اینم مشکل داره چون احتمال داره این اعداد تعداد خیلی خیلی زیادی باشن که موتور به اندازه تمام اون ها باید بچرخه
    من توی اینترنت چست و جو گردم و فهمیدم برای حل مشکلم باید این اعداد رو بصورت باینری ارسال کنم
    خوب توی کامپیوتر مشکلی برای تبدیل و ارسال اعداد بصورت باینری ندارم ولی توی اردیونو نمیتونم این اعداد رو بازگردانی کنم میخاستم ببینم میشه کمکم کنین

    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      من بیسیبم دیتا ارسال مکینم هر 200 میلی ثانیه دیتا ارسال میشه اونم دیتام حدود 30 بایت طول داره – تازه حدود 20 بایت هم دریافت میکنم.
      حتما یه جای پروژه یا کدتون مشکل داره – که هر 2 ثانیه یکبار دیتا رو میخونید – از تابع Dealy استفاده کردی ؟ – وگرنه باید با سرعتی بالا دیتا دریافت کنید – نمیدونم شاید هم مشکل از طرف برنامه تحت pc هستش که نوشتید.

      • Avatar

        مهمان

        BlackBerry

        #include
        const int steps = 200;
        Stepper myStepper(steps, 8, 9, 10, 11);
        void setup() {
        myStepper.setSpeed(10);
        Serial.begin(250000);
        }
        void loop() {
        if (Serial.available() > 0) {
        int thisChar = Serial.readString().toInt();
        myStepper.step(thisChar);
        }
        }
        این کدم توی اردیونو هستش

  7. Avatar

    مهمان

    BlackBerry

    سلام مهندس جان
    خسته نباشی
    من از طریق کانپیوتر میخام چند تا عدد صحیح از -200 تا 200 رو برای اردیونو ارسال کنم که این اعداد تعداد گردش یک استپر موتور رو مخص میکنه
    برنامه ای که نوشتم از سمت کامپیوتور با c# هستش و برای اردیونو که همون c
    همه درسته و مشکلی که هست اینه که وقتی دو تا عدد ارسال میشه موتور به اندازه میچرخه و یک وقفه تقریبا دو ثانیه ای داره و به میزان عدد دوم میگرده که من میخام بدونه کوچک ترین وقفه باشه و مشکل بعدی اینهکه اگر بیشتر از 5 تا عدد داده بشه اردیونو یا موتور رو نمیچرخونه یا بی نهایت میچرخونه
    من توی اینترنت گشتم یکی دیگه مشکل من رو داشت که برای ارسال از طریق کامپیوتر ع
    اعداد رو به بایت تبدیل میکرد منم این کار رو کردم ولی کد اردیونو رو نتونستم بنویسم میخاستم ببینم میتونید کمکم کنید

  8. Avatar

    مهمان

    علی اکبر

    تبدیل رشته به عدد چطوری هست ؟

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سرچ کنی سریعتر به جواب میرسی :
      convert string to int in c++

  9. Avatar

    مهمان

    ALI

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-خب فرض کنید دو آرایه a و b داریم – میخوام مقادیریه خونه آرایه a رو به B نسبت بدم که فرم کلیش به صورت زیر هستش مثلا اومدم مقدار خونه 1 آرایه a رو به خونه 0 ام آرایه b دادم :
      b[0] = a[1];

  10. مهدی دمرچیلو

    نویسنده این مطلب

    مهدی دمرچیلو

    در پاسخ بکی از دوستان که پیامی برام فرستاده بود مبنی بر این که متغیر بولین 1 بیت حافظه مصرف میکنه و نه 1 بایت
    A boolean holds one of two values, true or false. (Each boolean variable occupies one byte of memory.)
    https://www.arduino.cc/en/Reference/BooleanVariables

  11. Avatar

    مهمان

    رضا

    سلام مهندس خیلی گلی
    بیزحمت توابع string رو توضیح میدین

  12. Avatar

    مهمان

    بهزاد

    سلام مهندس .
    سوال فنی . داخل متلب یه تابع هست به نام str2num که استرینگ رو به عدد تبدیل می کنه یعنی در واقع اعداد داخل رشته رو استخراج می کنه و حروف و غیره رو حذف می کنه . داخل اردوینو واسه همچین کاری راهی هست که بشه اعداد داخل رشته رو استخراج کنیم؟
    ممنون میشم راهنمایی بفرمایید . wink

  13. Avatar

    مهمان

    علیرضا اهنی

    سلام.
    char هشت بیت هست
    حالا اگر unsigned یا بدون علامت باشه هر ۸بیت مثبته پس از ۰-۲۵۵ مقدار میگیره (چون ۸ بیت یعنی ۸ تا صفر و ۱ پس ماکزیممش میشه ۱۱۱۱۱۱۱۱ که توی مبنا ۱۰ میشه ۲۵۵ )
    اگر هم علامت دار باشه یک بیت برای گذاشتن علامت مصرف میشه و ۷ بیت میمونه با ۷ بیت هم نهایتا میشه ۱۲۸ تا عدد رو ذخیره کرد و بیت آخر هم نشون دهنده علامته یعنی میشه از -۱۲۸ تا ۱۲۷

  14. Avatar

    مهمان

    سید

    سلام مهندس جان براتون فرستادم چکار میخوام انجام بدم دستتون رسیده؟ چون با کامپیوتر فرستادم ، دو بار اما اینجا نمیبینمش

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-چیو فرستادی؟

    • Avatar

      مهمان

      سید

      سلام ، کاری که می خوام انجام بدم چون رشته هاش خیلی بزرگه نتونستم رو گوشی بیارم بفرستم ،حال عیب نداره ما ول کنت نیستیم برا شروع مهندس جان یه رشته ۶۰ تایی از کد هگز مثل این:
      (۷E 00 64 45…7E)
      چطور میشه تو یه ارایه گذاشت

      • مهدی دمرچیلو

        نویسنده این مطلب

        مهدی دمرچیلو

        خب مطلب ارتباط سریال تو آردوینو رو تو سایت گزاشتم – ۲-۴ تا جلسه هستش فک کنم – توابعش رو هم توضیح دادم.

  15. Avatar

    مهمان

    سید

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

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

  16. Avatar

    مهمان

    مطالب با مسال جا می افته پس مسال علمت پر سمر باد

    rtfm

  17. Avatar

    مهمان

    محمد

    ۳ ستاره …… rofl
    بنظرم همه باید به همت و تلاش شما قبطه بخورن تا پیروز بشن///
    با تشکر …. ایشالا قسمت ۲۰ اموزش آردینو رو بزارید ما هم فیض ببریم//
    با تشکر. laugh

  18. Avatar

    مهمان

    اشکان

    مهندس من یه برنامه نوشتم، تحلیل کامپایلر آردوینو این شد:
    Sketch uses 8,386 bytes (25%) of program storage space. Maximum is 32,256 bytes.
    Global variables use 392 bytes (19%) of dynamic memory, leaving 1,656 bytes for local variables. Maximum is 2,048 bytes.
    بعد اومدم ۵ تا متغیر float بهش اضافه کردم و مقدار دادم. تحلیلش باز هم همین شد. یعنی انگار هیچ حجمی رو اشغال نکردن !!
    چطور ممکنه ؟؟؟

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      برنامت رو بفرست ببرسی کنم.

    • Avatar

      مهمان

      اشکان

      مشکل حل شد، مشخص شد که حافظه ای که نشون میده حافظه فلش هست، ولی متغیرها در حافظه SRAM ریخته میشن، ممنونم yes

  19. Avatar

    مهمان

    رشید

    char x = 0;
    unsigned char y = 0;
    void setup()
    {
    Serial.begin(9600);
    for (int i=0; i <= 255; i++)
    {
    Serial.print(i);Serial.print("t");Serial.println(x);
    x++;
    }
    for (int i=0; i <= 255; i++)
    {
    Serial.print(i);Serial.print("t");Serial.println(y);
    y++;
    }
    }
    void loop() {
    }
    فرق
    char
    با
    unsigned char

  20. Avatar

    مهمان

    رشید

    والا من از زمان غاجار تا الان فرق بین bool و boolean رو نفهمیدم، برید تحقیق کنید و فهمیدید بیاید و به ما هم بگید.

    فرقی نداره…

  21. Avatar

    مهمان

    رشید

    سلام مهندس ، خسته نباشید
    یه اشتباه کوچیک اینه که int یه متغیر ۱۶ بیته و یک بیت سمت چپ مشخص میکنه که مثبته یا منفی اگه اشتباه نکنم ۱ منفی و ۰ مثبت و ۱۵ بیت دیگه مقدار اون رو تعیین میکنه در مورد unsigned int چون دیگه منفی نیست کل ۱۶ بیت میشه داده و از ۰ تا ۶۵,۵۳۵ (۱۶ به توان ۲ منهی ۱) را پوشش میده
    همینطور long میشه -۲,۱۴۷,۴۸۳,۶۴۸- تا ۲,۱۴۷,۴۸۳,۶۴۷٫
    و unsigned long از ۰ تا ۴,۲۹۴,۹۶۷,۲۹۵ (۳۲ به توان ۲ منهی ۱)
    در مورد short سایت آردوینو تو ضیح میده که در همه مدل های آردینو ۱۶ بیته منفی و مثبت هم داره
    و تفاوت با int اینه که int در uno , … ب ۱۶ بیته و در سری های arm , … ب ۳۲ بیت …
    امیدوارم اشتباه نکرده باشم و تونسته باشم کمک کنم
    پ ن : قبلن هم مطلبی در یه پست دیگه گذاشتم و البته منتشر نشد!!!

  22. Avatar

    مهمان

    mohammad

    Mohandes Awliiii to yedoune bashismile

  23. Avatar

    مهمان

    محمد

    سلام
    مهندس دستتون درد نکنه هم بابت مطالب مفید هم بابت تایپ این همه مطلب.خیلی ممنون

  24. Avatar

    مهمان

    علیرضا

    مثل همیشه عالی

  25. Avatar

    مهمان

    علیرضا

    سلام.عالی بود.خیلی خیلی ممنون

  26. Avatar

    مهمان

    حمید

    خدا قوت……

  27. Avatar

    مهمان

    محمد رضا

    سلام خسته نباشید، خدا قوت.
    این کد زیر رو برای تبدیل float to int اجرا کردم، یکی قبل از انجام محاسبات، اعداد را به صحیح
    تبدیل میکند ، دومی اول محاسبه رو انجام میده بعدش حاصل رو به صحیح تبدیل میکنه.
    نوشته بودین:
    /*”حالا اگه یه عدد اعشاری رو بخوایم بر یه عدد دیگه تقسیم کنیم(صحیح یا اعشاری) و نتیجه تقسیم رو به یه عد صحیح انتساب بدیم فرقی نداره که از (int) استفاده کنیم یا نه، چون اگه از (int) استفاده کنیم و عدد اعشاری رو به عدد صحیح تبدیل کنیم و بعد تقسیم کنیم حاصل هر چی باشه تبدیل به عدد صحیح شده و در متغییر صحیح ما قرار میگیره و اگه هم از (int) استفاده نکنیم عدد اعشاری ما بر اون یکی عدد تقسیم شده و حاصل تبدیل به عدد صحیح میشه و درون متغییر صحیح ما قرار میگیره “*/
    کد زیر را تست کردم ، جواب ها متفاوت شد، کجای کار رو درست متوجه نشدم؟
    void setup() {
    Serial.begin(9600);
    int a1,b1;
    float a2=3.68,b2=3.68;
    a1=a2/1.3;
    b1=(int)b2/(int)1.3;
    Serial.println(a1); جواب =2
    Serial.println(b1); جواب=3
    }
    void loop() {
    // put your main code here, to run repeatedly:
    }

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      کدت رو برام زیپ کن و لینکش رو بزار اینجا
      ولی چیزی که تو آردوینو هستش برا نمایش دادن اطلاعات دیگه نیاز به تبدیل فرمت دیتا نیستش بر خلاف کدویژن

  28. Avatar

    مهمان

    مهدی

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      متاسفانه مطلب کار نمیکنم و وقت این کار که دانلودش کنم و نصبش کنم و … فعلا ندارم. pardon

  29. Avatar

    مهمان

    ali

    rasti y ja didam k y moteqayer ro injoori tariff karde bood
    volatile int X;
    in volatile chiye
    age rajebe volatile ham y tozih bedin mamnoon misham

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      نمیدونم سرچت خوبه یا بد ولی باید بگم که اگه بخوای منتظر بقیه باشی تا جواب سوالت رو بدن هم باید خیلی صبر کنی(تا طرف بیاد و جواب بده و بازم معلوم نیست که بلد باشه نباشه جواب خوبی بده بنده و …)، و بر فرض این که طرف هم جوابت رو داد، الان تو با این کار خودت رو فقط به جواب این طورف محدود کردی و دریای عظیم علم و دانش(اینترنت) رو در نظر نگرفتیو خودت رو محروم کردی، تازه کلی هم اعصابت خورد میشه، هی سوال بپرس هی صبر کن بپرس صبر صبر بپرس و…
      لذا سعی کن سرچ کن، اگه سرچت ضعیف باشه(یعنی در انتخاب کلمات برای جستوجو ضعیف باشی)
      امید وارم داش گل ما از دست ما بابت این داستان های بالا ناراحت نشه،
      http://barnamenevis.org/showthread.php?340631-Volatile-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-C-%D8%A8%D9%87-%DA%86%D9%87-%D9%85%D8%B9%D9%86%D8%A7%D8%B3%D8%AA-%D8%9F%D8%9F%D8%9F%D8%9F%D8%9F&s=7db01827a45a9e3eeed4163aa084c868

  30. Avatar

    مهمان

    ali

    kheili khob bood daste shoma dard nakone faqat khastam tashakor konam
    age emkan dashte bashe haminjoori baqie jalase haro ham amoozesh bedin
    dg harf nadare
    bazam mamnoon

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      مطلب چی بزارم؟(مطلب آموزش و نه پروژه)

  31. Avatar

    مهمان

    محسن

    آقا واقعا دست مریضات
    دستت درد نکنه
    واقعا مطالبت عالی بودن_حتی از سایت های دیگه
    کامل، گویا،رسا
    خواستم فقط تشکر کنم ازت

  32. Avatar

    مهمان

    علی

    با عرض سلام و خسته نباشید
    میخواستم خواهش کنم طریقه اتصال درایور hx711 که درایور لودسل هست به آردیونو برام توضیح بدید
    خیلی ممنون

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      والا کار نکردم و نحوه کارش رو بلد نیستم و وقت یادگیری و کار عملیش رو هم ندارم فعلا…..اشاالله امشب یا فردا میریم کربلا smile

  33. Avatar

    مهمان

    mohammad hassan

    سلام
    برای تعریف ورودی جهت دریافت مقدار باید از چه تابعی استفاده کنیم؟؟
    ممنون از اینکه وقت میذارید…یا علی

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      تو جلسات اولیه فک کنم توضیح دادم…یه سری تابع بود با نام “دیجیتال رید” و “دیجیتال ورایت”…
      بگرد پیدا نکردی خبرم کن…

  34. Avatar

    مهمان

    milad.zrf

    سلام
    تابع هست که بتونه یه کلمه(String) و تو یه جمله(String) پیدا کنه و جای اون کلمه رو برگردونه؟

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      فک کنم مطلب رو خوب نخوندی laugh
      ببین تو لینک زیر تابش هستش یا نه
      اگه انگلیسیت ضعیفه بگو توابع رو توضیح بدم….البته متنش خیلی خیلی سادس
      https://www.arduino.cc/en/Reference/StringObject

      • Avatar

        مهمان

        milad.zrf

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

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

          چرا حالا میزنی laugh
          ما که چیزی نگفتیم
          heart

  35. Avatar

    مهمان

    mohammadamin

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

  36. Avatar

    مهمان

    مجتبی

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