Programme arduino, relais et clavier matriciel 4*4 - Page 3
Répondre à la discussion
Page 3 sur 5 PremièrePremière 3 DernièreDernière
Affichage des résultats 61 à 90 sur 142

Programme arduino, relais et clavier matriciel 4*4



  1. #61
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4


    ------

    Tu as besoin d'une précision importante sur la tempo ?

    Si non, la solution "sale" c'est de créer 3 nouvelles variables associées à tes 3 relais. TempoA, TempoB....

    Appui sur 1, 2 et 3 : pas de changements

    Appui sur A -> TempoA = Temps et coller le relais
    Appui sur B -> TempoB = Temps


    Hors de ta boucle clavier (mais toujours dans le loop) tu fais un truc du genre :


    Si relais A activé ET TempoA supérieur à 10, fait une tempo de 10 ms, et retire 10 de TempoA.
    Si TempoA = 0, coupe le relais

    Et pareil pour les autres.

    Comme tu ne freezzes pas l'exécution du programme, le reste reste fonctionnel.... Au lieu de faire une tempo unique qui bloque tout, tu la découpes en petits morceaux pour laisser le programme tourner entre...

    Tu vois le genre ?

    -----
    La robotique, c'est fantastique !

  2. #62
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Citation Envoyé par Yoruk Voir le message
    Bien tenté, mais ça ne marchera pas... Car, quand un relais est activé, il est forcément suivi d'une tempo, puis il est coupé. Et pendant la tempo, (l'instant qui te préoccupe) tu ne peux rien faire ! La arduino mouline sur des boucles pour effectuer la temporisation, et ne fait rien d'autre !
    Par exemple : si le relais 1 est activé et que je veux activé le relais 2 juste après, je ne peux pas juste "enregistrer" la demande (du relais 2) et l'exécuté quand le relais 1 a fini?

  3. #63
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Citation Envoyé par jmjim Voir le message
    Par exemple : si le relais 1 est activé et que je veux activé le relais 2 juste après, je ne peux pas juste "enregistrer" la demande (du relais 2) et l'exécuté quand le relais 1 a fini?
    Si, mais on s'éloigne de la description de ton programme... Mais encore une fois quand le relais 1 est en cours de tempo, rien d'autre ne peut se passer ! Il ne va pas pouvoir "enregistrer la demande du relais 2" !!

    Il te faut passer par quelque chose comme décrit en #61.
    La robotique, c'est fantastique !

  4. #64
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    En #61 j'ai pas tout compris..

  5. #65
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Citation Envoyé par Yoruk Voir le message
    Si, mais on s'éloigne de la description de ton programme...
    C'est pas grave si il a rien a voir avec celui la..
    mon but c'est de pouvoir activé plusieurs relais en même temps, apres niveaux programme c'est pas grave si je dois tout recommencé!

  6. #66
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Fait comme tu veux... C'est ton programme, pas le mien.

    Tu ne comprends pas quoi exactement en #61 ?

    L'idée est de ne pas effectuer la tempo en une seule fois au moment de l'appui d'une touche, mais de faire un bout de tempo, regarder les touches du clavier, continuer un peu la tempo, regarder à nouveau le clavier, continuer la tempo s'il reste du temps, etc...
    La robotique, c'est fantastique !

  7. #67
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Dans le fichier ci joins, il y parle dans la page 32 de la fonction millis().

    Penses-tu que je peux faire pareil avec cette fonction?
    Images attachées Images attachées

  8. #68
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    La fonction millis retourne effectivement le nombre de ms depuis le démarrage de la carte. En notant sa valeur au moment (genre TempoA = millis() ) du déclenchement du relais, tu as juste à arrêter le relais dès que millis à atteint la valeur TempoA + Temps.

    Tu vois le genre ? (C'est effectivement plus simple)
    La robotique, c'est fantastique !

  9. #69
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Je vois vite fait.

    j'ai fait un test, j'ai un peu copie de l'exemple dans le pdf mais ca a rien donné, et comme un imbécile je ne l'ai pas gardé.

  10. #70
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Au moment où tu appuie sur A (relais 1), enregistre dans une variable la valeur actuelle de millis + la valeur de Temps. Active le relais.

    Hors boucle clavier, effectue un test de cette variable. Si elle est supérieure à millis, tu coupes le relais.
    La robotique, c'est fantastique !

  11. #71
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    J'avais ecrit ca:

    Code:
    #include <Keypad.h>
    
    #define RELAY_1 10
    #define RELAY_2 11
    #define RELAY_3 12
    #define RELAY_4 13
    
    
    //--- Constantes utilisées avec le clavier 4x4
    const byte LIGNES = 4; // 4 lignes
    const byte COLONNES = 4; //4 colonnes
    
    const int L1=2; //declaration constante de broche 
    const int L2=3; //declaration constante de broche 
    const int L3=4; //declaration constante de broche 
    const int L4=5; //declaration constante de broche 
    const int C1=6; //declaration constante de broche 
    const int C2=7; //declaration constante de broche 
    const int C3=8; //declaration constante de broche 
    const int C4=9; //declaration constante de broche 
    
    //--- Définition des touches 
    char touches[LIGNES][COLONNES] = {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
    
    // tableaux de lignes et colonnes
    byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
    byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier
    
    char touche; // variable de stockage valeur touche appuyée
    
    // création d'un objet keypad = initialisation clavier 
    Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
    // les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé 
    // les broches de colonnes sont automatiquement configurées en SORTIE
    
    int programme; 
    long temps;
    
    void setup() {
    // on initialise les sorties et on éteind les leds connectées
        pinMode(RELAY_1, OUTPUT);  
        digitalWrite(RELAY_1, HIGH);
        pinMode(RELAY_2, OUTPUT);  
        digitalWrite(RELAY_2, HIGH);
        pinMode(RELAY_3, OUTPUT);  
        digitalWrite(RELAY_3, HIGH);
        pinMode(RELAY_4, OUTPUT);    
        digitalWrite(RELAY_4, HIGH);
        
      }
      
    void loop() { // debut de la fonction loop()
    
    // --- ici instructions à exécuter par le programme principal --- 
    
    
    touche = clavier.getKey(); // lecture de la touche appuyée
    
    
    if(touche != NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée 
      
      if(touche=='1') //si les touches '1' est tapée.
        {programme=5000;} // variable temps est à 300.
      if(touche=='2')
        {programme=10000;}
      if(touche=='3')
        {programme=15000;}  
        
      if(touche=='A') // si touche 'A' est tapée.
        {((millis() - temps) > programme);
           digitalWrite(RELAY_1, LOW);
           temps = millis();}
    }}

  12. #72
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Alors déjà donne un nom explicite à tes variables... "Programme" c'est pas clair. Ok pour :

    Code:
      if(touche=='1') //si les touches '1' est tapée.
        {programme=5000;} // variable temps est à 300.  Attention toutefois tes commentaires ne sont pas à jour, tu risques de t’emmêler les pinceaux !!
      if(touche=='2')
        {programme=10000;}
      if(touche=='3')
        {programme=15000;}
    Par contre,
    Code:
     if(touche=='A') // si touche 'A' est tapée.
        {((millis() - temps) > programme);     C'est quoi ça, une condition ? millis-temps signifie que tu recules dans le temps !!
           digitalWrite(RELAY_1, LOW);
           temps = millis();}
    Ne veut rien dire !
    A aucun moment tu n'actives ton relais. C'est dans la condition "Si touche A appuyée" qu'il faut enregistrer le temps d'arrêt du relais sous une nouvelle variable (cf post 70), activer le relais.

    Hors boucle clavier (tu n'as rien hors boucle clavier ici) tu testes cette variable. Quand elle est égale à millis, tu coupes le relais.


    Pour faire simple : Tu veux activer ton relais pendant X secondes. t correspond au temps qui s'écoule (c'est millis() )

    A l'instant t, Tu appuies sur A. Tu enregistres dans une nouvelle variable t+X (nommons la Y). Tu allumes le relais. Cette variable Y, supérieure à t, donne le temps pour lequel il va falloir stopper le relais.

    Le temps passe, tu compares t et Y (hors boucle clavier). Dès que les 2 variables sont égales, c'est que X secondes se sont écoulées, donc que tu peux couper le relais.
    La robotique, c'est fantastique !

  13. #73
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Oui désolé, c'est vrai que c'est un peu le bordel (j'ai fais plein de test et j'ai pas forcement tout changé c'est pour ca). Je vais tout remettre au propre.

    Faut-il que je mettes une variable long temps pour millis(), comme il a fait dans le pdf?

  14. #74
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Oui, c'est mieux.
    La robotique, c'est fantastique !

  15. #75
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Citation Envoyé par Yoruk Voir le message

    Le temps passe, tu compares t et Y (hors boucle clavier). Dès que les 2 variables sont égales, c'est que X secondes se sont écoulées, donc que tu peux couper le relais.
    Il faut que je mette quoi?

    Code:
    T-Y = ?
    
    digitalWrite(relay_1, LOW); // dans la boucle clavier

  16. #76
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Fait un test avec une condition.

    Toujours pareil, définit bien tes variables et écrit en français ce que tu veux que le programme fasse.
    La robotique, c'est fantastique !

  17. #77
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Voila ce que j'ai fait.
    Je sais pas trop si c'est bon sur tou que j'ai une erreur lors de la vérification.

    Code:
    #include <Keypad.h>
    
    #define RELAY_1 10
    #define RELAY_2 11
    #define RELAY_3 12
    #define RELAY_4 13
    
    
    //--- Constantes utilisées avec le clavier 4x4
    const byte LIGNES = 4; // 4 lignes
    const byte COLONNES = 4; //4 colonnes
    
    const int L1=2; //declaration constante de broche 
    const int L2=3; //declaration constante de broche 
    const int L3=4; //declaration constante de broche 
    const int L4=5; //declaration constante de broche 
    const int C1=6; //declaration constante de broche 
    const int C2=7; //declaration constante de broche 
    const int C3=8; //declaration constante de broche 
    const int C4=9; //declaration constante de broche 
    
    //--- Définition des touches 
    char touches[LIGNES][COLONNES] = {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
    
    // tableaux de lignes et colonnes
    byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
    byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier
    
    char touche; // variable de stockage valeur touche appuyée
    
    // création d'un objet keypad = initialisation clavier 
    Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
    // les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé 
    // les broches de colonnes sont automatiquement configurées en SORTIE
    
    int tempo; // variable tempo (temporisation des relais)
    long  temps; // variable temps (foncion millis() )
    int Y; //variable temps pour lequel il va falloir stopper le relais
    
    temps + tempo = Y;
    
    
    void setup() {
    // on initialise les sorties et on éteind les leds connectées
        pinMode(RELAY_1, OUTPUT);  
        digitalWrite(RELAY_1, HIGH);
        pinMode(RELAY_2, OUTPUT);  
        digitalWrite(RELAY_2, HIGH);
        pinMode(RELAY_3, OUTPUT);  
        digitalWrite(RELAY_3, HIGH);
        pinMode(RELAY_4, OUTPUT);    
        digitalWrite(RELAY_4, HIGH);
        
      }
      
    void loop() { // debut de la fonction loop()
    
    // --- ici instructions à exécuter par le programme principal --- 
    
    
    touche = clavier.getKey(); // lecture de la touche appuyée
    
    
    if(touche != NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée 
      
      if(touche=='1') //si les touches '1' est tapée.
        {tempo=5000;} // variable tempo est à 5000.
      if(touche=='2')
        {tempo=10000;}
      if(touche=='3')
        {tempo=15000;}  
        
      if(touche=='A') // si touche 'A' est tapée.
        {millis = temps;
         digitalWrite(RELAY_1, LOW);
         if(temps = Y);
           {digitalWrite(RELAY_1, HIGH);}
         }
       }}
    Arduino : 1.6.2 (Windows XP), Carte : "Arduino Uno"

    java.lang.NullPointerException

    at processing.app.BaseNoGui.remov eDescendants(BaseNoGui.java:90 4)

    at processing.app.BaseNoGui.remov eDir(BaseNoGui.java:926)

    at processing.app.Base.removeDir( Base.java:2433)

    at processing.app.Sketch.saveAs(S ketch.java:712)

    at processing.app.Editor.handleSa veAs(Editor.java:2382)

    at processing.app.Editor.handleSa ve(Editor.java:2323)

    at processing.app.Editor.handleRu n(Editor.java:1980)

    at processing.app.EditorToolbar.m ousePressed(EditorToolbar.java :324)

    at java.awt.Component.processMous eEvent(Component.java:6522)

    at javax.swing.JComponent.process MouseEvent(JComponent.java:332 2)

    at java.awt.Component.processEven t(Component.java:6290)

    at java.awt.Container.processEven t(Container.java:2234)

    at java.awt.Component.dispatchEve ntImpl(Component.java:4881)

    at java.awt.Container.dispatchEve ntImpl(Container.java:2292)

    at java.awt.Component.dispatchEve nt(Component.java:4703)

    at java.awt.LightweightDispatcher .retargetMouseEvent(Container. java:4898)

    at java.awt.LightweightDispatcher .processMouseEvent(Container.j ava:4530)

    at java.awt.LightweightDispatcher .dispatchEvent(Container.java: 4462)

    at java.awt.Container.dispatchEve ntImpl(Container.java:2278)

    at java.awt.Window.dispatchEventI mpl(Window.java:2739)

    at java.awt.Component.dispatchEve nt(Component.java:4703)

    at java.awt.EventQueue.dispatchEv entImpl(EventQueue.java:751)

    at java.awt.EventQueue.access$500 (EventQueue.java:97)

    at java.awt.EventQueue$3.run(Even tQueue.java:702)

    at java.awt.EventQueue$3.run(Even tQueue.java:696)

    at java.security.AccessController .doPrivileged(Native Method)

    at java.security.ProtectionDomain $1.doIntersectionPrivilege(Pro tectionDomain.java:75)

    at java.security.ProtectionDomain $1.doIntersectionPrivilege(Pro tectionDomain.java:86)

    at java.awt.EventQueue$4.run(Even tQueue.java:724)

    at java.awt.EventQueue$4.run(Even tQueue.java:722)

    at java.security.AccessController .doPrivileged(Native Method)

    at java.security.ProtectionDomain $1.doIntersectionPrivilege(Pro tectionDomain.java:75)

    at java.awt.EventQueue.dispatchEv ent(EventQueue.java:721)

    at java.awt.EventDispatchThread.p umpOneEventForFilters(EventDis patchThread.java:201)

    at java.awt.EventDispatchThread.p umpEventsForFilter(EventDispat chThread.java:116)

    at java.awt.EventDispatchThread.p umpEventsForHierarchy(EventDis patchThread.java:105)

    at java.awt.EventDispatchThread.p umpEvents(EventDispatchThread. java:101)

    at java.awt.EventDispatchThread.p umpEvents(EventDispatchThread. java:93)

    at java.awt.EventDispatchThread.r un(EventDispatchThread.java:82 )





















    sketch_may19b.ino:45:1: error: 'temps' does not name a type

    sketch_may19b.ino: In function 'void loop()':

    sketch_may19b.ino:79:13: error: assignment of function 'long unsigned int millis()'

    sketch_may19b.ino:79:13: error: cannot convert 'long int' to 'long unsigned int()' in assignment

    Erreur lors de la compilation.

    Ce rapport contiendrait plus d'informations si l'option
    "Montrer les informations de sortie pendant la compilation"
    était activée dans Fichier > Préférences.

  18. #78
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Encore une fois, écrit d'abord en français ce que tu veux que le programme fasse...! Si tu ne sais pas ce que tu veux que le programme fasse, pas la peine d'ouvrir l'éditeur arduino !!
    Regarde mes derniers messages, c'est clairement expliqué...


    Et après quand je vois ça, ça démotive...:

    Code:
    millis = temps;
    Elle veut dire quoi pour toi cette ligne ?

    Redonne moi la syntaxe d'une affectation de variable !
    La robotique, c'est fantastique !

  19. #79
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    J'ai changé ca, j'ai mis
    Code:
    long temps = millis();

  20. #80
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Citation Envoyé par Yoruk Voir le message

    Code:
    millis = temps;
    Elle veut dire quoi pour toi cette ligne ?
    je voulais dire :
    Quans j'appuis sur A
    ca met millis() dans la variable temps.

  21. #81
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Et donc, quelle est la syntaxe exacte d'une affectation de variable ?
    La robotique, c'est fantastique !

  22. #82
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    en francais :

    J'appuis sur la touche A
    La fonction millis() ce mets dans la variable temps:
    Le RELAY_1 s'active.


    Quand la variable int y = temps + tempo (temporisation bouton 1, 2, 3) et plus petite que temps alors
    je désactive le RELAY_1.

    voila ce que j'ai essayé de faire...
    C'est ce que j'ai compris dans ce que tu m'a dit en #72

  23. #83
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Presque... Il faut prendre en compte la valeur de la tempo au moment où tu enregistres millis() car sinon, le moindre changement (touches 1 2 et 3) va tout faire foirer !
    La robotique, c'est fantastique !

  24. #84
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    J'ai quelques blocages :
    est-ce que mes variables : long temps = millis(); et int Y = temps + tempo; sont correcte?

    Comment je fais pour mettre millis() dans la variable temps lorsque j'appuis sur A?
    Comment prendre en compte la valeur de la tempo?

  25. #85
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Dans ta boucle setup, tu initialises toutes les variables dont tu as besoin

    Code:
    long Temps =0;
    int bidule =0;
    Et ensuite, dans ton code, tu n'as pas besoin de rappeler le type (pas de int, ni de long).

    Comment je fais pour mettre millis() dans la variable temps lorsque j'appuis sur A?
    Temps = millis();

    Encore une fois, prépare ton code en français, avec des noms de variable explicites...!
    La robotique, c'est fantastique !

  26. #86
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    Comment prendre en compte la valeur de la tempo quand j'enregistre millis()?

  27. #87
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Citation Envoyé par Yoruk Voir le message
    Encore une fois, prépare ton code en français, avec des noms de variable explicites...!
    J'attends...! (Je réponds à ta question dès que j'ai le programme en français et les noms de variables !)
    La robotique, c'est fantastique !

  28. #88
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    J'appuis sur la touche A
    la fonction millis() se met dans la variable temps (que j'aurais préalablement créé)
    "enregistrement" de la valeur tempo
    le RELAY_1 s'active

    je craie une variable int y;
    la variable y est égale à temps + tempo (tempo des bouton 1, 2, 3)
    Quand la variable int y est plus petite que la variable temps alors
    le RELAY_1 se désactive.

  29. #89
    Yoruk

    Re : Programme arduino, relais et clavier matriciel 4*4

    Attention, ton fonctionnement veut dire que si tu changes ta valeur temps pendant qu'un relais est activé, le résultat risque d'être aléatoire...

    Bon maintenant passe ça en arduino...

    la variable y est égale à temps + tempo (tempo des bouton 1, 2, 3)
    s'écrit simplement y = temps + tempo ;
    La robotique, c'est fantastique !

  30. #90
    jmjim

    Re : Programme arduino, relais et clavier matriciel 4*4

    tu veux dire si je change la valeur tempo (si j'appuis sur un autre boutons 1 2 ou 3)
    justement je fais comment pour l'intégrer quand j'appuis sur le bouton A?

Page 3 sur 5 PremièrePremière 3 DernièreDernière

Discussions similaires

  1. Clavier matriciel !
    Par yass7 dans le forum Électronique
    Réponses: 17
    Dernier message: 03/01/2014, 21h39
  2. Fonctionnement d'un montage clavier matriciel
    Par invite8191e5b5 dans le forum Électronique
    Réponses: 1
    Dernier message: 25/04/2010, 22h20
  3. Clavier matriciel
    Par invitefc343bc7 dans le forum Électronique
    Réponses: 1
    Dernier message: 01/04/2009, 16h54
  4. [PPE] langage C et clavier matriciel
    Par invitedcc7860a dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 02/05/2008, 19h04
  5. gestion de clavier matriciel i2c
    Par invite6d875316 dans le forum Électronique
    Réponses: 2
    Dernier message: 26/01/2007, 22h49
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...