我正在构建一个带有7个按钮,RFID阅读器和Raspberry Pi的周计划系统。
我从RFID标签获取活动,从按钮获取活动。当进入一天或进行活动时,我正在播放声音。
我想保存计划在什么日子里进行的活动。 例如:星期一 - 游泳,编码,博士。
这样我就可以读出特定日期的计划活动。
现在,我有选择日期和活动的代码,但我不确定如何存储信息供以后使用。
import mercury
import time
import RPi.GPIO as GPIO
import pygame
#Setting up the RFID reader
reader = mercury.Reader("tmr:///dev/ttyUSB0")
reader.set_region("EU3")
reader.set_read_plan([1], "GEN2")
#Setting up the GPIO pins for the 7 push buttons
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 22 = GPIO25
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 24 = GPIO8
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 26 = GPIO7
GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 32 = GPIO12
GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 36 = GPIO16
GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 38 = GPIO20
GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 40 = GPIO21
#Enabling pygame to play sounds
pygame.init()
#Declaration of the RFID tags used in this example.
tag1 = 'E2004005730702602190360B'
tag2 = 'E20040057307026421903619'
tag3 = 'E20040057307026221803410'
tag4 = 'E2004005730702662180341E'
tag5 = 'E20040057307027021803420'
#Setting what sound files to use and the paths
mandaglyd = pygame.mixer.Sound('/home/pi/Desktop/Mandag.wav')
tirsdaglyd = pygame.mixer.Sound('/home/pi/Desktop/Tirsdag.wav')
onsdaglyd = pygame.mixer.Sound('/home/pi/Desktop.onsdag.wav')
torsdaglyd = pygame.mixer.Sound('/home/pi/Desktop/torsdag.wav')
fredaglyd = pygame.mixer.Sound('/home/pi/Desktop/fredag.wav')
lordaglyd = pygame.mixer.Sound('/home/pi/Desktop/lordag.wav')
sondaglyd = pygame.mixer.Sound('/home/pi/Desktop/sondag.wav')
def setDay():
while True:
in22 = GPIO.input(22)
in24 = GPIO.input(24)
in26 = GPIO.input(26)
in32 = GPIO.input(32)
in36 = GPIO.input(36)
in38 = GPIO.input(38)
in40 = GPIO.input(40)
if in22 == False:
print('Monday')
mandaglyd.play()
time.sleep(2)
break
if in24 == False:
print('Tuesday')
tirsdaglyd.play()
time.sleep(2)
break
if in26 == False:
print('Onsdag')
onsdaglyd.play()
time.sleep(2)
break
if in32 == False:
print('Torsdag')
torsdaglyd.play()
time.sleep(2)
break
if in36 == False:
print('Fredag')
fredaglyd.play()
time.sleep(2)
break
if in38 == False:
print('Lordag')
lordaglyd.play()
time.sleep(2)
break
if in40 == False:
print('Sondag')
sondaglyd.play()
time.sleep(2)
break
def setActivity():
while True:
a = repr(reader.read())
print (a)
if tag1 in a:
print('tag1')
time.sleep(0.2)
break
if tag2 in a:
print('tag2')
time.sleep(0.2)
break
if tag3 in a:
print('tag3')
time.sleep(0.2)
break
if tag4 in a:
print('tag4')
time.sleep(0.2)
break
if tag5 in a:
print('tag5')
time.sleep(0.2)
break
time.sleep(0.2)
if __name__ == "__main__":
setActivity()
setDay()
我应该为每一天创建一个列表,然后将活动附加到列表中。然后我可以在列表中搜索活动并根据搜索中找到的活动播放声音?这是一个更好的方法吗?
答案 0 :(得分:2)
列表非常适合您打算以类似方式处理的事情。例如:
def setDay():
while True:
for pin, day, sound in [
(22, 'Monday', mandaglyd ),
(24, 'Tuesday', tirsdaglyd),
(26, 'Onsdag', onsdaglyd ),
(32, 'Torsdag', torsdaglyd),
(36, 'Fredag', fredaglyd ),
(38, 'Lordag', lordaglyd ),
(40, 'Sondag', sondaglyd ),
]:
if GPIO.input(pin) == False:
print(day)
sound.play()
time.sleep(2)
return
对于长期存储(超出程序的单次运行),您可以考虑json使用更简单但任意的数据结构,csv表示简单表,shelve表示密钥/值存储或sqlite3表示完整的SQL关系数据库。
答案 1 :(得分:1)
我建议你学习面向对象的编程。您应该考虑创建一个表示您在程序中存储的数据的类。例如,您可以创建一个Activity
类来存储活动名称和日期。
请记住,变量只存储在内存中。程序结束或机器关闭时,此数据将消失。如果要在程序执行之间永久存储数据,则必须以某种形式将其保存到文件中。