Code Source Python Ticket4Bath
Sauter à la navigation
Sauter à la recherche
Version plus complète du code : Code Source Ticket4Bath.
import time
import grovepi
import sys
import RPi.GPIO as GPIO
import smbus
# Connect the Grove PIR Motion Sensor to digital port D8
# SIG,NC,VCC,GND
led_sensor = 3
touch_sensor = 4
buz_sensor = 2
compt = 1
#Tableau des notes de musique
notes = ['E7', 'E7', 'E7', 'C7', 'E7', 'G7', 'G6', 'C7', 'G6', 'E6', 'A6', 'B6', 'AS6', 'A6',
'G6', 'E7', 'G7', 'A7', 'F7', 'G7', 'E7', 'C7', 'D7', 'B6', 'C7', 'G6', 'E6', 'A6', 'B6', 'AS6', 'A6',
'G6', 'E7', 'G7', 'A7', 'F7', 'G7', 'E7', 'C7', 'D7', 'B6', ' ' ]
#Longueur des notes
beats = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, .75, .75, .75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, .75, .75, .75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
tempo = 100
grovepi.pinMode(buz_sensor,"OUTPUT")
grovepi.pinMode(led_sensor,"OUTPUT")
# Adresses I2C du LCD
DISPLAY_RGB_ADDR = 0x62
DISPLAY_TEXT_ADDR = 0x3e
# Bus de liaison de la Raspberry pi si pi1 = 0 et pi2 = 1
rev = GPIO.RPI_REVISION
bus = smbus.SMBus(1)
#Fonction permettant de parametrer la couleur de fond du LCD
def setRGB(r,g,b):
bus.write_byte_data(DISPLAY_RGB_ADDR,0,0)
bus.write_byte_data(DISPLAY_RGB_ADDR,1,0)
bus.write_byte_data(DISPLAY_RGB_ADDR,0x08,0xaa)
bus.write_byte_data(DISPLAY_RGB_ADDR,4,r)
bus.write_byte_data(DISPLAY_RGB_ADDR,3,g)
bus.write_byte_data(DISPLAY_RGB_ADDR,2,b)
#Commande pour afficher
def textCommand(cmd):
bus.write_byte_data(DISPLAY_TEXT_ADDR,0x80,cmd)
#Fonction pour afficher le texte avec retour a la ligne
def setText(text):
textCommand(0x01) # clear display
time.sleep(.05)
textCommand(0x08 | 0x04) # display on, no cursor
textCommand(0x28) # 2 lines
time.sleep(.05)
count = 0
row = 0
for c in text:
if c == '\n' or count == 16:
count = 0
row += 1
if row == 2:
break
textCommand(0xc0)
if c == '\n':
continue
count += 1
bus.write_byte_data(DISPLAY_TEXT_ADDR,0x40,ord(c))
#Blink deux fois rouge/blanc
def blink2():
setRGB(255,0,0)
time.sleep(.05)
setRGB(255,255,255)
time.sleep(.05)
setRGB(255,0,0)
time.sleep(.05)
setRGB(255,255,255)
time.sleep(.05)
setRGB(255,0,0)
time.sleep(.05)
#Blink une fois rouge/blanc
def blink1():
setRGB(255,0,0)
time.sleep(.05)
setRGB(255,255,255)
time.sleep(.05)
setRGB(255,0,0)
#Fonction qui joue la note (tone) durant une certaine duree
def playTone(tone, duration):
for i in range(0,duration * 1000L, tone * 2 ):
grovepi.digitalWrite(buz_sensor, 1)
time.sleep(tone * .000001)
grovepi.digitalWrite(buz_sensor, 0)
time.sleep(tone * .000001)
#Fonction qui verifie que la note demandee existe, s'apppuie sur playTone
def playNote(note, duration):
names = [ 'a', 'E6', 'E7', 'C7', 'G7', 'G6', 'A6', 'B6', 'AS6', 'A7', 'F7', 'D7' ]
tones = [ 10, 1319, 2637, 2093, 3136, 1568, 1760, 1976, 1865, 3520, 2794, 2349 ]
for i in range(0,8):
if (names[i] == note):
playTone(tones[i], duration)
#Fonction pour lancer la musique, s'appuie sur playNote et playTone
def music_moussaillon():
for i in range(0,78):
if(notes[i] == ' '):
time.sleep(beats[i] * tempo)
else:
playNote(notes[i], beats[i] * tempo)
time.sleep(0.15)
#Routine de fonctionnement
grovepi.digitalWrite(led_sensor,0)
grovepi.digitalWrite(buz_sensor,0)
setText('Etat de la SdB : Libre')
setRGB(0,255,0)
while True:
if (grovepi.digitalRead(touch_sensor) == 1):
if(compt%2 == 1):
compt += 1
grovepi.digitalWrite(led_sensor,1)
setText('Etat de la SdB : Occupe (15 min)')
setRGB(255,0,0) #rouge
time.sleep(5)
blink1()
setText('Etat de la SdB : Occupe (30 sec)')
time.sleep(10)
blink1()
setText('Etat de la SdB : Occupe (10 sec)')
time.sleep(5)
blink1()
setText('Etat de la SdB : Occupe (5 sec)')
time.sleep(1)
blink2()
setText('Etat de la SdB : Occupe (4 sec)')
time.sleep(1)
blink2()
setText('Etat de la SdB : Occupe (3 sec)')
time.sleep(1)
blink2()
setText('Etat de la SdB : Occupe (2 sec)')
time.sleep(1)
blink2()
setText('Etat de la SdB : Occupe (1 sec)')
time.sleep(1)
blink2()
setText('Utilisation \n finie')
blink2()
blink2()
else:
compt += 1
grovepi.digitalWrite(led_sensor,0)
setText('Etat de la SdB : Libre')
setRGB(0,255,0)