Code Source Ticket4Bath

De Learning Lab Environnements Connectés
Sauter à la navigation Sauter à la recherche

Code Python v0.1

import time
import grovepi
#from grovepi import *
import sys
import RPi.GPIO as GPIO
import smbus


# Connect the Grove PIR Motion Sensor to digital port D8
# SIG,NC,VCC,GND
#pir_sensor = 8
led_sensor = 3
touch_sensor = 4
buz_sensor = 2

i = 0
compteur = 0

#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(pir_sensor,"INPUT")
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:
     i += 1
     #boucle utilisee pour avoir une fin lorsque l'on lance le script sous node-red
     #laisse environ une minute a l'utilisateur pour ce logger
     if(i == 600):    
	   setText(' ')
	   setRGB(255,255,255)
	   break
	
     if (grovepi.digitalRead(touch_sensor) == 1):
	   i = 0
	   grovepi.digitalWrite(led_sensor,1)
	   setText('Etat de la SdB : Occupe (15 min)')
	   setRGB(255,0,0)  #rouge
	   time.sleep(10)
	   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')
		
	   while True :
		i += 1
		grovepi.digitalWrite(buz_sensor,1)
		time.sleep(0.5)
		grovepi.digitalWrite(buz_sensor,0)
		time.sleep(1)
		blink2()
		
		#boucle utilisee pour avoir une fin lorsque l'on lance le script sous node-red
		#laisse environ une minute a l'utilisateur pour ce logger
		if (grovepi.digitalRead(touch_sensor) == 1):
		    i = 0
		    setText('Etat de la SdB : Libre')
		    setRGB(0,255,0) #vert
		    time.sleep(10)
		    break


Code Python présentation

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)
			music_moussaillon()
			setText('Etat de la SdB : Occupe (15 min)')
			setRGB(255,0,0)  #rouge
			time.sleep(10)
			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)