2013年3月25日 星期一

Raspberry Piでタイマーを作ってみた(source code)





前python+Tkinterで作ったタイマーです。


使用環境はLXDE, RPi.GPIOを使っているので、rootで起動してください。



もしキヨスクのように起動するとタイマーを起動した場合、
[Raspberry Pi] LXDE起動するとき指定pythonスクリプトを起動させる方法 一文を参考してください




import Tkinter as tk
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)


#GPIO #7 for Start/Stop Switch
GPIO.setup(7,GPIO.IN)
#GPIO #17 for Reset Switch
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

prev_input = 0
class FullScreenApp(object):
    def __init__(self, master, **kwargs):
        self.ms = 0
        self.i = 0
        self.isRun=0
        self.willReset=0
        self.isPressed=0
        self.master=master
        self.echo=tk.StringVar()
        self.echo.set('%02d:00:' % (self.i))
        pad=3
        self._geom='200x200+0+0'
        master.title("Timer")
        master.geometry("{0}x{1}+0+0".format(
            master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad))
        master.bind('<Escape>',self.toggle_geom)
        master.config(bg='black')
        master.overrideredirect(True)
        master.attributes('-topmost', True)
        self.label = tk.Label(text='00:00', width=32, height=2,font=('Helvetica'
, '256'), fg='white', bg='black',anchor='c')
        self.label.pack()
        self.master.bind_all("<1>",self.print_label_slowly)
        self.print_label_slowly("Hello, world!")
    def toggle_geom(self,event):
        geom=self.master.winfo_geometry()
        print(geom,self._geom)
        self.master.geometry(self._geom)
        self._geom=geom
    def print_label_slowly(self, message):
        '''Print a label one character at a time using the event loop'''
        #print
        it = GPIO.input(17)
        if (it==True):
           print "!"
           self.ms=0
           self.i=0
           str='%02d:%02d.%01d' % (self.i/60, self.i%60, self.ms)
           self.label.config(text=str)

        input = GPIO.input(7)
        if (input==False):
           self.isPressed=0
        if (input==True and self.isPressed==0):
           self.isPressed=1
           if(self.isRun==0):
             self.isRun=1
           else:
             self.isRun=0
        if self.isRun==1 :
          prev_input = input
          self.ms=self.ms+1
        if self.ms==10 :
          self.i=self.i+1
          self.ms=0
        str='%02d:%02d.%01d' % (self.i/60, self.i%60, self.ms)
        self.label.config(text=str)
        self.master.after(100, self.print_label_slowly,"")

root=tk.Tk()
app=FullScreenApp(root)
root.mainloop()