Garder l'appui d'un bouton de télécommande ?
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Garder l'appui d'un bouton de télécommande ?



  1. #1
    urtechnic

    Garder l'appui d'un bouton de télécommande ?


    ------

    Bonjour, je programme sous arduino et mon projet utilise une télécommande IR, qui contrôle un attiny 85, celui-ci active 2 relais séparément.
    Se que je veut faire:
    -lorsque j'appuie sur un bouton de la télécommande un relais doit se fermer et s'ouvrir seulement quand je lâche le bouton
    En fait je galère avec les if/else et les delay, mon problème est le même qu'un montage classique arduino avec un bouton poussoir, mais moi j'ai la télécommande, et le fait de recevoir des signaux de la télécommande et non d'un bouton change le programme (a moins que je ne me trompe et dans se cas c'est la même chose), voici mon programme
    Code:
    #include <IRremote.h>
    #include <IRremoteInt.h> // Ce n'est pas la librairie standart IRremote mais celle adapté pour les attiny...
    
    
    int before; // déclare l'état actuel pour le changer plus tard
    int relay1=2; // pin 2 de l'attiny sur le relais 1
    int relay2=0; // même chose
    int RECV_PIN = 3; //pin sortie signal du recepteurIR sur broche 3 de l'attiny
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    
    
    
    void setup(){
      irrecv.enableIRIn(); // start receiver
      before=0; //relay maintenant a 0
      pinMode(relay1,OUTPUT);
      pinMode(relay2,OUTPUT);
     }
    
    
    
    void loop() {
      if (irrecv.decode(&results)) {                                      
    //------------------------------------------------------------------------------------------     RELAIS 1    
        if (results.value==0xD32){ //active/désactive le relay                     
        if(before==0){ // si le relay était désactivé, maintenant il est activé
          digitalWrite(relay1,HIGH); // le relay s'active
          before=1; //le relais est maintenant actif
          delay(40); 
        }
          
        else{
          digitalWrite(relay1,LOW); //si le relay était activé, maintenant il est désactivé
          before=0; 
          delay(10);
        }
       }
       
        if (results.value==0x532){ //active/désactive le relay
        if(before==0){ // si le relay était désactivé, maintenant il est activé
          digitalWrite(relay1,HIGH);
          before=1; //le relais est maintenant actif
          delay(40);
        }
        else{
          digitalWrite(relay1,LOW); //si le relay était activé, maintenant il est désactivé
          before=0;
          delay(10); 
        }  
       }   
    //------------------------------------------------------------------------------------------     RELAIS 2 
        
        if (results.value==0xD34){
        if(before==0){ 
          digitalWrite(relay2,HIGH);
          before=1;
          delay(40); 
        
          digitalWrite(relay2,LOW); 
          before=0; 
          delay(10);
          
       }}
       
        if (results.value==0x534){ 
        if(before==0){ 
          digitalWrite(relay2,HIGH);
          before=1;
          delay(40);
        
          digitalWrite(relay2,LOW); 
          before=0;
          delay(10);
          
       }}
       
      irrecv.resume();
      
    }}
    Je précise qu'avec ce programme le relais 1 s'active et se désactive a chaque nouvel appuie et le relais 2 s'active 40millisecond et se désactive
    Merci par avance de votre aide, j’espère que ma question est claire

    -----

  2. #2
    urtechnic

    Re : Garder l'appuie d'un bouton de télécommande

    Up, quelqu'un peut-il 'aider ?

  3. #3
    Jack
    Modérateur

    Re : Garder l'appuie d'un bouton de télécommande

    Déplacé car je pense que tu auras plus de réponses dans le forum électronique qu'en info

  4. #4
    nornand

    Re : Garder l'appuie d'un bouton de télécommande

    je pense que la télécommande coupe l'émission au bout de quelque seconde pour l'économie des piles , a vérifier !

  5. A voir en vidéo sur Futura
  6. #5
    Murayama

    Re : Garder l'appuie d'un bouton de télécommande

    Bonjour!

    Je vois quelques erreurs ou bizarreries.

    1. La variable "before" est utilisée pour les 2 relais. Comment le programme va-t-il
    interpréter cette variable? Je crois qu'il vous faut au moins une variable d'état
    par relais, sinon le programme va se marcher sur les lacets.

    2. Vos relais sont censés avoir le même comportement? Alors c'est mal parti.
    Pour le relais 1, vous testez if before == 0, puis else (donc if before != 0).
    Dans le relais 2, vous avez uniquement if before == 0, pas de else.

    3. Vous testez plusieurs valeurs. Apparemment, D32 / 532 activent et désactivent le
    relais 1, c'est bien ça?
    De même, D34 / 534 activent et désactivent le relais 2.
    Par contre, admettons que vous avez D34, ça va désactiver le relais 1. Est-ce bien
    ce que vous voulez?

    4. Une chose que je ne comprends pas: vous voulez qu'un relais "copie" l'état d'un
    bouton, c'est bien cela? Dans ce cas pourquoi les valeurs D32 et 532 agissent-elles
    sur le même relais? Ou alors D32 c'est pour allumer et 532 pour éteindre?

    Une chose que vous devriez faire, plutôt que programmer directement, c'est écrire
    d'abord avec des mots ce que vous voulez faire. Parce que là, j'ai l'impression
    que ce programme a été fait en mode 1. programmation, 2. Réflexion, et que vous
    n'êtes pas encore passé au point (2).

    Pascal

  7. #6
    urtechnic

    Re : Garder l'appui d'un bouton de télécommande ?

    Bonjour, merci de votre réponse
    1. La variable "before" est utilisée pour les 2 relais. Comment le programme va-t-il
    interpréter cette variable? Je crois qu'il vous faut au moins une variable d'état
    par relais, sinon le programme va se marcher sur les lacets.
    Je comprend que se système peut être a revoir pour mon cas
    2. Vos relais sont censés avoir le même comportement? Alors c'est mal parti.
    Pour le relais 1, vous testez if before == 0, puis else (donc if before != 0).
    Dans le relais 2, vous avez uniquement if before == 0, pas de else.
    tout a fait normal, c'est simplement pour tester 2 choses différentes en même temps, sa ne gêne rien
    3. Vous testez plusieurs valeurs. Apparemment, D32 / 532 activent et désactivent le
    relais 1, c'est bien ça?
    De même, D34 / 534 activent et désactivent le relais 2.
    Par contre, admettons que vous avez D34, ça va désactiver le relais 1. Est-ce bien
    ce que vous voulez?
    oui D32/ 532 pour le bouton 1, c'est le même bouton de télécommande, ainsi que D34/ 534 le bouton 2,
    désolé je ne comprend pas votre dernière question ( je souhaite qu'un relais s'active lors de l'appuie et se désactive lorsque que l'on relâche)
    4. Une chose que je ne comprends pas: vous voulez qu'un relais "copie" l'état d'un
    bouton, c'est bien cela? Dans ce cas pourquoi les valeurs D32 et 532 agissent-elles
    sur le même relais? Ou alors D32 c'est pour allumer et 532 pour éteindre?
    Non en fait, pour un même bouton le signal émis est D32 et 532 et pour l'autre D34 et 534, peut être faudrais t-il les lier dans le programme pour gagner en place et éviter les embrouilles (mais comment ?)

    Une chose que vous devriez faire, plutôt que programmer directement, c'est écrire
    d'abord avec des mots ce que vous voulez faire. Parce que là, j'ai l'impression
    que ce programme a été fait en mode 1. programmation, 2. Réflexion, et que vous
    n'êtes pas encore passé au point (2).
    en algorithme quoi ? mais je manque de connaissance pour réécrire un code moi même

  8. #7
    Murayama

    Re : Garder l'appui d'un bouton de télécommande ?

    Bonjour!



    J'ai un peu de mal à vous répondre parce que je ne comprends pas comment
    fonctionne votre télécommande. Je n'ai jamais vu de télécommande qui génère
    2 codes pour la même touche. Je cite:

    oui D32/ 532 pour le bouton 1
    La seule chose que je pourrais convevoir, c'est envoyer l'un des 2 codes quand on
    appuie et l'autre quand on relâche. Mais c'est en contradiction avec ce que j'ai toujours
    vu. Exemple (télécommande Sony). Toujours le même code répété.

    Sony1.png

    Sony2.png

    En ce qui concerne ce que je vous disais, écrire ce que vous voulez faire.

    Exemple:
    - Quand j'appuie sure la touche A, le relais 1 se colle.
    - Quand je relâche la touche A, le relais 1 se décolle.
    - Pareil pour B, relais 2

    Ou alors, autre scénario:
    - Quand j'appuie sure la touche A, le relais 1 se colle.
    - Quand je relâche la touche A, le relais reste collé.
    - Quand j'appuie à nouveau sur la touche A, le relais se décolle.
    - Quand je relâche la touche A (avec relais décollé): pas d'action.

    Apparemment, ce serait plutôt la première solution.

    tout a fait normal, c'est simplement pour tester 2 choses différentes en même temps, sa ne gêne rien
    Je n'avais pas vu la partie relative au comportement du relais 2.

    Et ceci mis à part, vous devriez réécrire le code avec des interruptions plutôt
    que d'utiliser des délais à tire-larigot. Règle générale en embarqué: ne jamais utiliser
    de délais. Même Arduino a des interruptions.

    Une des télécommandes que je préfère:
    C'était une commande de vidéo disque. (les 30 cm double face qui existaient avant le DVD).
    Le disque lui-même ne fonctionne plus, mais la télécommande, si. Il y a une roue
    utilisable comme volant sur des petits systèmes télécommandés par IR.

    Sony.jpg

    Pascal

  9. #8
    urtechnic

    Re : Garder l'appui d'un bouton de télécommande ?

    Bonjour,
    J'ai un peu de mal à vous répondre parce que je ne comprends pas comment
    fonctionne votre télécommande. Je n'ai jamais vu de télécommande qui génère
    2 codes pour la même touche.
    et bien pourtant si, avec mon programme de décodage sous arduino, il m'a affiché soit D32 soit 532.

    Votre premier algorithme, c'est bien celui qu'il me faut.
    Pour les interruptions, je croyais que les delay en était... Je me suis un peu renseigné et je ne les ai jamais utilisés

    Règle générale en embarqué: ne jamais utiliser
    de délais.
    merci du conseil mais pourquoi, car il stop le programme ?
    Sympa la télécommande

  10. #9
    Murayama

    Re : Garder l'appui d'un bouton de télécommande ?

    Re!

    et bien pourtant si, avec mon programme de décodage sous arduino, il m'a affiché soit
    D32 soit 532.
    Admettons. Mais avant de faire quoi que ce soit de ces codes, il faut savoir à quoi
    ils correspondent. Eest-ce qu'ils sont envoyés en série l'un après l'autre alternativement?
    Dans ce cas :

    Code:
        if((code == D32) || (code == 532)) {    //    Code venant du bouton "A" (par exemple)
            if(status_button_A == 0)  {
                status_button_A = 1;
                set_relay(1, high);
            }
        }
        etc...
    Par contre, si c'est D32 pour presser et 532 pour relacher ou le contraire, alors le
    code va changer. Donc: à quoi correspondent ces 2 codes pour le même bouton?
    Vous avez accès à un oscilloscope pour voir quel genre de signal arrive?
    Il y a des myriades de possibilités pour les signaux de télécommandes.
    Certains on un préfixe bas, (ex Sony, voir plus haut)
    D'autres ont en plus un préfixe haut (ex Toshiba)
    D'autres pas du tout (ex un système iHome que j'ai acheté pour un iPod).
    Si vous envoyez par exemple une trame JVC (48 bits, si je me souviens bien) sur
    un récepteur iHome (12 bits sans préfixe), alors le système peut décoder en une
    suite de 3 codes (s'il est mal fait).

    Votre premier algorithme, c'est bien celui qu'il me faut.
    Oui, mais les 2 boutons ne fonctionnent pas de la même façon, c'est bien ça?

    Pour les interruptions, je croyais que les delay en était... Je me suis un peu
    renseigné et je ne les ai jamais utilisés
    Non, je crois bien que ce sont de bêtes boucles consommatrices de cycles d'horloge.
    Donc elles bloquent le programme qui ne peut rien faire d'autre.

    J'ai publié un tutorial il y a peu de temps sur ce site (mais ce n'est pas de l'Arduino).
    Si vous cherchez quelques pages plus haut, vous allez le trouver. Le dernier article
    portait sur des servos (genre modéliste).

    Voilà.

    Pascal

  11. #10
    freepicbasic

    Re : Garder l'appui d'un bouton de télécommande ?

    if (results.value==0xD32){ //active/désactive le relay

    Bascule le relais en position ON pour 40ms
    ou en position OFF pour 10ms

    Temps vraiment court à l'échelle humaine 200ms aurait été vraiment plus adapté
    50ms représente 20 fois par seconde, 200ms 5 fois , peut être encore trop long , 1 seconde serait plus sur...
    En restant appuyer ça va frétiller
    et rester allumé ou éteint plus ou moins aléatoirement puisque 50ms pour réagir c est vraiment court.


    if (results.value==0x532){ //active/désactive le relay
    idem pour le relais 2



    if (results.value==0xD34){
    Si le relais1 est ON on ne fait rien !
    Si le relais1 est OFF on entre dans ce mode;
    Qui va allumé pendant 40ms et éteindre pendant 10ms
    et on sort en mode relais OFF


    if (results.value==0x534){
    idem pour le relais 2


    Quelle est donc le bon fonctionnement désiré ?
    A+, pat

  12. #11
    urtechnic

    Re : Garder l'appui d'un bouton de télécommande ?

    Re et merci de vos intervention !
    Murayama:
    Voila je suis en train de tester se que reçois le récepteur grâce au programme arduino:
    -si j'appuie et relâche aussitôt le bouton gauche plusieurs fois, voila se qui se passe :
    D32 532 532 D32 532 D32 532 D32 532 D32 532 532 532 532 D32 532 D32 D32 532 532...
    on peut voir que c'est purement aléatoire (je pense), ensuite la même histoire se produit avec le 2eme bouton (D34 / 534)
    La différence que je viens de constater, c'est que lorsque je garde un bouton appuyé, le même code se répète, si je lâche et je ré-appui continuellement, le second vient s'afficher en série et ainsi de suite et ce pour les 2 boutons, exemple:
    532 //appuie prolongé sur bouton gauche
    532
    532
    532
    532
    532
    532 // je lâche le bouton
    D32 // je réappuie
    D32
    D32
    D32
    D32
    D32 // je lâche
    532 // je réappuie ...
    532
    532
    532
    532
    D32
    D32
    D32
    D32
    D32
    532
    532
    532
    532
    Voila se que je viens de tester, ensuite non je n'est pas d'oscillo sous la main, le code que vous me proposez m'a l'air intéressant je vais le tester.
    Oui, mais les 2 boutons ne fonctionnent pas de la même façon, c'est bien ça?
    Si si ils fonctionnent pareil
    Je me renseignerais sur les interruptions et lirait votre tutoriel, merci.

    freepicbasic:
    Temps vraiment court à l'échelle humaine 200ms aurait été vraiment plus adapté
    50ms représente 20 fois par seconde, 200ms 5 fois , peut être encore trop long , 1 seconde serait plus sur...
    En restant appuyer ça va frétiller
    et rester allumé ou éteint plus ou moins aléatoirement puisque 50ms pour réagir c est vraiment court.
    Le delay court est enfaite pour pouvoir de nouveau appuyer sur le bouton sans devoir attendre la fin d'un delay trop long (en gros le temps de réponse), et je veut justement ne pas faire "frétiller" le relay mais qu'il reste fermé aussi longtemps que l'on appuie,
    le fonctionnement attendus est : lorsque j'appuie le relais se colle et ce tant que je reste appuyé et se décolle si je lâche. Par contre je pense que vous n'avez pas compris ou mélangé les relais, pour le relais 1 son code est D32 et/ou 532, pour le relais 2: D34 et/ou 534, voila

  13. #12
    urtechnic

    Re : Garder l'appui d'un bouton de télécommande ?

    Re, j'ai amélioré légerement le code et surtout compacté pour une meilleur lisibilité...
    Code:
    #include <IRremote.h>
    #include <IRremoteInt.h> // Ce n'est pas la librairie standart IRremote mais celle adapté pour les attiny...
    
    
    int before; // déclare l'état actuel pour le changer plus tard
    int relay1=2; // pin 2 de l'attiny sur le relais 1
    int relay2=0; // même chose
    int RECV_PIN = 3; //pin sortie signal du recepteurIR sur broche 3 de l'attiny
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    
    
    
    void setup(){
      irrecv.enableIRIn(); // start receiver
      before=0; //relay maintenant a 0
      pinMode(relay1,OUTPUT);
      pinMode(relay2,OUTPUT);
     }
    
    
    
    void loop() {
      if (irrecv.decode(&results)) {                                      
    //------------------------------------------------------------------------------------------     RELAIS 1    
        if ((results.value==0xD32)||(results.value==0x532)){  //  active/désactive le relay                     
        if(before==0){                                        // si le relay était désactivé, maintenant il est activé
          digitalWrite(relay1,HIGH);                          // le relay s'active
          before=1;                                           //le relais est maintenant actif
          delay(40); 
        }
          
        else{
          digitalWrite(relay1,LOW);
          before=0; 
          delay(10);
        }}
         
    //------------------------------------------------------------------------------------------     RELAIS 2 
        
        if ((results.value==0xD34)||(results.value==0x534)) {
        if(before==0){ 
          digitalWrite(relay2,HIGH);
          before=1;
          delay(40); 
        }
        
        else{
          digitalWrite(relay2,LOW); 
          before=0; 
          delay(10);
          
       }}
       
      irrecv.resume();
      
       }}
    Merci Murayama pour l'idée d'utiliser les "ou" logique,
    Code:
    if ((results.value==0xD34)||(results.value==0x534))
    qui permet de clarifier et supprimer 4 blocs !

    Je pense maintenant mon problème également simplifié, je recherche simplement a garder l'appuie d'un bouton (mais comment ??) car un montage classique avec un simple poussoir marcherai ainsi:
    -Si bouton appuyé
    -Alors relais collé
    -Sinon relais décollé
    sa parait pourtant simple, mais je ne sais pas comment procéder
    Dernière modification par urtechnic ; 28/10/2015 à 19h19.

  14. #13
    Murayama

    Re : Garder l'appui d'un bouton de télécommande ?

    Bonjour!

    Première remarque: l'indentation de votre code est foireuse, ce qui a toutes les chances
    de vous conduire à un programme qui reflète l'indentation. Vous devriez aligner verticalement
    les accolades qui vont par paires, ne jamais mettre 2 accolades fermantes sur la même ligne.

    Je vous ai dit il me semble qu'une seule variable pour stocker l'état de 2 relais,
    ça ne suffit pas. D'autant plus que c'est inutile. Voir plus bas. Avant tout, voyons ce qui va
    se passer dans l'état actuel du code:

    Au départ, le before est à 0.

    Admettons que nous appuyons sur la touche 1 (d32 ou 532). La télécommande va envoyer
    une série de codes dont vous ne connaissez pas le nombre.

    1. Le premier code arrive. Comme before est à 0, on entre dans le digital write, le
    relais 1 se colle, before devient 1 on attend 40 ms, on sort du if(relais désactivé)
    puis du if results.value.

    2. La télécommande continue à cracher. Vous êtes toujours sur le même bouton, ce qui
    est normal 40ms plus tard. On entre dans le cas du même bouton. Comme before est
    maintenant à 1, on entre dans le cas else, ce qui remet le relais à 0.

    Résultat: vous avez inventé la sonnette Arduino.
    Corollaire: quand vous cesserez d'appuyer, vous ne savez pas si before sera à 0 ou 1 ni
    si le relais sera collé ou non.
    Conséquence à prévoir: quand vous appuierez sur l'autre bouton, l'action va dépendre
    de l'état de before. Bon ceci dit, comme ce sera aussi une 2ème sonnette, ce n'est pas
    bien grave.

    -Si bouton appuyé
    -Alors relais collé
    -Sinon relais décollé
    sa parait pourtant simple, mais je ne sais pas comment procéde
    Quand les specs sont simples, il faut penser simplement. Il faut faire EXACTEMENT ce que
    vous avez écrit plus haut et ne pas introduire de complications superfétatoires (dit-il
    en bon lecteur d'Achille Talon). Alors pour 1 seul relais, ça donnerait le code
    suivant (j'utilse votre cahier des charges ci-dessus tel quel en commentaire).

    Code:
    void loop() {
        if (irrecv.decode(&results)) {                                      
            if ((results.value==0xD32)||(results.value==0x532)) {    //    Si bouton appuyé
                digitalWrite(relay1,HIGH);                            //    Alors relais collé
            }
            else {                            //    Sinon
                digitalWrite(relay1, LOW);     //    Relais décollé
            }
            irrecv.resume();
        }
    }
    NB: pas de variable "before", pas de delay.

    Pascal

  15. #14
    urtechnic

    Re : Garder l'appui d'un bouton de télécommande ?

    bonjour,
    Première remarque: l'indentation de votre code est foireuse, ce qui a toutes les chances
    de vous conduire à un programme qui reflète l'indentation. Vous devriez aligner verticalement
    les accolades qui vont par paires, ne jamais mettre 2 accolades fermantes sur la même ligne.
    je ne comprend pas trop, de quels probléme d'indentation parlez vous ? et pourquoi les accolades sont elles un probléme ?

    En effet je n'est modifier que la structure du code non le contenu...
    Mais si ma touche 1 de télécommande est pressée le code sera justement D32 et 532 !? (j'ai peut être mal compris se que vous vouliez dire)

    Quand les specs sont simples, il faut penser simplement. Il faut faire EXACTEMENT ce que
    vous avez écrit plus haut et ne pas introduire de complications superfétatoires (dit-il
    en bon lecteur d'Achille Talon). Alors pour 1 seul relais, ça donnerait le code
    suivant (j'utilse votre cahier des charges ci-dessus tel quel en commentaire).
    Merci ! c'est peu être simplement se qu'il me fallait (en effet ces vraiment simple)
    je m'attardais trop sur le probléme de déclarer chacun des 2 boutons et ensuite les appeler dans mon programme que j'en est oublier une autre solution, je test et je vous informe des nouvelles

  16. #15
    urtechnic

    Re : Garder l'appui d'un bouton de télécommande ?

    Re, C'est très étrange !! si je pointe sur le récepteur premièrement il allume une led ( j'ai fait se test avec 2 leds pour préserver mes relais) et l’éteins si j'allume la suivante, ensuite si je reste appuyé il allume la led mais si en restant appuyer je coupe le faisceau avec ma main il éteins cette led et la rallume si j’enlève ma main..., se que j'en comprend c'est qu'il réagit comme si j’appuyai sur un interrupteur qui se bloque en position on ou un inverseur 2 positions ! Donc encore des modif à apporter au programme. Il faudrait cette fois lui dire que si la position est "relâche" alors le relais doit se couper

  17. #16
    Murayama

    Re : Garder l'appui d'un bouton de télécommande ?

    Bonjour!

    je ne comprend pas trop, de quels probléme d'indentation parlez vous ?
    et pourquoi les accolades sont elles un probléme ?
    - L'indentation:
    L'indentation permet de rendre un programme plus clair. Par exemple, quand on
    a un if, on s'attend à ce que la ligne suivante soit décalée d'une tabulation
    (remplaçable par des espaces suivant les habitudes du programmeur). Une tab de
    4, c'est assez souvent le cas. De cette façon, suivant où la ligne commence,
    on sait tout de suite à quel "étage" on est. C'est facile pour le lecteur, c'est
    facile aussi pour se relire plus tard.
    - Les accolades:
    En principe, elles sont à la verticale de la ligne qui contenait l'accolade ouvrante.
    Celle qui ferme le if(before == 0) est placée de façon logique. Les autres, non.
    On a du mal à voir ce qu'elles ferment. En principe, la dernière accolade d'une
    fonction doit revenir collée à la marge, et de cette manière on sait qu'on a fini
    la fonction, tout est cohérent.

    Ceci dit, les accolades n'ont aucune importance pour le compilateur. Mais à mon avis
    elles reflètent la structure de la pensée du programmeur.

    Re, C'est très étrange !! si je pointe sur le récepteur premièrement il allume une led
    Soyons clairs: on appellera bouton A celui qui envoie les codes D32/532 et bouton B
    celui qui envoie les codes D34/534.

    Si je résume à ma façon:

    Action 1: vous pointez la télécommande dsur le récepteur, vous appuyez sur A, la diode s'allume.

    et l’éteins si j'allume la suivante,
    Avant d'utiliser 2 LEDS, est-ce que vous avez essayé avec une seule et le programme que
    je suggérais?
    En plus, vous ne décrivez pas (ou mal) votre expérience. Depuis l'action 1, que se passe-t-il
    si vous relâchez A? (qu'on pourrait appeler action2).

    ensuite si je reste appuyé il allume la led mais si en restant appuyer je coupe le
    faisceau avec ma main il éteins cette led et la rallume si j’enlève ma main...,
    Ben c'est normal! Le signal de télécommande ne parvient plus au récepteur, on se trouve
    dans le cas "else" qui appelle digitalWrite(relay1, low).

    se que j'en comprend c'est qu'il réagit comme si j’appuyai sur un interrupteur qui
    se bloque en position on ou un inverseur 2 positions ! Donc encore des modif à
    apporter au programme. Il faudrait cette fois lui dire que si la position est "relâche"
    alors le relais doit se couper
    Vu que je ne sais pas comment vous avez programmé, je ne peux pas voir l'erreur. Mais
    en tout cas (et au radar parce que j'ai la flemme de sortir mon arduino, je ne sais même
    pas où elle est, et je n'ai pas envie de chercher le driver de télécommande)...
    Si je voulais utiliser 2 relais qui ne fonctionnent que quand un bouton est appuyé,
    je ferais ceci:
    - Si j'appuie sur A, le relais 1 se colle;
    - Si j'appuie sur B, le relais 2 se colle;
    - Si je n'appuie ni sur a ni sur B, aucun de se colle

    Ce qui donnerait:
    Code:
    void loop() {
        if (irrecv.decode(&results)) {                                      
            if ((results.value==0xD32)||(results.value==0x532)) {    //    Si bouton A appuyé
                digitalWrite(relay1,HIGH);                           //    Alors relais 1 collé
                digitalWrite(relay2, LOW);                           //    Relais 2 décollé
            }
            if ((results.value==0xD34)||(results.value==0x534)) {    //    Si bouton B appuyé
                digitalWrite(relay1, LOW);                           //    Relais 1 décollé
                digitalWrite(relay2,HIGH);                           //    Alors relais 2 collé
            }
            else {                                                   //    Sinon
                digitalWrite(relay1, LOW);                           //    Relais 1 décollé
                digitalWrite(relay2, LOW);                           //    Relais 2 décollé
            }
            irrecv.resume();
        }
    }
    NB: J'ai ajouté une remise à 0 du relais 1 quand on allume le 2 et réciproquement.
    Par précaution. Pour si par hasard on passait directement de l'état "Bouton A appuyé à"
    "Bouton B appuyé" sans passer par las case "sinon".

    Pascal

  18. #17
    urtechnic

    Re : Garder l'appui d'un bouton de télécommande ?

    Bonjour, tout d’abord merci pour l’explication !
    Depuis l'action 1, que se passe-t-il
    si vous relâchez A? (qu'on pourrait appeler action2).
    Si je relâche A rien ne se passe (la led reste allumé), mais s'éteint si j'appuie sur B (la 2eme led s'allume).

    J'ai essayé votre programme que voici:
    Code:
    #include <IRremote.h>
    #include <IRremoteInt.h> // Ce n'est pas la librairie standart IRremote mais celle adapté pour les attiny...
    
    int relay1=2;
    int relay2=0;
    int RECV_PIN = 3; //pin sortie signal du recepteurIR sur broche 3 de l'attiny
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    
    
    void setup(){
      irrecv.enableIRIn();
      pinMode(relay1,OUTPUT);
      pinMode(relay2,OUTPUT);
     }
    
    void loop() {
        if (irrecv.decode(&results)) {                                      
            if ((results.value==0xD32)||(results.value==0x532)) {    //    Si bouton A appuyé
                digitalWrite(relay1,HIGH);                           //    Alors relais 1 collé
                digitalWrite(relay2, LOW);                           //    Relais 2 décollé
            }
            if ((results.value==0xD34)||(results.value==0x534)) {    //    Si bouton B appuyé
                digitalWrite(relay1, LOW);                           //    Relais 1 décollé
                digitalWrite(relay2,HIGH);                           //    Alors relais 2 collé
            }
            else {                                                   //    Sinon
                digitalWrite(relay1, LOW);                           //    Relais 1 décollé
                digitalWrite(relay2, LOW);                           //    Relais 2 décollé
            }
            irrecv.resume();
        }
    }
    il fait ceci:
    -si j'appuie sur le bouton B la led brille et s'éteint toute seul au bout d'un temps aléatoire !! (surement le fait que le récepteur ne reçois rien), mais elle s'éteint aussi si j'appuie sur l'autre bouton (ce qui est bien).
    -Par contre l'autre led, impossible de l'allumer ! Pour tester, j'ai inverser les D34 avec D32 et 534 avec 532 et inversement, de même pour les led (qui se nomme relay) que j'ai commutées de relay1 a relay2 et inversement, donc: ma télécommande marche, les 2 led marchent (le montage est bon) et le programme qui me parais pourtant bon doit manquer d'un élément car je ne vois pas d'autre solution, le pire c'est que c'est super simple comme programme le résultat aussi pourtant...

    merci de votre temps passé à m'aider !

  19. #18
    Murayama

    Re : Garder l'appui d'un bouton de télécommande ?

    Bonjour!

    l fait ceci:
    -si j'appuie sur le bouton B la led brille et s'éteint toute seul au bout d'un temps aléatoire !! (surement le fait que
    le récepteur ne reçois rien), mais elle s'éteint aussi si j'appuie sur l'autre bouton (ce qui est bien).
    Vous voulez dire que la LED ne s'éteint pas immédiatement quand vous relâchez?
    En fait, il est très difficile de vous répondre parce que je ne sais pas comment la
    gestion de la télécommande est implémentée. Ma librairie (développée maison)
    met en jeu un timeout. S'il n'y a rien pendant 50 ms, alors c'est que la transmission
    est finie. En principe, les télécommande répètent avec une période d'environ 20 à 40
    ms. Si je me souviens bien.

    Bref, je serais vous, j'utiliserais un système programmable en C ordinaire sans
    passer par l'environnement Arduino. J'ai un tutoriel que je n'ai pas encore traduit,
    je crois que je vais m'y mettre.

    Pascal

  20. #19
    urtechnic

    Re : Garder l'appui d'un bouton de télécommande ?

    Non elle s'éteint si j'appuie sur l'autre bouton ou au bout d'un certains temps
    S'il n'y a rien pendant 50 ms, alors c'est que la transmission
    est finie
    La mienne doit marcher comme sa car l'autre de la coupure du faisceau par ma main elle s’arrêtait aussitôt.
    En fait le but du projet était d'utiliser arduino, cela doit bien pouvoir se faire peut être en modifiant quelques lignes, d'après votre principe je vais maintenant essayer sa:
    Code:
    si j'appuie bouton gauche
       allume led1 et éteint led2
    sinon 
      tu éteint led1
      --------ou--------------
     si j'appuie bouton gauche
       tu allume led1
     --------ou---------
     tant que bouton gauche appuyé 
       tu allume led1
     (sinon éteint led1)
     -------ou------------
     pour bouton gauche appuyé
       tu allume led1
    peut être qu'avec d'autre boucles le résultat changera

Discussions similaires

  1. Appui sur bouton en Basic
    Par invite18eeb442 dans le forum Électronique
    Réponses: 6
    Dernier message: 17/03/2010, 03h11
  2. temporisation appui bouton piézoelectrique
    Par chestercat dans le forum Électronique
    Réponses: 5
    Dernier message: 13/05/2009, 08h52
  3. Détection Double appui sur Bouton Poussoir
    Par invitee196a996 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 27/06/2008, 08h34
  4. Bouton poussoir, garder le contact ?
    Par invite224f9782 dans le forum Électronique
    Réponses: 4
    Dernier message: 06/11/2007, 18h28
  5. Comment simuler l'appui sur un bouton via électronique ?
    Par invite237fd095 dans le forum Électronique
    Réponses: 0
    Dernier message: 13/05/2006, 21h55
Découvrez nos comparatifs produits sur l'informatique et les technologies.