این آموزش در ادامه آموزش راه اندازی درایور gpio-sunxi می باشد
در آموزش قبل با راه اندازی درایور GPIO و نوشتن کد در محیط shell که به آن shell script می گویند تونستیم یک پایه را مقدار دهی کنیم. در این آموزش می خواهیم با خواندن از یک کلید یک LED را خاموش و روشن کنیم.
قبلا برای روشن کردن مثلا پایه 12 از دستور زیر استفاده می کردیم.
./on.sh 12
برای اجرای این دستور حتما باید در شاخه ای باشیم که فایل on.sh قرار داره. برای اینکه همیشه به این دستور دسترسی داشته باشیم. این فایل و فایل off.sh را در پوشه /usr/bin ذخیره می کنیم.
cp on.sh off.sh /usr/bin
برای ایجاد دستور خواندن از دستور زیر استفاده می کنیم
این دستور مقدار وروری مورد نظر را می خونه و در فایل input.value ذخیره می کنه.
یک فایل به اسم read.sh بسازید و دستورات زیر را داخلش تایپ کنید.
#!/bin/bash
echo $1 > /sys/class/gpio/export #
GPIO=$(basename /sys/class/gpio/gpio$1_*)
echo Inputing pin $GPIO
echo in > /sys/class/gpio/$GPIO/direction #
echo input save in input.value file
cat /sys/class/gpio/$GPIO/value > input.value
echo $1 > /sys/class/gpio/unexport #
با دستورات زیر اجازه دسترسی به این فایل می دیم و اون را در پوشه /usr/bin کوپی می کنیم.
chmod u+x read.sh
cp read.sh /usr/bin
برای مثال دستور زیر پایه 11 را می خونه و در فایل input.value در شاخه جاری ذخیره می کنه.
Read.sh 11
خوب حالا می خواهیم یه برنامه بنویسیم که مقدار پایه 11 متصل به یک کلید را بخونه و مقدار آن را روی LED متصل به پایه 12 متصل کند.
در حالت عادی مقدار ورودی را با یک مقاومت pull-up به ولتاژ 3.3 وصل کنید. پین 11 روی کیوبی پایه 2 U15 است و پین 12 پایه 26 U15 است.
یک فایل جدید با اسمه test.sh بسازید و دستورات زیر را داخلش تایپ کنید.
#!/bin/bash
#read pin2 from cubieboard and set LED on pin 26 if Key press
while [ 1 ]
do
read.sh 11
INPUT=$(cat input.value)
rm input.value
if [ $INPUT == “1” ]; then
off.sh 12
else
on.sh 12
fi
done
خوب حالا با اجرای دستور زیر کدمون را تست می کنیم.
./test.sh
برای این که از برنامه خارج بشیم از کلید Ctrl+c استفاده کنید.
من این برنامه را روی کیوبی تست کردم. همین برنامه را میشه بدون تغییر برای مارس هم استفاده کرد. فقط باید پایه متناظر را پیدا کرد.