Bonjour !

J'avais déjà demandé de l'aide pour écrire un script RPi2 ici.

J'ai enfin reçu tout le materiel, mais malheureusement le programme a quelques difficultés à se lancer. Après plusieurs problèmes d'indentations, j'ai encore :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
File "./button.py", line 85
except KeyboardInterrupt:
     ^
SyntaxError : invalid syntax
Après quelques recherches, il semble que cela ne vient pas de la commande en particulier mais d'une erreur avant dans le code. Et là je sèche :/

Merci d'avance pour votre aide !

Voici le code du script :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python2.7
 
#Code realise a partir de l'article "Raspberry Pi : Plusieurs fonctions avec un seul bouton" , modifie par Antoine Filali-Ansary - antoineos@hotmail.fr -, corrige par f-leb -  02/2016
#Made from the article "Raspberry Pi : Plusieurs fonctions avec un seul bouton" - modified by Antoine Filali-Ansary - antoineos@hotmail.fr -, checked by f-leb -  02/2016
 
from time import sleep
import subprocess
import RPi.GPIO as GPIO
 
# On choisit le GPIO 23 (pin 16) pour notre bouton
CHANNEL = 23 
 
# On definit nos durees
long_press = 1
very_long_press = 4
 
# on met RPi.GPIO en mode notation BCM
GPIO.setmode(GPIO.BCM)
 
# on initialise le GPIO 23 en mode entree
GPIO.setup(CHANNEL, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Initialisation pour la led
GPIO.setup(18, GPIO.OUT)
 
# notre fonction extinction
def switchoff():
	subprocess.call(['/opt/vc/bin/tvservice -o'])
 
#Fonction demarrer
def switchon():
	subprocess.call(['/opt/vc/bin/tvservice -p'])
 
# notre fonction reboot
def reboot():
	subprocess.call(['sudo reboot'])
 
# notre fonction de gestion du bouton
def system_button(CHANNEL):
	# cette variable servira a stocker le temps de pression
	button_press_timer = 0
	#La variable led sert a allumer ou non la LED suivant l'etat allume/eteint.
	led = 1
	#De base, vu que le script demarre avec le boot, j'allume la LED
	GPIO.output(18, 1)
 
	def system_button(CHANNEL):
	# cette variable servira a stocker le temps de pression
		button_press_timer = 0
		led = 1
 
		while GPIO.input(CHANNEL) == False : # tant que le bouton est maintenu presse ...
			button_press_timer += 0.2 # ... on enregistre le temps que cela dure
			GPIO.output(18, not GPIO.input(18))
			sleep(0.2)
 
		if (button_press_timer > very_long_press, led == 1) :
					print "very long press : ", button_press_timer
					#J'eteinds la LED, le systeme s'eteinds''
					GPIO.output(18, 0)
					led = 0
					switchoff()
 
		elif (button_press_timer > very_long_press, led == 0) :
				    print "very long press : ", button_press_timer
				    #J'allume la led, le systeme s'allume'
				    GPIO.output(18, 1)
				    led = 1
				    switchon()
 
		elif (button_press_timer > long_press) :
					print "long press : ", button_press_timer
					reboot()
 
		elif (button_press_timer > 0.2) :
					print "short press : ", button_press_timer
 
		button_press_timer = 0
		# on attend 0.2 secondes avant la boucle suivante afin de reduire la charge sur le CPU
		sleep(0.2)
 
# on met le bouton en ecoute par interruption, detection falling edge sur le canal choisi, et un debounce de 200 millisecondes
GPIO.add_event_detect(CHANNEL, GPIO.FALLING, callback=system_button, bouncetime=200)
 
# on reinitialise les ports GPIO en sortie de script
except KeyboardInterrupt:
	GPIO.cleanup()
GPIO.cleanup()

Le script doit allumer une LED quand on le lance. Lorsqu'on appuie vite fait sur le bouton ça éteint l'affichage hdmi et la led, quand on appuie ça fait l'inverse. Un appui long redémarre le Raspberry.