آموزش رزبری پای با پایتون – قسمت سوم – چالش رقص نور

0
301
آموزش رزبری پای با پایتون – قسمت سوم – چالش رقص نور
چالش رقص نور

چالش رقص نور

سلام به همه.

بعد از اینکه من با موفقیت تونستم کلید رو به رزبری وصل کنم، زئوس به من گفت پایه هستی یه چالش باحال بهت بدم؟ با خوشحالی قبول کردم و گفتم من مرد روز های سخت و چالشی هستم. اونم خندید و گفت یه برنامه بنویس که وقتی یه بار دکمه رو فشارمیدی LED روشن بشه، وقتی ۲ بار فشار میدی LED چشمک بزنه و وقتی دکمه رو به مدت ۳ ثانیه نگه میداری، LED خاموش بشه (صد البته که من عاشق پایتون هستم و این چالش رو هم به زبان پایتون برنامه نویسی و حلش میکنم).

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

اولین چیزی که به ذهنم رسید این بود که یدونه فلگ بزارم برا اینکه چک کنم چه زمانی باید LED روشن و چه زمانی باید LED خاموش باشه. دوتا تابع هم لازم داشتم برا اینکه LED رو خاموش و روشن کنم.

که میشه این

flag = 0

def off():
GPIO.output(4,False)
def on():
if flag==1:
GPIO.output(4,True)

یه فلگ هم لازم داشتم برای اینکه چک کنم ببینم چه زمانی باید LED ثابت و چه زمانی باید LED چشمک زن باشه:

push_time=0

دوتا متغیر هم باید برای محاسبه زمان فشرده شدن دکمه داشته باشم:

up_time=0
down_time=0

حالا باید چک کنم وقتی دکمه فشار داده میشه تا وقتی رها میشه چقدر زمان میبره:

if GPIO.input(button_pin):
up_time=time.time()
else:

flag=1
down_time=time.time()

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

if -1 > up_time-down_time < -3 :
off()
flag=0
elif up_time-down_time<1:

on()

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

if -1 > up_time-down_time < -3 :
off()
flag=0
elif up_time-down_time<1:

on()

حالا باید دید که دفعه چنده که دکمه فشرده میشه و LED باید خاموش باشه یا روشن:

elif push_time%2==0:
on()
sleep(sleep_time)
off()
sleep(sleep_time)

در این مرحله هم این تیکه ها رو به مرحله چک کردن دکمه اضافه کردم:

if GPIO.input(button_pin):
up_time=time.time()
else:
flag=1
on()
push_time+=1
down_time=time.time()

اگه قرار بود LED رو خاموش کنم باید push_time رو برابر 0 میکردم پس:

if -1 > up_time-down_time < -3 :
print("delta:",up_time-down_time)
off()
push_time=0
flag=0
elif up_time-down_time<1:
on()
elif push_time%2==0:
on()
sleep(sleep_time)
off()

 

و شما الان به همراه من این چالش رقص نور جذاب رو انجام دادین که کد کاملش رو میتونید اینجا ببینید:
import RPi.GPIO as GPIO
from time import sleep
import time
GPIO.setmode(GPIO.BCM)
sleep_time=0.20

light_pin=4
button_pin=17
up_time=0
down_time=0

GPIO.setup(light_pin,GPIO.OUT)
GPIO.setup(button_pin,GPIO.IN,pull_up_down=GPIO.PUD_UP)
push_time=0
flag = 0

def off():
GPIO.output(4,False)
def on():
if flag==1:
GPIO.output(4,True)

try:

while True:
if GPIO.input(button_pin):
up_time=time.time()
else:
flag=1
on()
push_time+=1
down_time=time.time()

if -1 > up_time-down_time < -3 :
off()

push_time=0
flag=0
elif up_time-down_time<1:
on()
elif push_time%2==0:
on()
sleep(sleep_time)
off()
sleep(sleep_time)
finally:
GPIO.cleanup()

حالا که به اینجا رسیدیم و دیدن که چقدر راحت میشه این جور چالش ها رو حل کرد یه پیشنهاد دوستانه هم برای شما دارم:

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

 

 

منبع:سیسوگ

مطلب قبلیآموزش STM32 با توابع LL قسمت شانزدهم: استفاده از DMA برای ارسال اطلاعات از حافظه توسط واحد USART
مطلب بعدیآموزش رزبری پای با پایتون – قسمت چهارم – چالش تولید رنگ زرد با LED های سبز و قرمز

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید