IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Matrice 32 boutons script python


Sujet :

Raspberry Pi

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Matrice 32 boutons script python
    Bonjour,

    Ceci est mon premier poste sur ce forum, merci d 'avance pour votre aide.

    J'essaye de faire mon premier script python ( je ne suis pas developeur, j'ai quelques bases de c...) afin de créer un juke-box de livre audio pour les élèves porteurs d'un handicap de l'école de ma femme.
    J'ai récupéré une matrice de boutons que je souhaite faire fonctionner sur un raspberry pi .

    Voici la bête:
    Nom : 20190717-144022.jpg
Affichages : 516
Taille : 9,8 Ko
    J'ai connecté la matrice et ai trouvé le code ci dessous.

    Si je ne déclare que 1 colonne, et un seul gpio dans self.COLUMN, j'obtiens bien les bon chiffre sur les bons boutons de la colonne choisie.

    Si je change le GPIO de la colonne, les bons chiffres apparaissent au bon endroit également.

    Mon problème se pose lorsque je déclare plusieurs colonnes.
    Seule la première fonctionne.

    Auriez vous une idée de mon erreur ?


    Le code :

    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
    # coding=utf-8
    import time
    import RPi.GPIO as GPIO
    GPIO.setwarnings(False)
    class keypad():
    	def __init__(self, columnCount = 7):
    		GPIO.setmode(GPIO.BCM)
    # Définition des paramètres
    		if columnCount is 7:
    			self.KEYPAD = [
    				[0,5,10,15,20,25,29],
    				[1,6,11,16,21,26,30],
    				[2,7,12,17,22,27,31],
    				[3,8,13,18,23,28,32],
    				[4,9,14,19,24,90,91],
    				]
    # Affectation des broches
    			self.ROW = [25,13,12,6,5]
    			self.COLUMN = [17,4,18,27,22,23,24]
     
    		else:
    			return
    	def getKey(self):
    # Définition des colonnes en sorties
    		for j in range(len(self.COLUMN)):
    			GPIO.setup(self.COLUMN[j], GPIO.OUT)
    			GPIO.output(self.COLUMN[j], GPIO.LOW)
    # Définition des lignes en entrées
    		for i in range(len(self.ROW)):
    			GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP)
    # Regarde si un bouton est poussé
    		rowVal = -1
    		for i in range(len(self.ROW)):
    			tmpRead = GPIO.input(self.ROW[i])
    			if tmpRead == 0:
    				rowVal = i
    		if rowVal <0 or rowVal >4:
    			self.exit()
    			return
    		for j in range(len(self.COLUMN)):
    			GPIO.setup(self.COLUMN[j], GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
    			GPIO.setup(self.ROW[rowVal], GPIO.OUT)
    			GPIO.output(self.ROW[rowVal], GPIO.HIGH)
    			colVal = -1
    			for j in range(len(self.COLUMN)):
    				tmpRead = GPIO.input(self.COLUMN[j])
    				if tmpRead == 1:
    					colVal=j
    			if colVal <0 or colVal >4:
    				self.exit()
    				return
    # Retourne la position du bouton pressé
    			self.exit()
    			return self.KEYPAD[rowVal][colVal]
    	def exit(self):
    # Retourne le nom du bouton pressé
    		for i in range(len(self.ROW)):
    			GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP)
    		for j in range(len(self.COLUMN)):
    			GPIO.setup(self.COLUMN[j], GPIO.IN, pull_up_down=GPIO.PUD_UP)
    if __name__ == '__main__':
    # Initialisation du clavier
    	kp = keypad()
    	print ('--- Clavier prêt ---')
    # Boucle principale
    	while True:
    		digit = None
    		while digit == None:
    			digit = kp.getKey()
    # Affiche le nom de la touche enfoncée
    		print (digit)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par karlzre Voir le message
    Auriez vous une idée de mon erreur ?
    Il faut avoir la documentation de la matrice et accès à l'équipement pour vérifier câblage, fonctionnalités, code,... juste pour s'assurer que le code qu'on lit ait quelque chance de fonctionner.
    Et comme on ne va pas se déplacer chez vous, il va être difficile de trouver de l'aide (excepté ceux qui ont le même genre de configuration matérielle... et qui traînent rarement dans un forum de programmation généraliste).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour la réponse.

    Pour ce qui est du câblage, je pense qu'il est ok car je sais faire fonctionner une colonne à la fois.

    A mon avis il y a une erreur dans le code quelque part.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par karlzre Voir le message
    A mon avis il y a une erreur dans le code quelque part.
    Probable mais comme on ne peut pas écrire ce code sans avoir lu et relu la documentation et avoir accès à l'équipement pour vérifier qu'on a bien compris ce qu'on a lu...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 604
    Points : 56 721
    Points
    56 721
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Je n'ai pas assimilé l'algorithme, mais lignes 40 et 45, les deux boucles for j in range... imbriquées me semblent suspectes...

    Code : 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
    # coding=utf-8
    import time
    import RPi.GPIO as GPIO
    GPIO.setwarnings(False)
    class keypad():
    	def __init__(self, columnCount = 7):
    		GPIO.setmode(GPIO.BCM)
    # Définition des paramètres
    		if columnCount is 7:
    			self.KEYPAD = [
    				[0,5,10,15,20,25,29],
    				[1,6,11,16,21,26,30],
    				[2,7,12,17,22,27,31],
    				[3,8,13,18,23,28,32],
    				[4,9,14,19,24,90,91],
    				]
    # Affectation des broches
    			self.ROW = [25,13,12,6,5]
    			self.COLUMN = [17,4,18,27,22,23,24]
    			
    		else:
    			return
    	def getKey(self):
    # Définition des colonnes en sorties
    		for j in range(len(self.COLUMN)):
    			GPIO.setup(self.COLUMN[j], GPIO.OUT)
    			GPIO.output(self.COLUMN[j], GPIO.LOW)
    # Définition des lignes en entrées
    		for i in range(len(self.ROW)):
    			GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP)
    # Regarde si un bouton est poussé
    		rowVal = -1
    		for i in range(len(self.ROW)):
    			tmpRead = GPIO.input(self.ROW[i])
    			if tmpRead == 0:
    				rowVal = i
    		if rowVal <0 or rowVal >4:
    			self.exit()
    			return
    		for j in range(len(self.COLUMN)):
    			GPIO.setup(self.COLUMN[j], GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
    			GPIO.setup(self.ROW[rowVal], GPIO.OUT)
    			GPIO.output(self.ROW[rowVal], GPIO.HIGH)
    			colVal = -1
    			for j in range(len(self.COLUMN)):
    				tmpRead = GPIO.input(self.COLUMN[j])
    				if tmpRead == 1:
    					colVal=j
    			if colVal <0 or colVal >4:
    				self.exit()
    				return
    # Retourne la position du bouton pressé
    			self.exit()
    			return self.KEYPAD[rowVal][colVal]
    	def exit(self):
    # Retourne le nom du bouton pressé
    		for i in range(len(self.ROW)):
    			GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP)
    		for j in range(len(self.COLUMN)):
    			GPIO.setup(self.COLUMN[j], GPIO.IN, pull_up_down=GPIO.PUD_UP)
    if __name__ == '__main__':
    # Initialisation du clavier
    	kp = keypad()
    	print ('--- Clavier prêt ---')
    # Boucle principale
    	while True:
    		digit = None
    		while digit == None:
    			digit = kp.getKey()
    # Affiche le nom de la touche enfoncée
    		print (digit)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Ce code étant une variante de ce qu'on peut trouver ici.
    Pour autant que l'interface côté GPIO soit identique, seules les CONSTANTS définies dans __init__ ont a être changées.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    J'ai réussi à le faire fonctionner avec un arduino.
    L'arduino envoie les valeurs de boutons au PI via un lien serial.

    Ainsi je saius déjà avancer, je me repencherai sur ce problème plu stard.

    Merci

Discussions similaires

  1. Bouton exécuté script python
    Par AntwaneXIV dans le forum Linux
    Réponses: 2
    Dernier message: 09/07/2016, 19h49
  2. Script Python - OMX player et quelques boutons
    Par jeremixogg dans le forum Raspberry Pi
    Réponses: 0
    Dernier message: 28/03/2016, 10h32
  3. Réponses: 7
    Dernier message: 18/04/2008, 20h07
  4. Interpreter un script python dans un prog python
    Par romeo9423 dans le forum Général Python
    Réponses: 3
    Dernier message: 01/12/2005, 16h16
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo