کنترل گنو/لینوکس با آردوینو(پارت ۳)

خب طبق آموزش های قبلی(پارت اول)و(پارت دوم)وعده ما شرح کدهای کار بود.امیدواریم که این آموزش رو علاقمندان به علوم رایانه و الکترونیک بسط بدهند و با ما به اشتراک بگذارند.کد ما شامل ۲ بخش بود که اولی در سمت رایانه اجرا میشد و دومی در سمت سخت افزار،و این نکته رو قبل از شروع بگم که کدها رو بصورت عامیانه شرح خواهم داد تا برای افراد مبتدی قابل فهم تر باشد.

در صورت نیاز کد Bash رو از باکس زیر دریافت نمایید.

دانلود کد بش

شرح کد:

#Set permisions
sudo chmod o+rwx /dev/ttyUSB0

کد بالا اجازه دسترسی برای خواندن و نوشتن به پورت سریال رو به ما میده.طبق آموزش پارت دوم شما باید به جای ttyUSB که ممکنه درسیستم شما به یک نام دیگه باشه از کد زیر برای شناسایی استفاده کنید و مقدار صحیح رو وارد نمایید.

 sudo dmesg | grep tty

خب کار بعدی هماهنگ کردن نحوه ارسال و سرعت ارسال بیت ها میباشد که طبق کد زیر باید تنظیم شود(این تنظیم با پیش فرض آردوینو هماهنگ شده و در صورتی که در سمت سخت افزار مقادیر رو تغییر دادید باید این کد هم با همان مقادیر تنظیم شود) نرخ ارسال در این دستور روی ۹۶۰۰ تنظیم شده است.

stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb -icanon min 1 time 1

نوبت به ایجاد یک حلقه میرسد.

while true; do

این دستور یک حلقه بی پایان برای ما میسازد و میتوانیم دستوراتمان رو داخل این حلقه قرار بدیم تا منظم اجرا شوند فقط این دستور در پایان باید با نوشتن done  بسته شود.برای خواندن اطلاعات پورت سریال که به رایانه ارسال میشه میتونیم از دستور زیر استفاده کنیم این دستور معین میکنه که اطلاعات از کدام پورت خوانده شود:

read input < /dev/ttyUSB0

حال برای خواندن اطلاعات و استفاده و ذخیره آن برای استفاده در شروط لازم هست که جایی این اطلاعات موقت نوشته شود و این دستور به ما کمک میکند تا اینکار را انجام دهیم:

echo $input

این دستور شروع به خواندن مقدار input میکند.آپشن این دستور به شکل رایج اینگونه می باشد:

echo [option(s)] [string(s)]

بعد اینکه تونستیم مقادیر پورت سریال رو تنظیم کنیم و بتونیم اطلاعات رو از آن استخراج کنیم نوبت به ایجاد کیس بندی میرسد که بتونیم داده های ورودی رو شروط بندی کنیم.برای اینکار از دستور زیر کمک میگیریم:

case "$input" in

این دستور با توجه به مقادیری که دریافت میکنه و مقادیری که به شروطمان میدهیم شروع به کار خواهد کرد.فقط این نکته رو بهش اشاره کنم که آخر این دستور با esac بسته میشود.همچنین برای بستن پایان هر شرط(( ;; ))را باید قرار دهیم.اولین شرط کیس بندی ما مقدار ۲۰۰ خواهد بود که این عدد به محض دریافت ۳ عمل رو برای ما انجام خواهد داد.برای ایجاد شرط کافیه فرمت نوشتاری به این شکل باشه تا دستور کیس متوجه اون بشه:

"200")

خب بعد از دریافت عدد ۲۰۰ اولین کار بیرون آوردن مقدار صدا از حالت Mute هست که ممکن هست قبلا برای سیستم اتفاق افتاده باشه(اگر این دستور قرار داده نشود به اصطلاح یک باگ ایجاد خواهد شد!)و سیستم با اینکه در عمل مقدار ولوم صدا رو زیاد میکنه ولی صدایی در خروجی نخواهیم داشت پس لازم هست که این دستور رو قبل از هر چیزی اجرا کنیم:

amixer set Master unmute

کد بعدی قابلیت افزایش صدا رو از طریق ابزار xdotool  به ما خواهد داد:

xdotool key XF86AudioRaiseVolume

با این دستور مقدار صدا (در هر بار لمس دگمه افزایش صدا در سخت افزار) بیشتر خواهد شد.

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

echo Volume increased 

خب دیگه کدهای تکراری رو مجدد شرح نمیدم ولی بریم سراغ دستور بعدی که با عدد ۱۰۰ اجرا میشه:

xdotool key XF86AudioLowerVolume

با این دستور مقدار صدا کاهش خواهد یافت.

دستور بعدی مقدار ورودی ۶۰ هست که به محض دریافت مقدار صدا رو در حالت Mute  قرار خواهد داد.

xdotool key XF86AudioMute

بعد از این کار یک وقفه یک ثانیه ای قرار میدهیم که البته اجباری برای نوشتن آن وجود ندارد ولی برای اینکه مدام هی دستور قطع صدا صادر نشه این وقفه رو قرار داده ایم.

sleep 1

خب تا اینجای کار عملیات صدا رو انجام دادیم ولی برای ورودی های ۲۵۰ و ۱۵۰ عملیات دیگری رو تعریف خواهیم کرد!به محض دریافت وردی ۲۵۰ دستور افزایش نور پس زمینه LCD یا LED رو تجربه خواهیم کرد.(این حالت روی مانیتورهای CRT جواب نخواهد داد.)

xdotool key XF86MonBrightnessUp

خب برای کاهش نور زمینه هم میتوان از دستور زیر استفاده کرد که با دریافت کد ۱۵۰ از ورودی فعال خواهد شد:

 xdotool key XF86MonBrightnessDown

برای اینکه تعداد کلید های وردی ما در سمت سخت افزار ۴ عدد هست و اونها رو دوکاره فرض کرده ایم،در حقیقت باید بین حالت نور پس زمینه و تنظیمات صدا سوییچ کنیم.برای ا ینکه شاهد این باشیم که در چه حالتی قرار داریم دو عدد نوتیفیکیشن آماده کرده ایم.یکی برای انتخاب حالت صوت و یکی برای انتخاب حالت نور پس زمینه.

با دریافت کد ۱۰ از ورودی سریال حالت نور پس زمینه انتخاب و با دستور زیر نوتیفیکیشن مورد نظر نمایش داده خواهد شد(البته سوییچ حالات در سمت سخت افزار اتفاق میوفته و در حقیقت بش فقط اون رو به ما اطلاع خواهد داد):

notify-send Mode "Brighness selected"

و برای انتخاب صوت این دستور رو استفاده میکنیم:

notify-send Mode "Sound selected"

در حقیقت کل کد سمت بش برای ما همین خواهد بود.مگر اینکه بخواهید کدهای بیشتر و دستورات متعددی رو اجرا کنید که این بستگی به خودتان دارد.همچنین فیلمی از عملکرد سمت رایانه رو براتون آماده کردیم که در زیر میتونید ببینید.

مشاهده در آپارات

در پارت بعدی،فیلم عملکرد دستگاه و شرح کد سمت سخت افزار(آردوینو)را ارائه خواهیم کرد.

موفق و پیروز باشید.

 

فرم نظر دهی


تصویر امنیتی جدید تصویر امنیتی
103862
TodayToday122
YesterdayYesterday213
This_WeekThis_Week825
This_MonthThis_Month3456
All_DaysAll_Days103862