在串行读取

时间:2018-04-10 09:11:11

标签: python-3.x tkinter raspberry-pi serial-port

我在树莓派中使用python 3.6中的tkinter在窗口中间显示一个蓝色方块。每次点击时,蓝色方块应消失,并在2秒钟后在另一个随机位置重新出现。

我需要在raspberry pi的串口从RFID扫描仪读取信息后启动代码。我的想法是,我的猫将通过包含馅饼和触摸屏的盒子的门,RFID读取动物的芯片并开始上述步骤。如果整整一分钟没有发生交互,屏幕会变回黑色,任务再次开始收听串口,直到猫最终回来并且一切都重新开始。

以下是代码的简化版本

try:
    import Tkinter as TK
except:
    import tkinter as TK

import random as RAN

class THR:
    def __init__(self, root):
        self.root = root
        self.root.config(background='black')

        self.screenYpixels = 600
        self.screenXpixels = 1024
        self.ITI = 2000

        self.background = TK.Canvas(root, width=1024, height=600, bg='black',
                                    bd=0, highlightthickness=0, relief='ridge')

        self.background.pack()
        self.newtrial()

    def newtrial(self):
        self.xpos = RAN.randrange(200, 1000)
        self.ypos = RAN.randrange(100, 500)

        self.stimulus = TK.Canvas(root,width=100,height=100,bg='blue', bd=0,
                                  highlightthickness=0, relief='ridge')
        self.stimulus.place(x=self.xpos, y=self.ypos, anchor="c")
        self.stimulus.bind("<Button-1>", self.response)

        self.exitbutton()

    def response(self, event):
        self.stimulus.place_forget()
        self.intertrialinterval()

    def intertrialinterval(self, *args):
        self.root.after(self.ITI,self.newtrial)

    def exitbutton(self):
        self.exitButton = TK.Button(self.root, bg="green")
        self.exitButton.place(relx=0.99, rely=0.01, anchor="c")
        self.exitButton.bind("<Button-1>", self.exitprogram)

    def exitprogram(self, root):
        self.root.quit()


root = TK.Tk()
THR(root)
root.mainloop()

这里有一些代码,我设法将它们放在一起,从植入的芯片中读取猫的ID

import serial
import struct
import binascii
import os

ser = serial.Serial(
        port='/dev/ttyUSB0',
        baudrate = 19200,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=1
        )
while 1:
    if ser.inWaiting() > 0:
            while ser.inWaiting() > 0:
                i = ser.readline()
                catID = binascii.b2a_hex(i)
                catID = catID[10:20]
                print(catID)

如何正确设置代码以实现连续,独立的系统:

  1. 检测猫是否越过门
  2. 开始任务(在上面显示一个蓝色方块) 屏幕等。)并停止收听串口
  3. 如果已经过了60秒而没有互动 到黑屏
  4. 再次设置串口以侦听

0 个答案:

没有答案