نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
محرم

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

انجمن های تخصصی برق و الکترونیک ECA

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

تعداد مطالب : 341 تا
جنگ ما فتح قدس را به همراه خواهد داشت. [ امام خمینی (ره) ]
ارسال دیدگاه

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

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

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

4) نظرات حاوی کد برنامه نویسی تایید نمیشوند ( قالب سایت بهم میریزه )

  1. مهمان

    جمشید

    سلام. میخوام یه آرایه با سایز متغییر داشته باشم که براساس ورودی کاربر تغییر میکنه ؟

  2. مهمان

    HEY

    اقا اینطور که من فهمیدم سایز short و short int یکی هست و فرقی در کل با هم ندارن ولی سایز int بر عکس اون دوتا که 2 بایت هستن ،4 بایته
    اینو با تابع sizeofهم تو c میشه فهمید

  3. مهمان

    پدرام

    با سلام و تشکر بابت مطالب خوبت لطفا رنج اعداد صحیح در UNO ر اصلاح کن: {بین ۳۲,۷۶۸ تا ۳۲,۷۶۷-} rtfm
    درستش :بین ۳۲,۷۶۷ تا ۳۲,۷۶۸- هست
    منبع: https://www.arduino.cc/reference/en/language/variables/data-types/int/

  4. مهمان

    a

    با سلام لطفا در مورد nod 32 هم هر چی میدونی برای همه دوستان بزار هم پروزه هم کد نویسی هم راه اندازی بلوتوت با چند مثال ممنون

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

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

      سلام / nod 32 چیه دیگه؟

      • مهمان

        عرفان

        منظورش همون nodemcu هست

      • مهمان

        saeed

        آنتی ویروسه 😉

  5. مهمان

    صالحی

    سلام مهندس جان
    ممنون از مطالب مفیدت
    مهندس من یه مداری ساختم که رله ها رو کنترل میکنه
    دستوراتش رو از وای فای میگیره از طریق esp8266
    از طریق آپ wifi controler براش میتونم دستور بفرسته
    یه آی سی دی اس 1307 هم گذاشتم
    حالا تاریخ و زمان رو از آی سی میخونم
    اما نمیتونم بفرسام به موبایل

  6. مهمان

    محمد

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

  7. مهمان

    بابک

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

  8. مهمان

    مهدی

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

  9. مهمان

    مهدی

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

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

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

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

      • مهمان

        مهدی

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

  10. مهمان

    مهدی

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

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

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

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

  11. مهمان

    BlackBerry

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

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

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

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

      • مهمان

        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);
        }
        }
        این کدم توی اردیونو هستش

  12. مهمان

    BlackBerry

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

  13. مهمان

    علی اکبر

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

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

      مهدی دمرچیلو

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

  14. مهمان

    ALI

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

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

      مهدی دمرچیلو

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

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

    مهدی دمرچیلو

    در پاسخ بکی از دوستان که پیامی برام فرستاده بود مبنی بر این که متغیر بولین 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

  16. مهمان

    رضا

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

  17. مهمان

    بهزاد

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

  18. مهمان

    علیرضا اهنی

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

  19. مهمان

    سید

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

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

      مهدی دمرچیلو

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

    • مهمان

      سید

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

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

        مهدی دمرچیلو

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

  20. مهمان

    سید

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

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

      مهدی دمرچیلو

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

  21. مهمان

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

    rtfm

  22. مهمان

    محمد

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

  23. مهمان

    اشکان

    مهندس من یه برنامه نوشتم، تحلیل کامپایلر آردوینو این شد:
    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 بهش اضافه کردم و مقدار دادم. تحلیلش باز هم همین شد. یعنی انگار هیچ حجمی رو اشغال نکردن !!
    چطور ممکنه ؟؟؟

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

      مهدی دمرچیلو

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

    • مهمان

      اشکان

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

  24. مهمان

    رشید

    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

  25. مهمان

    رشید

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

    فرقی نداره…

  26. مهمان

    رشید

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

  27. مهمان

    mohammad

    Mohandes Awliiii to yedoune bashismile

  28. مهمان

    محمد

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

  29. مهمان

    علیرضا

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

  30. مهمان

    علیرضا

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

  31. مهمان

    حمید

    خدا قوت……

  32. مهمان

    محمد رضا

    سلام خسته نباشید، خدا قوت.
    این کد زیر رو برای تبدیل 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:
    }

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

      مهدی دمرچیلو

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

  33. مهمان

    مهدی

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

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

      مهدی دمرچیلو

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

  34. مهمان

    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

  35. مهمان

    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

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

      مهدی دمرچیلو

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

  36. مهمان

    محسن

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

  37. مهمان

    علی

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

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

      مهدی دمرچیلو

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

  38. مهمان

    mohammad hassan

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

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

      مهدی دمرچیلو

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

  39. مهمان

    milad.zrf

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

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

      مهدی دمرچیلو

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

      • مهمان

        milad.zrf

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

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

          مهدی دمرچیلو

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

  40. مهمان

    mohammadamin

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

  41. مهمان

    مجتبی

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