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 :

[pi pico] Comment utiliser correctement l'interruption ?


Sujet :

Raspberry Pi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut [pi pico] Comment utiliser correctement l'interruption ?
    Bonjour,

    comment utiliser l'interruption avec le python ?
    voici le code qui me permet de lancer le lecteur mp3:

    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
     
    import npxMp3
    from machine import Pin, UART
    import array, time
     
    interStart = Pin(17, Pin.IN, Pin.PULL_UP) # broche en entree pullup actif
    uart = UART(0, baudrate=9600) # on défni l 'UART en pin 0 et 1
     
    isPause = 0;
    volume = 5;
     
    npxMp3.reset()
     
    interStart.irq(
            lambda pin: print(
                "PLAY IRQ !:",initPlay()
            ), # fonction inline
            Pin.IRQ_FALLING # mode de déclenchement
    )
     
    def initPlay():
            print("initPlay ...")
            init_ok = 0;
            if(init_ok) == 0 :
                init_ok = 1
                npxMp3.set_vol(50)
                npxMp3.set_folder(1)
                npxMp3.play()
    Si je met à 0 la broche 17, je dois lancer mon mp3, le problème c'est que il se lance bien, mais
    l'interruption lance 4 fois "Play", le le vois en faisant un print play init ... alors que je souhait qu'il le lance une seul fois ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> initPlay ...
    PLAY IRQ !: None
    initPlay ...
    PLAY IRQ !: None
    initPlay ...
    PLAY IRQ !: None
    initPlay ...
    PLAY IRQ !: None
    initPlay ...
    PLAY IRQ !: None
    merci de vos réponse

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Qu'y a-t-il de connecté à cette broche 17 ?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    à la patte 17 j'ai juste mis une interrupteur si j'appuie sur le bouton je met à 0.
    Je pense que je n'ai pas compris les interruptions, dès qu'on rentre dans un interruption, il attend le programme:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    from machine import Pin
    import time
     
    def irq():
        print("IRQ with flags:")
        time.sleep(2)
        pause()
    p2 = Pin(17, Pin.IN, Pin.PULL_UP)
    p2.irq(lambda pin: irq(), Pin.IRQ_FALLING)
    quand j'appuie sur le bouton tout les 2 seconde j'ai le message IRQ with flags,
    comment sortir de l'interruption et de revenir au programme principal ? par exemple j'ai juste à afficher le message et attendre une autre interruption ?

    mon but est d'afficher par exemple si j'appuie sur la pin 15, on affiche 15 et si j'appuie sur la pin 17 on affiche 17 ??

    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
     
    from machine import Pin
    import time
     
    def irq(pin):
        print("IRQ with flags:")
        print("on a appuyé sur la pin ??")
        print("..")
        time.sleep(2)
        => sortir de l'interruption 
     
    p1 = Pin(15, Pin.IN, Pin.PULL_UP)
    p2 = Pin(17, Pin.IN, Pin.PULL_UP)
     
    p1.irq(lambda pin: irq(pin), Pin.IRQ_FALLING)
    p2.irq(lambda pin: irq(pin), Pin.IRQ_FALLING)

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par keokaz Voir le message
    à la patte 17 j'ai juste mis une interrupteur si j'appuie sur le bouton je met à 0.
    Connais-tu le phénomène de rebond des interrupteurs ?

    Citation Envoyé par keokaz Voir le message
    Je pense que je n'ai pas compris les interruptions, dès qu'on rentre dans un interruption, il attend le programme:
    On ne met pas de temporisation dans les interruptions.
    Une interruption doit être la plus brève possible et rendre la main le plus rapidement possible au programme principal.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    Merci, Oui je sais, mais on me donne comme consigne de ne pas mettre de résistance ce qu'il n'est pas facile.
    Donc si je comprends bien je suis obligé d'utiliser une boucle est testé des variables sans passer par une interruption

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par keokaz Voir le message
    Donc si je comprends bien je suis obligé d'utiliser une boucle est testé des variables sans passer par une interruption
    Tu n'es pas obligé mais pour commencer c'est plus simple à mon avis (surtout si tu ne peux pas ajouter un anti-rebond matériel)

    Citation Envoyé par keokaz Voir le message
    Je pense que je n'ai pas compris les interruptions
    Une interruption est un branchement sur le fonctionnement normal de ton code.

    Lorsqu'une interruption arrive :

    1. L'exécution du code principal est interrompue
    2. Le code dans l'interruption est exécuté
    3. Le code principal reprend la où il s'était arrêté


    C'est pourquoi il ne faut pas bloquer le code dans l'interruption.

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/08/2007, 11h40
  2. [D6] Comment utiliser correctement TOutlookApplication ?
    Par PomaH dans le forum Web & réseau
    Réponses: 6
    Dernier message: 11/07/2007, 11h01
  3. comment utiliser correctement les sessions?
    Par cladsam dans le forum Langage
    Réponses: 5
    Dernier message: 06/02/2006, 11h56
  4. [C#] Comment utiliser correctement Stream.Read ?
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/12/2005, 20h48
  5. Comment utiliser correctement le debugger de DevCPP
    Par Le Furet dans le forum Dev-C++
    Réponses: 2
    Dernier message: 29/09/2005, 09h56

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