4

パイソン2.7

趣味のプロジェクトとして、いくつかのデジタル入力信号を監視するためにラズベリーパイを使用しています。累積値を表示し、入力信号を追跡するグローバル変数でそれらを更新する大きなディスプレイが必要です。今のところ、ブレッドボードのプッシュ ボタンを使用するつもりなので、ホールディング変数を使用して、カウンターがサイクルごとにインクリメントしないようにしました。これは明らかだと確信しているので、私はPythonに非常に慣れていないので、可能であればシンプルにしてください。1 つの input 、PE_MATTRESSES別のPE_COMBINED、およびもう1 つを呼び出しRESETています。もちろん、すべてをゼロにします..PE_MATTRESSESPE_COMBINEDRESET

プロセスを介した私の擬似コードは次のとおりです。

  • I/O 変数とグローバル変数を確立する
  • GUI を作成する
  • while 1
    -- I/O を確認
    -- グローバル変数
    を更新 -- ラベルを更新して表示
    -- ループ

私のコードは次のとおりです。

import Tkinter as tk
import tkFont
import time
import RPi.GPIO as GPIO


GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)


PE_MATTRESS = GPIO.input(17)
PE_MATTRESS_LATCH = 0
PE_MATTRESS_ACCUMULATOR = 0
PE_COMBINED = GPIO.input(21)
PE_COMBINED_LATCH = 0
PE_COMBINED_ACCUMULATOR = 0
BOXSPRING_ACCUMULATOR = 0
BOXSPRING_ACCUMULATOR = PE_COMBINED_ACCUMULATOR - PE_MATTRESS_ACCUMULATOR 
RESET = GPIO.input(22)



class App:
    def __init__(self):
        root=tk.Tk()
        # create a custom font
        self.customFont = tkFont.Font(family="Helvetica", size=117)


        # create widgets 

        label1 = tk.Label(root, text="MATTRESSES: %s" % PE_MATTRESS_ACCUMULATOR , font=self.customFont)
        label1.pack()

        spacer1 = tk.Label(root, text="", font=self.customFont)
        spacer1.pack()

        Quit = tk.Button(root, text="QUIT", command=quit)
        Increment = tk.Button(root, text="Test", command=Inc)
        Quit.pack()
        Increment.pack()


        label2 = tk.Label(root, text="BOXSPRINGS: %s" % BOXSPRING_ACCUMULATOR, font=self.customFont)
        label2.pack()

        spacer2 = tk.Label(root, text="", font=self.customFont)
        spacer2.pack()


        label3 = tk.Label(root, text="      COMBINED: %s" % PE_COMBINED_ACCUMULATOR, font=self.customFont)
        label3.pack()



        root.geometry('1800x1000+0+0')
        root.after(10,Inputs)

        root.mainloop()

    def Inc():

        PE_MATTRESS_ACCUMULATOR = PE_MATTRESS_ACCUMULATOR + 1
    label1.setText("MATTRESSES: %s" % PE_MATTRESS_ACCUMULATOR)
    label2.setText("BOXSPRINGS: %s" % BOXSPRING_ACCUMULATOR)
    label3.setText("      COMBINED: %s" % PE_COMBINED_ACCUMULATOR)

        root.update_idletasks()


    def Inputs():

        if PE_MATTRESS == True and PE_MATTRESS_LATCH == False:
            PE_MATTRESS_ACCUMULATOR = PE_MATTRESS_ACCUMULATOR + 1
            PE_MATTRESS_LATCH = True


        elif PE_MATTRESS == False and PE_MATTRESS_LATCH == True:
            PE_MATTRESS_LATCH = False

        elif PE_COMBINED == True and PE_COMBINED_LATCH == False:
            PE_COMBINED_ACCUMULATOR = PE_COMBINED_ACCUMULATOR + 1
            PE_COMBINED_LATCH = True

        elif PE_COMBINED == False and PE_COMBINED_LATCH == True:
            PE_COMBINED_LATCH = False

        elif RESET == True:
            PE_COMBINED_ACCUMULATOR = 0
            PE_MATTRESS_ACCUMULATOR = 0

app=App()
4

1 に答える 1

0

疑似コードにはwhile 1ループが含まれていますが、実際のコードには含まれていません。また、Inc()呼び出されることはありません。の末尾に次の行を追加することをお勧めしますInputs()

self.Inc()
self.root.after(10, self.Inputs)

また、インスタンス変数を作成する必要がrootあります。つまり、これを機能させるにはself.root = rootin__init__()を含めます。

于 2013-02-26T13:32:01.347 に答える