به نام خدا : سلام خدمت شما دوستان گل ، تو این مطلب از آموزش آردوینو که جلسه ۴ امش هستش ، میخوام به مبحث آموزش ارتباط سریال در آردوینو بپردازم و پروژه آردوینو هم براتون میزارم تا بیشتر و بهتر یاد بگیرید ، مشکلی سوالی چیزی هم بود حتما در نظرات مطرح کنید.
خوب اگه برید سایت arduino.cc میبینید که تو قسمت ارتباطاتش ۲ تا پروتکل ارتباطی به نام های Serial و Stream وجود داره که تو این مطلب انشاالله میخوام درباره پروتکل Serial (سریال ) در آردوینو ( آردینو
) صحبت کنم و مختون رو بخورم
آموزش پروتکل سریال در آردوینو
برا ارتباط آردوینو با کامپیوتر یا با چیزای دیگه (که مثلا از آردوینو به کامپوتر اطلاعات بفرستیم و بلعکس، اطلاعات دریافت کنیم) میایم و از پروتکل سریال استفاده میکنیم.
توابع پروتکل سریال در آردوینو : این پروتکول Serial تابع مابع زیاد داره(۲۰ تا ) ممکنه مطلب یکم طولانی بشه….
…. لذا کمربنداتون رو ببنید و از رو صندلی بلند نشید تا مطلب رو نخوندید
if(Serial)
available
begin
end
find
findUntil
flush
parseFloat
parseInt
peek
print
println
read
readBytes
readBytesUntil
readString
readStringUntil
setTimeout
write
serialEvent
یه مثالکی از دو تابع گفته شده بالا
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void setup() { //این مورد رو هم بهتون توضیح دادم که... //تنظیم نرخ انتقال داده Serial.begin(9600); } void loop() { //شرط زیر زمانی درست میشه که دیتایی از طرف //فرستنده به سمت گیرنده ارسال بشه if (Serial.available() > 0) { //دریافت اطلاعات ارسالی از طرف فرستنده //نمایش اطلاعات دریافت شده } } |
یه ـــمـــثـــالـــ برا نمایش تفاوت بین تابع Serial.print با Serial.println
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
void setup() { Serial.begin(9600); Serial.println(78, BIN); // "1001110" Serial.println(78, OCT); // "116" Serial.println(78, DEC); // "78" Serial.println(78, HEX); // "4E" Serial.println(1.23456, 0); // "1" Serial.println(1.23456, 2); // "1.23" Serial.println(1.23456, 4); // "1.2346" Serial.print("\n\n"); Serial.print(78, BIN); // "1001110" Serial.print("\n"); Serial.print(78, OCT); // "116" Serial.print("\n"); Serial.print(78, DEC); // "78" Serial.print("\n"); Serial.print(78, HEX); // "4E" Serial.print(1.23456, 0); // "1" Serial.print("\n"); Serial.print(1.23456, 2); // "1.23" Serial.print("\n"); Serial.print(1.23456, 4); // "1.2346" Serial.print("\n"); Serial.print("\n\n"); Serial.print("1"); Serial.println("2"); Serial.print("3"); Serial.print("4"); Serial.print("5"); Serial.print("6"); Serial.println("7"); Serial.print("8"); } void loop(){} |
پروژه بالا(کد های بالا) رو در زیر توضیح میدم :
خطوط ۵ تا ۱۱ اطلاعاشون رو نشون میدن و چون تابع هاشون از نوع Serial.println هستش لذا نیاز نیست دستور رفتن به خط بعدی رو ارسال کنیم.(این تابع بعد از نمایش دیتا به طور خودکار دستور رفتن به خط بعدی رو ارسال میکنه)
تو خط ۱۳ اومدیدم و کد زیر رو نوشتیم که یعنی رفتن به ۲ سطر بعدی (بره ۲ خط بعدی) و به هر تعداد که کد n\ رو داخل اون " " بنویسیم به همون تعداد میره خط بعد ، چون در کد زیر ۲ بار نوشتیمش لذا میره ۲ خط بعدی ، و اگه مثلا ۵ تا میزاشتیم میرفت ۵ خط میرفت جلو.
1 |
Serial.print("\n\n"); |
اما خطوط ۱۵ تا ۲۷ چون از نوع Serial.print هستن بعد از نمایش دیتا دستور رفتن به خط بعد رو ارسال نمیکنن و ما باس خودمون این کار انجام بدید و اگه توجه کنید بعد از هر بار نمایش دیتا توی این خطوط دستور زیر رو قرار دادیم که این دستور باعث رفتن به خط بعدی(سطر بعدی) میشه.
اگه توجه کنید بین خط ۲۱ و ۲۲ نگفتم بره خط بعد ؛ جواب پروژه رو ببینید ، مقدار این دو تا تابع پشت سر هم و به صورت ۴E1 نمایش داده شده
1 |
Serial.print("\n"); |
تو خطوط ۳۱ تا ۳۸ هم اگه توجه کنید هر جا که به تابع Serial.println رسیدیم ، این تابع بعد از نمایش اطلاعات دستور رفتن به خط بعد رو صادر کرده.
اینم از جواب پروژه بالا(کد های بالا) >>> فعلا کاری نداشته باشید جواب رو چطور ابردم ، تو جلسات بعدی کامل توضیح میدم.
توجه مهم : بعضا دیده شده که پروژه ها تو پروتئوس مثل آدم کار نمیکنن و دقیقا همون جوابی رو که میخوایم رو بهمون نمیدن که این مشکل از پروتئوس هستش و نه از پروژه ما....همین الان همین مشکل برخودم و در عمل تست کردم و فهمیدم که مشکل از پروتئوس هستش. ، البته دفه ی اولم نیست که همچین مشکلی با پروتئوس پیدا میکنم ، کلا تو شبیه سازی ماژول ها , lcd های گرافیکی و قطعات جدید مثل همین آردوینو زیاد خوب عمل نمیکنه.
و باس عملی تست کنیم.
خب خدا رحم کنه ، ۴ تا تابع رو گفتم شد 2130 واژه (تعداد خطوط این مطلب) ، حالا بقیه توابع رو بخوام بگم چقدر میشه ، انشاالله که با حوصله میشینیم و بقیش رو مینویسیم…..
اگه جایی چیزی رو نگفتم جا انداختم کم گفتم و… لطفا بهم بگید.
امیدوارم از این مطلب ناچیز خوشتون اومده باشه >>>> اگه اومد تعجیل در فرج آقا و شادی روح شهدا و امام شهدا ۳ صلوات بفرستید.(هزینه استفاده از این مطلب)
فعلا یا علی تا مطلب بعد
مهمان
سلام
ی مشکل ساده اما برای من بزرگ پیش اومده…تو رو خدا کمکم کنید …من به پایه انالوگ اردوینو due ، یه ولتاژ در حد پونصد میلی ولت میدم ولی دقت ADC خیلی پایینه و میخوام ولتاژ رفنرسشو (ازپایه Aref )بیارم پایین نمیشه …….ینی از دستور analog reference نمیشه ولتاژی پایین تر از ۳.۳ ولت داد . ینی وقتی external میکنمش خطا میده..چه کنم ؟ ولتاژ رفرنسی در حد 800 میلی ولت میخوام بشه….
مهمان
سلام ودرودوخسته نباشیدخدمت استاد
گرامی ببخشید باتوجه به گفته شما بنده یاهرکس دیگه اولین تابع روکه بایددربرنامه نویسی آردوینوبااون شروع کنه وکدهاروبنویسه چی هست ؟
مهمان
عزیزجان سلام
میخوام ب وسیله پورت سریال اردویتو یه رله رو خاموش و روشن کنم ینی مثلا تو سریال مانیتورش نوشتم روشن روشن بشه خاموش زدم خاموش بشه
مهمان
دمتون گرم
مهمان
اقا سلام
یه سوال داشتم
میشه چنتا سنسور ب اردوینو وصل کنم حالا چ با خروجی انالوگ ک سنسورو ب پایه انالوگ وصل کنم چ دیجیتال ک ب پایه های دیجی تال وصل کنم و اطلاعات و داده هاشونو همه رو ب صورت هم زمان با ارتباط سریال به کامپیوتر ارسال کنم؟
نویسنده این مطلب
سلام / بله میشه.
فقط باید به پروتکول ارتباطی سنسورها هم دقت کرد، مثلا جفت سنسورا uart باشن و شما از Uno استفاده کنید، uart کم میارید و باید میکروتونو تغییر بدید