DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

RaspberryPiと炊飯器で低温調理器を自作してみた⑦ 「温度、タイマー設定デーモン」

設定ボタンによって温度とタイマーの設定を行なうデーモン

f:id:DreamerDream:20190918164113p:plain

物理ボタン操作で温度とタイマーの設定を変更するためのデーモン。

少しチャタリング対策に難があり、あまりスムーズに動かないorz。まあ、とりあえず動く。

このプログラムが無くても直書きでシステムの動作は可能。
  

<setting.py>

 

#!/usr/bin/python
#coding:utf-8

import RPi.GPIO as GPIO
import time
import os
import datetime
import file_mng as file

Sw_up = 27
Sw_dn = 22
Sw_select = 23

select = '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() 

<全プログラム内部構造一覧>

dreamerdream.hateblo.jp

 

https://cdn.profile-image.st-hatena.com/users/DreamerDream/profile.png私、(PONさん (@o_n_pon) | Twitter)を応援してくださるお優しいかたは15円から投げ銭可能ですので↓よりカンパをお願いしますm(_ _)m

kampa.me