設定ボタンによって温度とタイマーの設定を行なうデーモン
物理ボタン操作で温度とタイマーの設定を変更するためのデーモン。
少しチャタリング対策に難があり、あまりスムーズに動かないorz。まあ、とりあえず動く。
このプログラムが無くても直書きでシステムの動作は可能。
<setting.py>
#!/usr/bin/python
#coding:utf-8import RPi.GPIO as GPIO
import time
import os
import datetime
import file_mng as fileSw_up = 27
Sw_dn = 22
Sw_select = 23select = 'temp' # temp or time
#桁表示を「00」表示に整えるメソッド
def keta( num ):
sum = '0' + num
return sum[-2:]
#分を時間に直すメソッド
def review_time( tim ):
tim = int( tim )
hour = keta( str( tim / 60 ) )
min = keta( str( tim % 60 ) )
return hour + ':' + min + ':00'
#設定された項目をディスプレイに表示する
def view():
file.save_row_1( ('> ' if select=='temp' else ' ') + 'SET TEMP: ' + file.get_temp_set() )
file.save_row_2( ('> ' if select=='time' else ' ') + 'SET TIME: ' + review_time( file.get_time_set() ) )
#設定項目が温度の場合
def push_temp( val ):
file.save_temp_set( str( int( file.get_temp_set() ) + val ) )
#設定項目が時間の場合
def push_time( val ):
file.save_time_set( str( int( file.get_time_set() ) + val ) )
#「時間」「温度」切り換えボタン操作の場合
def change_select():
global select
if select == 'temp':
select = 'time'
else:
select = 'temp'
#スイッチが押された場合の処理
def switch(gpio_pin):
time.sleep(0.5)
if GPIO.input( gpio_pin ) == 0:
if gpio_pin == Sw_up:
if select == 'temp':
push_temp( 5 )
elif select == 'time':
push_time( 10 )
if gpio_pin == Sw_dn:
if select == 'temp':
push_temp( -5 )
elif select == 'time':
push_time( -10 )if gpio_pin == Sw_select:
change_select()view()
while GPIO.input( gpio_pin ) == 0:
time.sleep( 0.1 )
#スイッチピンの設定プルアップで0V入力時にスイッチ操作
def standby():
GPIO.setmode(GPIO.BCM)
GPIO.setup(Sw_up, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(Sw_up, GPIO.FALLING)
GPIO.setup(Sw_dn, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(Sw_dn, GPIO.FALLING)
GPIO.setup(Sw_select, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(Sw_select, GPIO.FALLING)
GPIO.add_event_callback(Sw_up, switch)
GPIO.add_event_callback(Sw_dn, switch)
GPIO.add_event_callback(Sw_select, switch)view()
while True:
time.sleep(60)
if __name__=='__main__':
standby()
<全プログラム内部構造一覧>