Du jour au lendemain, le programme ne fonctionne plus correctement

Bonjour,

pour un projet je suis en train de réaliser un magasin automatisé.

J'ai programmé le tout grâce à pyFirmata, et tout fonctionnait à merveille !

Et à partir du moment ou j'ai connecté les fils des moteurs à mes borniers de mon tableau électrique, une chose important ne fonctionne plus … La détection de mes capteurs de contact (j'ai utilisé un filtre pour que le signal sortant de ces capteurs comme celui - ci : filtre).

Voici le code :

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
Contrôle de LEDs branchées à l'Arduino à partir
d'un PC au moyen du protocole Firmata
Interface graphique (Tkinter)
"""


import sys
import os
import serial
import time
import pyfirmata

port = 'COM3'

board = pyfirmata.ArduinoMega(port)


maliste = []
magasin = open("C:/Users/Kevin/Desktop/magasin.txt",'r')
# inventaire = open("C:/Users/Kevin/Desktop/iepscf/tfe/code/python/inventaire.txt",'r')

ok = ""

nom = ""
coord_x = 0
coord_y = 0
quantités = 0
i = 0

'''
MOTEURS
'''

moteur_x_aller = 29
moteur_x_retour = 27
moteur_y_aller = 23
moteur_y_retour = 25
moteur_z_aller = 24
moteur_z_retour = 22
EM = 26
IND = 28

'''
Capteurs
'''

capteur_X0 = board.get_pin('d:5:i')
capteur_Y0 = board.get_pin('d:2:i')

capteur_induction = board.get_pin('d:4:i')

pieces = magasin.readlines()

magasin.close()
valeur_x = 0
valeur_y = 0
valeur_precedente = 0


it = pyfirmata.util.Iterator(board)  # itérateur permet de ne pas engorger la communication série
it.start()


def moteur_capteur(moteur, capteur):
    board.digital[moteur].write(1)

    time.sleep(1)
    while True:
        if capteur.read() == False:
            board.digital[moteur].write(0)
            
            break

moteur_capteur(moteur_x_retour,capteur_X0)

En gros, j'utilise une fonction qui prend en entrée un moteur et son capteur associé. Le moteur va tourner et dès que le contact de son capteur se ferme il s'arrête.

Mais c'est pas ça le plus "drôle", c'est que quand je fais un mini programme de test pour voir l'état de mon capteur quand moi même j'appuie dessus, ben ça fonctionne (il passe bien à False quand j'appuie dessus, et True quand je n'appuie pas) ^^

Donc le signal passe correctement dans la carte, mais quand j'utilise le programme (situé plus haut), ben il ignore totalement cette info …

Et dernière chose qui à mon avis est l'os du problème, c'est que la LED TX est tout le temps allumée.

Sauf quand j'appuie sur un bouton, (celui la : bouton), qui est relié sur la bread board (je l'utilisais pour mes tests pour simuler le fait qu'un capteur à induction détectait du métal), dès que j'appuie dessus, le TX s’éteint.

Voila je pense avoir tout récité, c'est pas évident de tout résumer pour ceux qui ne sont pas dans mon projet, donc si vous avez des questions n'hésitez surtout pas.

D'avance merci

Bonjour,

Enlève le "break" pour voir.

Si j'enlève le "break", je ne sors jamais de ma boucle non ? À quoi bon ?

C'est juste un test, pour voir si ce break n'arrête pas ton programme un peu trop prématurément. Parce que du coup, que se passe-t-il pour l'instant, ton programme rend la main dès qu'il sort de la boucle ? Autre chose ?

Ça ne change rien.

J'ai peut être mal précisé mais entre le moment ou ça fonctionnait parfaitement, et le moment ou ça déconne je n'ai rien touché au code.

Le seul truc qui a changé, c'est que j'ai changé de pc (fixe à portable), mais à présent je suis de retour sur le pc ou tout fonctionnait nikel et ça ne fonctionne toujours pas.

Je sais pas si vous êtes familier à pyFirmata mais il y a un programme, à part, qui va avec pour définir manuellement, ici, et quand je met que mes "pins" seront des entrées, direct il me les met en HIGH, et la 4e pin le programme m'indique Low High en alternant rapidement.

C'est peut être du au fait que la LED Tx est tout le temps allumé, des idées à ce propos ?

Merci

Tu utilises quelle carte ?

Arduino Méga pourquoi ?

Oui, je l'avais lu dans ton programme, désolé j'avais déjà oublié. Le programme dont tu donnes le lien te permet de faire la configuration en entrée ou en sortie des broches que tu utilises. Mais, dis-moi si je me trompe, je serais étonné que cette configuration soit sauvegardée si tu débranches la carte. Si la configuration n'est pas sauvegardée, ça veut dire que:

  • Ou bien tu dois la refaire à chaque fois que tu réalimentes la Mega (pas pratique...)
  • Ou alors tu la fais dans ton programme Python (ce qui ne me semble pas être le cas actuellement)

question bete

est ce que ton programme marche si tu laisse ton pc brancher sur le port usb?

Désolé de répondre si tard, la panne était réellement bête, un malin avait mit une pin sur le TX -_-

À présent j’ai un autre soucis, mais qui est le même ! À part que la LED Tx n’est plus allumé non stop …

Je sais pas pourquoi mais j’ai créé un autre topic ici

Je vous remercie d’avance :wink: