#importation des librairies requises import RPi.GPIO as GPIO import time from Adafruit_LED_Backpack import SevenSegment import threading import subprocess #initialisation des display display1 = SevenSegment.SevenSegment(address=0x74) display1.begin() display2 = SevenSegment.SevenSegment(address=0x72) display2.begin() display3 = SevenSegment.SevenSegment(address=0x70) display3.begin() display4 = SevenSegment.SevenSegment(address=0x71) display4.begin() #initialization des GPIO des boutons GPIO.setmode(GPIO.BCM) GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(9, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP) #lecture du fichier config.txt config=open("/var/timer/config.txt","r") timer1=config.readline() timer1=int(timer1) timer2=config.readline() timer2=int(timer2) timer3=config.readline() timer3=int(timer3) timer4=config.readline() timer4=int(timer4) config.close() #initialisation du buzzer Piezo GPIO.setup(20, GPIO.OUT) timeractif1=0 timeractif2=0 timeractif3=0 timeractif4=0 r = 1 a=0 buzz1 = 0 buzz2 = 0 buzz3 = 0 buzz4 = 0 # routines ecriture display def writedisplay1(tw1): mins, secs = divmod(tw1, 60) dmin, umin = divmod (mins, 10) dsec, usec = divmod (secs, 10) timeformat = '{:02d}:{:02d}'.format(mins, secs) display1.set_colon(True) display1.set_digit(0,dmin) display1.set_digit(1,umin) display1.set_digit(2,dsec) display1.set_digit(3,usec) display1.write_display() def writedisplay2(tw2): mins, secs = divmod(tw2, 60) dmin, umin = divmod (mins, 10) dsec, usec = divmod (secs, 10) timeformat = '{:02d}:{:02d}'.format(mins, secs) display2.set_colon(True) display2.set_digit(0,dmin) display2.set_digit(1,umin) display2.set_digit(2,dsec) display2.set_digit(3,usec) display2.write_display() def writedisplay3(tw3): mins, secs = divmod(tw3, 60) dmin, umin = divmod (mins, 10) dsec, usec = divmod (secs, 10) timeformat = '{:02d}:{:02d}'.format(mins, secs) display3.set_colon(True) display3.set_digit(0,dmin) display3.set_digit(1,umin) display3.set_digit(2,dsec) display3.set_digit(3,usec) display3.write_display() def writedisplay4(tw4): mins, secs = divmod(tw4, 60) dmin, umin = divmod (mins, 10) dsec, usec = divmod (secs, 10) timeformat = '{:02d}:{:02d}'.format(mins, secs) display4.set_colon(True) display4.set_digit(0,dmin) display4.set_digit(1,umin) display4.set_digit(2,dsec) display4.set_digit(3,usec) display4.write_display() #initialisation des timers writedisplay1(timer1) writedisplay2(timer2) writedisplay3(timer3) writedisplay4(timer4) def countdown1(): global timeractif1 timeractif1=1 global timer1 t1=timer1 while t1>-1: writedisplay1(t1) time.sleep(.86) if GPIO.input(9)==0: fin=1 break t1 -= 1 global buzz1 buzz1=1 while GPIO.input(9)==1: display1.clear() display1.write_display() time.sleep(.25) writedisplay1(0) time.sleep(.25) print ('termine') buzz1=0 writedisplay1(timer1) timeractif1=0 def countdown2(): global timeractif2 timeractif2=1 global timer2 t2=timer2 while t2>-1: writedisplay2(t2) time.sleep(.86) if GPIO.input(5)==0: fin=1 break t2 -= 1 global buzz2 buzz2=1 while GPIO.input(5)==1: display2.clear() display2.write_display() time.sleep(.25) writedisplay2(0) time.sleep(.25) print ('termine') buzz2=0 writedisplay2(timer2) timeractif2=0 def countdown3(): global timeractif3 timeractif3=1 global timer3 t3=timer3 while t3>-1: writedisplay3(t3) time.sleep(.86) if GPIO.input(13)==0: fin=1 break t3 -= 1 global buzz3 buzz3=1 while GPIO.input(13)==1: display3.clear() display3.write_display() time.sleep(.25) writedisplay3(0) time.sleep(.25) print ('termine') buzz3=0 writedisplay3(timer3) timeractif3=0 def countdown4(): global timeractif4 timeractif4=1 global timer4 t4=timer4 while t4>-1: writedisplay4(t4) time.sleep(.86) if GPIO.input(26)==0: fin=1 break t4 -= 1 global buzz4 buzz4=1 while GPIO.input(26)==1: display4.clear() display4.write_display() time.sleep(.25) writedisplay4(0) time.sleep(.25) print ('termine') buzz4=0 writedisplay4(timer4) timeractif4=0 def buzz(): while True: global buzz1 global buzz2 global buzz3 global buzz4 if (buzz1==1 or buzz2==1 or buzz3==1 or buzz4==1): GPIO.output(20, True) time.sleep(0.3) ## Wait GPIO.output(20, False) time.sleep(0.2) ## Wait def writeConfig(timer1, timer2, timer3, timer4): config=open("/var/timer/config.txt","w") config.writelines(str(timer1)+"\n") config.writelines(str(timer2)+"\n") config.writelines(str(timer3)+"\n") config.writelines(str(timer4)+"\n") config.close() tbuzz = threading.Thread(target=buzz) tbuzz.daemon = True tbuzz.start() #config timer 1 def conf_tim_1(): global timer1 print ('config-1') time.sleep(1) writedisplay1(timer1) display2.clear() display3.clear() display4.clear() display2.write_display() display3.write_display() display4.write_display() print('exiting sleep') while GPIO.input(26)==1: if GPIO.input(9)==0: timer1=timer1-1 print timer1 writedisplay1(timer1) time.sleep(0.25) elif GPIO.input(10)==1: timer1=timer1+1 print timer1 writedisplay1(timer1) time.sleep(0.25) else: pass #config timer 2 def conf_tim_2(): global timer2 print ('config-2') time.sleep(1) writedisplay2(timer2) display3.clear() display4.clear() display3.write_display() display4.write_display() print('exiting sleep') while GPIO.input(26)==1: if GPIO.input(5)==0: timer2=timer2-1 print timer2 writedisplay2(timer2) time.sleep(0.25) elif GPIO.input(11)==1: timer2=timer2+1 print timer2 writedisplay2(timer2) time.sleep(0.25) else: pass #config timer 3 def conf_tim_3(): print ('config-3') global timer3 time.sleep(1) writedisplay3(timer3) display4.clear() display4.write_display() print('exiting sleep') while GPIO.input(26)==1: if GPIO.input(13)==0: timer3=timer3-1 print timer3 writedisplay3(timer3) time.sleep(0.25) elif GPIO.input(6)==1: timer3=timer3+1 print timer3 writedisplay3(timer3) time.sleep(0.25) else: pass #config timer 4 def conf_tim_4(): print ('config-4') global timer4 time.sleep(1) writedisplay4(timer4) print('exiting sleep') while GPIO.input(10)==0: if GPIO.input(26)==0: timer4=timer4-1 print timer4 writedisplay4(timer4) time.sleep(0.25) elif GPIO.input(19)==1: timer4=timer4+1 print timer4 writedisplay4(timer4) time.sleep(0.25) else: pass def shutdown(): command = "/usr/bin/sudo /sbin/shutdown -h now" process = subprocess.Popen(command.split(), stdout=subprocess.PIPE) output = process.communicate () [0] print output #Main LOOP while True: time.sleep(0.25) if (GPIO.input(26)==0 and GPIO.input(05)==0): print ("Entering config mode") #mettre la logique de configuration par les boutons #enleve la gestion des interruptions conf_tim_1() conf_tim_2() conf_tim_3() conf_tim_4() time.sleep(1) print timer1, timer2, timer3, timer4 writeConfig(timer1, timer2, timer3, timer4) if GPIO.input(12)==0: display1.clear() display1.write_display() display2.clear() display2.write_display() display3.clear() display3.write_display() display4.clear() display4.write_display() shutdown() if (GPIO.input(10)==1 and timeractif1==0): pt1 = threading.Thread(target=countdown1) pt1.daemon = True pt1.start() if (GPIO.input(11)==1 and timeractif2==0): pt2 = threading.Thread(target=countdown2) pt2.daemon = True pt2.start() if (GPIO.input(6)==1 and timeractif3==0): pt3 = threading.Thread(target=countdown3) pt3.daemon = True pt3.start() if (GPIO.input(19)==1 and timeractif4==0): pt4 = threading.Thread(target=countdown4) pt4.daemon = True pt4.start() else: pass