2017-11-11 143 views
0

我正在构建一个带有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() 

我应该为每一天创建一个列表,然后将活动追加到列表中。然后,我可以根据在搜索中找到哪些活动来搜索活动列表并播放声音?这是更好的方法吗?

回答

1

我建议你学习面向对象编程。您应该考虑创建一个代表您存储在程序中的数据的类。例如,您可以创建一个Activity类,其中存储活动的名称和日期。

请记住,变量只存储在内存中。程序结束或机器关闭时,此数据将消失。如果要在程序执行之间永久存储数据,则必须以某种形式将其保存到文件中。

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关系数据库。