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

Arduino Discussion :

Résolution programme ARDUINO


Sujet :

Arduino

  1. #1
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut Résolution programme ARDUINO
    Bonjour,
    Je suis un débutant sur Arduino.
    Je suis en train de fabriquer un ascenseur de plafond pour mon rétroprojecteur Sony.
    Mon souhait est :
    - appuyer sur un bouton (bas), celui ci actionne le relais in1 pour Arduino qui commande la descente de mon moteur (temps de descente 10 secondes), et en même temps mettre en route mon rétro par une diode émettrice infrarouge (sur Arduino).
    - appuyer sur un bouton (haut) ou appuyer sur on/off de la télécommande du rétro (par l'intermédiaire de la diode de réception Arduino) , ceux-ci actionne l'arrêt du rétro puis, après 2 minutes (temps de refroidissement de la lampe) le relais in2 pour Ardruino qui commande la montée de mon moteur (temps de montée 10 secondes).
    En faisant un mix de plusieurs code, le resultat est presque top.
    Les soucis sont :
    - ma diode émettrice émet bien un signal infrarouge mais pas de réaction du rétro alors que quand j'appui sur la télécommande du rétro, l'ascenseur remonte nikel, donc le code décimal doit être bon.
    - l'autre soucis est qu'après chaque étapes, je suis obligé de faire un reset pour pouvoir faire une autre étape. (je l'ai intégré au programme et ça fonctionne mais pas très pro quoi).
    Si dès fois vous pouvez m'aider, voila mon code ci-dessous.
    Cordialement,
    Bachol

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    #include <IRremote.h>
    #define RECV_PIN 12
    #define ON   0
    #define OFF  1
     
    int IN1 = 9;   // relais de montée
    int IN2 = 10;  // relais de descente
    int HAUT = 4;  // bouton poussoir haut
    int BAS = 6;   // bouton poussoir bas
     
     
    int codeType;
    int codeLen;
    // pour recevoir sur l'ir PIN 12
    IRrecv irrecv(RECV_PIN);
    decode_results results;
     
    // pour envoyer sur l'ir PIN 3
    IRsend irsend;
     
     
     
    void setup()
    {
    {
      relay_init(); //initialize the relay
    }
      Serial.begin(9600);
      irrecv.enableIRIn(); // Start the receiver
      pinMode (HAUT, INPUT_PULLUP);   // activation du PULLUP interne pin 4
      pinMode (BAS, INPUT_PULLUP);    // activation du PULLUP interne pin 6
     
    }
     
    void loop() {
     receiveCode();
     if (digitalRead(BAS)== ON) {
        miseon();
                                }
     
    if (digitalRead(HAUT)== ON || (results.value==21546)) {
        miseoff();
                                }
     
     
    }
     
    void receiveCode(){
     
      // catch IR
      if (irrecv.decode(&results))
        {
          //recupere le type de codage, la logueur
          int codeType = results.decode_type;
          int codeLen = results.bits;
        Serial.println("-------------------");
        Serial.print("ValueHex ");   
        Serial.println(String(results.value, HEX));
        Serial.print("ValueDec ");  
        Serial.println(results.value);
        Serial.print("CodeLen ");  
        Serial.println(codeLen);
         irrecv.resume(); // Receive the next value
     
        // De quel type est le signal IR ?
       if (codeType == UNKNOWN) {
          Serial.println("Unknow Type");
        }
        else {
          if (codeType == NEC) {
             Serial.println("Type NEC ");
          } 
          else if (codeType == SONY) {
            Serial.println("Type SONY ");
          } 
          else if (codeType == PANASONIC) {
            Serial.println("Type PANASONIC ");
          }
          else if (codeType == JVC) {
            Serial.println("Type JVC ");
          } 
          else if (codeType == SAMSUNG) {
            Serial.println("Type SAMSUNG ");
          } 
          else {
            Serial.print("Unexpected codeType ");
            Serial.print(codeType, DEC);
            Serial.println("");
          }
        }
      }  
    }
    void sendCode (long codeValue , int codeType , int codeLen){
      if (codeType == NEC) {
          irsend.sendNEC(codeValue, codeLen);
          Serial.print("Sent NEC ");
          Serial.println(codeValue, HEX);
      } 
      else if (codeType == SONY) {
        irsend.sendSony(codeValue, codeLen);
        Serial.print("Sent Sony ");
        Serial.println(codeValue, HEX);
      } 
      else if (codeType == PANASONIC) {
        irsend.sendPanasonic(codeValue, codeLen);
        Serial.print("Sent Panasonic");
        Serial.println(codeValue, HEX);
      }
      else if (codeType == JVC) {
        irsend.sendJVC(codeValue, codeLen, false);
        Serial.print("Sent JVC");
        Serial.println(codeValue, HEX);
      }
      else if (codeType == SAMSUNG) {
        irsend.sendSAMSUNG(codeValue, codeLen);
        Serial.print("Sent SANSUNG");
        Serial.println(codeValue, HEX);
      }
    }
    void miseon(){
     
    sendCode (21546,SONY,32);      // active le retroprojecteur
      delay(40);
      relay_SetStatus(OFF, ON);      // active le relais descend et desactive le relais monte (pin 9)
      delay(10000);                   // descend l'acensceur
      relay_SetStatus(OFF, OFF);     // desactive les relais monte et descend (pin 9 et 10)
      asm volatile ("  jmp 0");      // RESET
     
     
    }
     
    void miseoff(){
     
      sendCode (21546,SONY,32);      // desactive le retroprojecteur
      delay(40);
      delay(1000);
      sendCode (21546,SONY,32);      // desactive le retroprojecteur validation
      delay(40);
      delay(120000);
      relay_SetStatus(ON, OFF);      // active le relais monte et desactive le relais descend (pin 10)
      delay(10000);
      relay_SetStatus(OFF, OFF);     // desactive les relais monte et descend (pin 9 et 10)
      asm volatile ("  jmp 0");      // RESET
    }
    void relay_init(void)            //initialize the relay
    {
    //set all the relays OUTPUT
      pinMode(IN1, OUTPUT);          //relais monte
      pinMode(IN2, OUTPUT);          // relais descend
      relay_SetStatus(OFF, OFF);     //turn off all the relay
    }
    //set the status of relays
    void relay_SetStatus( unsigned char status_1,  unsigned char status_2)
    {
      digitalWrite(IN1, status_1);
      digitalWrite(IN2, status_2);
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Bonjour

    rebooter l'arduino n'est pas génial en effet

    il y a plusieurs défis dans votre approche, le premier étant qu'on ne sait pas dans quel état est le système. Forcer un moteur s'il ne peut pas tourner est un souci - donc on ne peut pas non plus tout fermer au début, d'autant plus qu'on n'a pas un code d'allumage distinct du code d'extinction du projecteur...

    donc le contrôle sera difficile.

    --> On peut faire l'hypothèse que lorsque vous démarrez l'arduino le projecteur est éteint et rangé, mais ça reste une hypothèse et en cas de panne de courant on est ennuyé.

    Quand vous utilisez la bibliothèque IRremote, il faut traiter le code reçu avant d'appeler irrecv.resume(), le code est potentiellement invalidé ensuite. c'est peut-être un des soucis de votre code.

    Il me semble (de mémoire) que dans le protocole Sony on répète les commandes 3 fois et que la longueur de la commande Power est 15, pas 32. à vérifier pour le votre en demandant l'obtention du code on/off de la télécommande sony avec IRrecvDumpV2

    j'ai pris l'hypothèse que ça vous dira que le protocole est Sony, le code est 542A sur 15 bits (0x542A est votre valeur 21546)

    Pour essayer de se souvenir dans quel état l'on est et ne pas forcer les moteurs, j'ai mis une petite variable d'état qui fait que l'on écoute la télécommande que si le système est activé, sinon seul le bouton bas fonctionne.

    Un autre challenge c'est que vous avez si vous utilisez la télécommande Sony du projecteur pour refermer, alors quand vous appuyez sur POWER le projecteur reçoit le code, donc va se mettre tout seul en mode confirmation d'extinction et dans ce cas il ne faut pas envoyer deux fois l'ordre d'extinction, mais juste une fois pour la confirmation. c'est pour cela que ma fonction extinction() prend un paramètre qui dit si c'est un déclenchement 'manuel' (bouton) ou pas.

    Voilà à quoi ça pourrait ressembler, je n'ai pas votre système donc ce n'est absolument pas testé. Mais essayez

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    /* pins
     
      GND breadboard <--> GND Arduino (en cas d'usage d'une breadboard)
     
      D0, D2    connexion Serial
      D3        LED infrarouge (exemple TSAL 6200, (câblage pin 3 <-> R200Ω <-> LED Anode || Led Cathode <-> GND)
      D4        bouton poussoir haut (câblage pin 4 <-> bouton <-> GND)
      D5        bouton poussoir bas  (câblage pin 5 <-> bouton <-> GND)
      D6
      D7
      D8
      D9        IN1 = relais de montée
      D10       IN2 = relais de descente
      D11
      D12
      D13
     
      A0
      A1
      A2
      A3
      A4
      A5
     
    */
     
    /* **************** la partie IR **************** */
     
    #include <IRremote.h>  // https://github.com/z3t0/Arduino-IRremote
    const byte RECV_PIN = 12;
    // pour recevoir sur l'ir PIN 12
    IRrecv irrecv(RECV_PIN);
    decode_results results;
     
    // LED IR connectée sur la pin PWM 3
    /* obtention du code on/off de la télécommande sony à obtenir avec IRrecvDumpV2
      hypothèse ---> Decoded SONY: 542A (15 bits)
    */
    const unsigned long codeProjecteurOFF = 0x542A; // (votre 21546)
    const int longeurCodeSony = 15;
     
    IRsend irsend;
     
    /* **************** les relais et boutons **************** */
     
    const byte pinRelaisMonter = 9; // IN1 = relais de montée
    const byte pinRelaisDescendre = 10;  // IN2 = relais de descente
    const byte ACTIF    = LOW;
    const byte PASSIF =  HIGH;
    const unsigned long dureeCourseAscenseur = 10000UL;
     
    const byte pinBoutonHaut = 4;  // bouton poussoir haut
    const byte pinBoutonBas = 6;   // bouton poussoir bas
     
    /* **************** gestion de l'état **************** */
     
    enum : uint8_t {PROJECTEUR_OFF, PROJECTEUR_ON} etat;
     
    /* **************** fonctions **************** */
    void relais(const byte etatMonter, const byte etatDescendre)
    {
      digitalWrite(pinRelaisMonter, etatMonter);
      digitalWrite(pinRelaisDescendre, etatDescendre);
    }
     
    void appuiPower() // le protocole Sony dit qu'il faut envoyer la commande 3 fois
    {
      for (byte i = 0; i < 3; i++) {
        irsend.sendSony(codeProjecteurOFF, longeurCodeSony);
        delay(40);
      }
    }
     
    void allumage()
    {
      appuiPower();
      relais(PASSIF, ACTIF);        // active le relais descend et desactive le relais monte
      delay(dureeCourseAscenseur);  // attente de la descente
      relais(PASSIF, PASSIF);       // désactive les 2 relais
    }
     
    void extinction(bool manuelle)
    {
      if (manuelle) appuiPower();   // désactive le retroprojecteur
      delay(1000UL);                // on attend une seconde
      appuiPower();                 // confirmation désactivation du retroprojecteur
      delay(120000UL);              // deux minutes de refroidissement
      relais(ACTIF, PASSIF);        // active le relais monte et desactive le relais descend
      delay(dureeCourseAscenseur);  // attente de la fermeture
      relais(PASSIF, PASSIF);       // désactive les 2 relais
    }
     
     
    uint32_t codeTelecommande()
    {
      uint32_t code = 0;
      if (irrecv.decode(&results)) {
        code = results.value;
        Serial.print("code = 0x");
        Serial.println(results.value, HEX);
        irrecv.resume();  // prêt pour traiter la prochaine commande
      }
      return code;
    }
     
     
    void setup()
    {
      Serial.begin(115200);                   // pourquoi aller lentement à 9600 ??
     
      pinMode(pinRelaisMonter, OUTPUT);       //relais montée
      pinMode(pinRelaisDescendre, OUTPUT);    // relais descente
      relais(PASSIF, PASSIF);                 //extinction des relais
     
      etat = PROJECTEUR_OFF;                  // hypothèse, on a aucun moyen de savoir...
     
      pinMode (pinBoutonHaut, INPUT_PULLUP);  // activation du PULLUP interne
      pinMode (pinBoutonBas, INPUT_PULLUP);   // activation du PULLUP interne
     
      irrecv.enableIRIn(); // on commmence à écouter
    }
     
    void loop()
    {
      switch (etat) {
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            allumage(); // appel bloquant ~10 secondes
          }
          etat = PROJECTEUR_ON;
          break;
     
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeProjecteurOFF) {
            extinction(false); // extinction par télécommande, appel bloquant plus de 2 minutes !
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
          }
          etat = PROJECTEUR_OFF;
          break;
      }
    }
    idéalement il faudrait pouvoir forcer l'extinction du projecteur (un relais sur la prise de courant par exemple... un peu pirate... ou une détection de consommation de courant sur le fil d'alimentation pour voir s'il est allumé) et des détecteurs de fin de course sur les moteurs pour voir où se trouve l'ascenseur --> ça permettrait de mieux connaître l'état initial ou mieux piloter les moteurs.

    vous pourriez aussi prendre une télécommande différente (à 1€ en Asie livraison comprise, fournie avec un récepteur prêt pour Arduino) pour ne pas avoir de conflit avec votre télécommande Sony existante qui servirait à allumer ou éteindre votre Sony indépendament du système Arduino.

  3. #3
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut Résolution programme ARDUINO SVP
    Bonjour Jay M,
    Tout d'abord, merci pour votre intérêt.
    Voila déjà mon ascenseur sans arduino, les fins de courses sont intégrées au moteur de volet roulant :



    dans l'ascenseur, j'ai 2 multiprises, 1 en contact constant pour l'arduino et éventuellement d'autres composants éventuelle qui auront besoin d'être constamment alimenté et 1 multiprise sur un contacteur de fin de course pour couper l'alimentation général pour le rétroprojecteur et de futurs composants éventuelle.
    Du fait que mon caisson sera étanche je ne veux pas que le rétro puisse fonctionner dans le caisson fermé d'ou le coupe contact.
    Mais il est obligatoire de respecter le refroidissement de la lampe avant que le rétro se range.
    Pour la télécommande, celle-ci commandera l'allumage et l'extinction du rétro et juste la remonté de l'ascenseur en parallèle des boutons car la diode de réception se trouvera sur le plateau de l'ascenseur donc une fois le plateau relevé, la diode ne sera plus visible de l'extérieur.
    La diode d'émission se trouvera devant la cellule du rétro pour activer ou désactiver le rétro.

    Je vais essayer votre code et je vous tiens au courant.
    Encore merci de vous pencher sur mon cas.
    Cordialement.

  4. #4
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut Résolution programme ARDUINO SVP
    Monsieur Jay M,
    Ou plutôt, the ZEUS of Arduino, Respect, ça marche nickel, quelques petites améliorations et c'est le Nirvana, juste l'extinction du rétro qui coupe pas, je pense que je vais mettre on/off et OK plutôt que la répète on/off du rétro, Monsieur, vous êtes le Maestro de l'Arduino, un très grand MERCI.

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut


    cool de savoir que ça fonctionne en partie !

  6. #6
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut
    Citation Envoyé par Jay M Voir le message


    cool de savoir que ça fonctionne en partie !
    Bonjour Jay M,
    J'ai essayé d'apporté quelques modifs, mais depuis ça fonctionne pas toujours :
    - J'ai déplacé l'activation du rétro pour la mise en route après la descente du rétro car du fait qu'il à un coupe contact sur le rétro le signal IR de mise en route est envoyé juste avant la descente du coup le rétro ne pas encore alimenté.
    - J'ai mis le délais de confirmation de l'extinction à 2 secondes car 1 seconde ne marchais pas , a 2 secondes, nickel.
    - j'ai changé de télécommande pour la désactivation car vue que les DIODE de réception du rétro et de l'arduino sont à coté, suivant comme on est orienté, le rétro récupère aussi le signal donc il perd un peu la tête.

    L'utilisation des boutons monte descend, marche nickel et tout le travail se fait bien. Dès que j'utilise la télécommande, ça marche une fois et après plus aucun signal IR reçus.
    Est-ce le fait d'avoir déplacé le "appuiPower" ?
    Ou mon nouvelle constante "codeStarcom8810OFF = 0x2FD18E7" ?
    j'ai l'impression que pour la télécommande, la boucle ne se fait qu'une fois.

    Le code modifié :

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    /* pins
     
      GND breadboard <--> GND Arduino (en cas d'usage d'une breadboard)
     
      D0, D2    connexion Serial
      D3        LED infrarouge (exemple TSAL 6200, (câblage pin 3 <-> R200Ω <-> LED Anode || Led Cathode <-> GND)
      D4        bouton poussoir haut (câblage pin 4 <-> bouton <-> GND)
      D5        bouton poussoir bas  (câblage pin 5 <-> bouton <-> GND)
      D6
      D7
      D8
      D9        IN1 = relais de montée
      D10       IN2 = relais de descente
      D11
      D12
      D13
     
      A0
      A1
      A2
      A3
      A4
      A5
     
    */
     
    /* **************** la partie IR **************** */
     
    #include <IRremote.h>  // <a href="https://github.com/z3t0/Arduino-IRremote" target="_blank">https://github.com/z3t0/Arduino-IRremote</a>
    const byte RECV_PIN = 12;
    // pour recevoir sur l'ir PIN 12
    IRrecv irrecv(RECV_PIN);
    decode_results results;
     
    // LED IR connectée sur la pin PWM 3
    /* obtention du code on/off de la télécommande sony à obtenir avec IRrecvDumpV2
      hypothèse ---> Decoded SONY: 542A (15 bits)
    */
    const unsigned long codeProjecteurOFF = 0x542A; // (votre 21546)
    const int longeurCodeSony = 15;
    const unsigned long codeStarcom8810OFF = 0x2FD18E7; // (code OFF starcom8810)
    const int longeurCodeNEC = 32;
     
    IRsend irsend;
     
    /* **************** les relais et boutons **************** */
     
    const byte pinRelaisMonter = 9; // IN1 = relais de montée
    const byte pinRelaisDescendre = 10;  // IN2 = relais de descente
    const byte ACTIF    = LOW;
    const byte PASSIF =  HIGH;
    const unsigned long dureeCourseAscenseur = 10000UL;
     
    const byte pinBoutonHaut = 4;  // bouton poussoir haut
    const byte pinBoutonBas = 6;   // bouton poussoir bas
     
    /* **************** gestion de l'état **************** */
     
    enum : uint8_t {PROJECTEUR_OFF, PROJECTEUR_ON} etat;
     
    /* **************** fonctions **************** */
    void relais(const byte etatMonter, const byte etatDescendre)
    {
      digitalWrite(pinRelaisMonter, etatMonter);
      digitalWrite(pinRelaisDescendre, etatDescendre);
    }
     
    void appuiPower() // le protocole Sony dit qu'il faut envoyer la commande 3 fois
    {
      for (byte i = 0; i < 3; i++) {
        irsend.sendSony(codeProjecteurOFF, longeurCodeSony);
        delay(40);
      }
    }
     
    void allumage()
    {
      //appuiPower();
      relais(PASSIF, ACTIF);        // active le relais descend et desactive le relais monte
      delay(dureeCourseAscenseur);  // attente de la descente
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      appuiPower();
    }
     
    void extinction(bool manuelle)
    {
      if (manuelle) appuiPower();   // désactive le retroprojecteur
      delay(2000UL);                // on attend une seconde
      appuiPower();                 // confirmation désactivation du retroprojecteur
      delay(120000UL);              // deux minutes de refroidissement
      relais(ACTIF, PASSIF);        // active le relais monte et desactive le relais descend
      delay(dureeCourseAscenseur);  // attente de la fermeture
      relais(PASSIF, PASSIF);       // désactive les 2 relais
    }
     
     
    uint32_t codeTelecommande()
    {
      uint32_t code = 0;
      if (irrecv.decode(&results)) {
        code = results.value;
        Serial.print("code = 0x");
        Serial.println(results.value, HEX);
        irrecv.resume();  // prêt pour traiter la prochaine commande
      }
      return code;
    }
     
     
    void setup()
    {
      Serial.begin(115200);                   // pourquoi aller lentement à 9600 ??
     
      pinMode(pinRelaisMonter, OUTPUT);       //relais montée
      pinMode(pinRelaisDescendre, OUTPUT);    // relais descente
      relais(PASSIF, PASSIF);                 //extinction des relais
     
      etat = PROJECTEUR_OFF;                  // hypothèse, on a aucun moyen de savoir...
     
      pinMode (pinBoutonHaut, INPUT_PULLUP);  // activation du PULLUP interne
      pinMode (pinBoutonBas, INPUT_PULLUP);   // activation du PULLUP interne
     
      irrecv.enableIRIn(); // on commmence à écouter
    }
     
    void loop()
    {
      switch (etat) {
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            allumage(); // appel bloquant ~10 secondes
          }
          etat = PROJECTEUR_ON;
          break;
     
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeStarcom8810OFF) {
            extinction(false); // extinction par télécommande, appel bloquant plus de 2 minutes !
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
          }
          etat = PROJECTEUR_OFF;
          break;
      }
    }

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    le code un peu nettoyé
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    /* pins
     
      GND breadboard <--> GND Arduino (en cas d'usage d'une breadboard)
     
      D0, D1    connexion Serial
      D2
      D3        LED infrarouge (exemple TSAL 6200, (câblage pin 3 <-> R200Ω <-> LED Anode || Led Cathode <-> GND)
      D4        bouton poussoir haut (câblage pin 4 <-> bouton <-> GND)
      D5        bouton poussoir bas  (câblage pin 5 <-> bouton <-> GND)
      D6
      D7
      D8
      D9        IN1 = relais de montée
      D10       IN2 = relais de descente
      D11
      D12
      D13
     
      A0
      A1
      A2
      A3
      A4
      A5
     
    */
     
    /* **************** la partie IR **************** */
     
    #include <IRremote.h>     // https://github.com/z3t0/Arduino-IRremote
    const byte RECV_PIN = 12; // on reçoit les commandes IR  PIN 12
    IRrecv irrecv(RECV_PIN);  // notre objet récepteur
    decode_results results;   // le résultat décodé
     
    // LED IR connectée sur la pin PWM 3
    /* obtention du code on/off de la télécommande sony à obtenir avec IRrecvDumpV2
      hypothèse ---> Decoded SONY: 542A (15 bits)
    */
    const unsigned long codeProjecteurOFF = 0x542A; // (votre 21546)
    const int longeurCodeSony = 15;
    const unsigned long codeStarcom8810OFF = 0x2FD18E7; // (code OFF starcom8810)
     
    IRsend irsend;
     
    /* **************** les relais et boutons **************** */
     
    const byte pinRelaisMonter = 9;       // IN1 = relais de montée
    const byte pinRelaisDescendre = 10;   // IN2 = relais de descente
    const byte ACTIF    = LOW;
    const byte PASSIF =  HIGH;
    const unsigned long dureeCourseAscenseur = 10000UL;
    const unsigned long dureeRefroidissement = 120000UL;
     
    const byte pinBoutonHaut = 4;  // bouton poussoir haut
    const byte pinBoutonBas = 6;   // bouton poussoir bas
     
    /* **************** gestion de l'état **************** */
     
    enum : uint8_t {PROJECTEUR_OFF, PROJECTEUR_ON} etat;
     
    /* **************** fonctions **************** */
    void relais(const byte etatMonter, const byte etatDescendre)
    {
      digitalWrite(pinRelaisMonter, etatMonter);
      digitalWrite(pinRelaisDescendre, etatDescendre);
    }
     
    void appuiPower() // le protocole Sony dit qu'il faut envoyer la commande 3 fois
    {
      for (byte i = 0; i < 3; i++) {
        irsend.sendSony(codeProjecteurOFF, longeurCodeSony);
        delay(40);
      }
    }
     
    void allumage()
    {
      //appuiPower();
      relais(PASSIF, ACTIF);        // active le relais descend et desactive le relais monte
      delay(dureeCourseAscenseur);  // attente de la descente
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      appuiPower();
    }
     
    void extinction(bool manuelle)
    {
      if (manuelle) appuiPower();   // désactive le retroprojecteur
      delay(2000UL);                // on attend deux secondes
      appuiPower();                 // confirmation désactivation du retroprojecteur
      delay(dureeRefroidissement);  // deux minutes de refroidissement
      relais(ACTIF, PASSIF);        // active le relais monte et desactive le relais descend
      delay(dureeCourseAscenseur);  // attente de la fermeture
      relais(PASSIF, PASSIF);       // désactive les 2 relais
    }
     
     
    uint32_t codeTelecommande()
    {
      uint32_t code = 0;
      if (irrecv.decode(&results)) {
        code = results.value;
        Serial.print("code = 0x");
        Serial.println(results.value, HEX);
        irrecv.resume();  // prêt pour traiter la prochaine commande
      }
      return code;
    }
     
     
    void setup()
    {
      Serial.begin(115200);
     
      pinMode(pinRelaisMonter, OUTPUT);       //relais montée
      pinMode(pinRelaisDescendre, OUTPUT);    // relais descente
      relais(PASSIF, PASSIF);                 //extinction des relais
     
      etat = PROJECTEUR_OFF;                  // hypothèse, on a aucun moyen de savoir...
     
      pinMode (pinBoutonHaut, INPUT_PULLUP);  // activation du PULLUP interne
      pinMode (pinBoutonBas, INPUT_PULLUP);   // activation du PULLUP interne
     
      irrecv.enableIRIn(); // on commmence à écouter
    }
     
    void loop()
    {
      switch (etat) {
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            allumage(); // appel bloquant ~10 secondes
          }
          etat = PROJECTEUR_ON;
          break;
     
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeStarcom8810OFF) {
            extinction(true); // extinction par télécommande différente de celle du Sony, donc on force l'extinction, appel bloquant plus de 2 minutes !
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
          }
          etat = PROJECTEUR_OFF;
          break;
      }
    }
    j'ai viré const int longeurCodeNEC = 32; qui n'était pas utilisé et corrigé les commentaires en fonction du code.

    J'ai changé et rajouté true dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          if (codeTelecommande() == codeStarcom8810OFF) {
            extinction(true); // extinction par télécommande différente de celle du Sony, donc on force l'extinction, appel bloquant plus de 2 minutes !
          }
    si vous avez une autre télécommande que celle de votre projecteur pour déclencher l'extinction alors il faut que votre arduino dise au projecteur de s'éteindre en simulant l'émission IR de la télécommande Sony.

    Vous dites
    'ai changé de télécommande pour la désactivation
    . utilisez vous la télécommande de votre projecteur Sony ou pas ?

    le fonctionnement devrait être:
    - vous appuyez sur le bouton bas et le projecteur descend puis s'allume. la télécommande ne fonctionne pas là.
    - vous appuyez sur le bouton haut OU vous appuyez sur le bouton qui envoie votre code Starcom OFF (0x2FD18E7) et ça éteint le projecteur puis ça remonte.

    est-ce que la LED de réception IR est visible quand le boitier est remonté / fermé ?

  8. #8
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut Résolution programme ARDUINO
    Bonjour,
    La LED n'est pas visible quand le boitier est remonté.
    Votre code marche bien une fois téléversé, première utilisation, nickel.
    Quand j'envoi par le OFF de la starcom, la première fois nickel et après plus rien.
    Si je fais un reset sur mon arduino, ca remarche 1 fois.
    Par contre l'utilisation des boutons fonctionne tout le temps, le beug est juste à la télécommande.
    Je vous joins le rapport de téléversement si ça peu aider :

    C:\Users\cchan\Desktop\arduino-nightly\arduino-builder -dump-prefs -logger=machine -hardware C:\Users\cchan\Desktop\arduino-nightly\hardware -tools C:\Users\cchan\Desktop\arduino-nightly\tools-builder -tools C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -built-in-libraries C:\Users\cchan\Desktop\arduino-nightly\libraries -libraries C:\Users\cchan\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old -vid-pid=1A86_7523 -ide-version=10811 -build-path C:\Users\cchan\AppData\Local\Temp\arduino_build_899123 -warnings=none -build-cache C:\Users\cchan\AppData\Local\Temp\arduino_cache_962799 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -verbose C:\Users\cchan\Documents\Arduino\Ascenseur_r_tro_projecteur\Ascenseur_r_tro_projecteur.ino
    C:\Users\cchan\Desktop\arduino-nightly\arduino-builder -compile -logger=machine -hardware C:\Users\cchan\Desktop\arduino-nightly\hardware -tools C:\Users\cchan\Desktop\arduino-nightly\tools-builder -tools C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -built-in-libraries C:\Users\cchan\Desktop\arduino-nightly\libraries -libraries C:\Users\cchan\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old -vid-pid=1A86_7523 -ide-version=10811 -build-path C:\Users\cchan\AppData\Local\Temp\arduino_build_899123 -warnings=none -build-cache C:\Users\cchan\AppData\Local\Temp\arduino_cache_962799 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr -verbose C:\Users\cchan\Documents\Arduino\Ascenseur_r_tro_projecteur\Ascenseur_r_tro_projecteur.ino
    Using board 'nano' from platform in folder: C:\Users\cchan\Desktop\arduino-nightly\hardware\arduino\avr
    Using core 'arduino' from platform in folder: C:\Users\cchan\Desktop\arduino-nightly\hardware\arduino\avr
    Detecting libraries used...
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10811 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\sketch\\Ascenseur_r_tro_projecteur.ino.cpp" -o nul
    Alternatives for IRremote.h: [z3t0-Arduino-IRremote-2dc97b2@2.2.3]
    ResolveLibrary(IRremote.h)
    -> candidates: [z3t0-Arduino-IRremote-2dc97b2@2.2.3]
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10811 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\cchan\\Documents\\Arduino\\libraries\\z3t0-Arduino-IRremote-2dc97b2" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\sketch\\Ascenseur_r_tro_projecteur.ino.cpp" -o nul
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\IRremote.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\irPronto.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\irRecv.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\irSend.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Aiwa.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Denon.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Dish.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_JVC.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_LG.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Lego_PF.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Mitsubishi.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_NEC.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Panasonic.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_RC5_RC6.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Samsung.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Sanyo.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Sharp.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Sony.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Template.cpp
    Using cached library dependencies for file: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Whynter.cpp
    Generating function prototypes...
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10811 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\cchan\\Documents\\Arduino\\libraries\\z3t0-Arduino-IRremote-2dc97b2" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\sketch\\Ascenseur_r_tro_projecteur.ino.cpp" -o "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\preproc\\ctags_target_for_gcc_minus_e.cpp"
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\preproc\\ctags_target_for_gcc_minus_e.cpp"
    Compilation du croquis...
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10811 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\cchan\\Documents\\Arduino\\libraries\\z3t0-Arduino-IRremote-2dc97b2" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\sketch\\Ascenseur_r_tro_projecteur.ino.cpp" -o "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\sketch\\Ascenseur_r_tro_projecteur.ino.cpp.o"
    Compiling libraries...
    Compiling library "z3t0-Arduino-IRremote-2dc97b2"
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\irPronto.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\irRecv.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\IRremote.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\irSend.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Aiwa.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Denon.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Dish.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_JVC.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_LG.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Lego_PF.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Mitsubishi.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Panasonic.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_NEC.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_RC5_RC6.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Samsung.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Sanyo.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Sharp.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Sony.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Template.cpp.o
    Utilisation du fichier déjà compilé : C:\Users\cchan\AppData\Local\Temp\arduino_build_899123\libraries\z3t0-Arduino-IRremote-2dc97b2\ir_Whynter.cpp.o
    Compiling core...
    Using precompiled core: C:\Users\cchan\AppData\Local\Temp\arduino_cache_962799\core\core_arduino_avr_nano_cpu_atmega328old_8818ea62b50632b431f15b0cb3d0dbc9.a
    Linking everything together...
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\tools\\avr/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.elf" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\sketch\\Ascenseur_r_tro_projecteur.ino.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\IRremote.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\irPronto.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\irRecv.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\irSend.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Aiwa.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Denon.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Dish.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_JVC.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_LG.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Lego_PF.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Mitsubishi.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_NEC.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Panasonic.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_RC5_RC6.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Samsung.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Sanyo.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Sharp.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Sony.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Template.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123\\libraries\\z3t0-Arduino-IRremote-2dc97b2\\ir_Whynter.cpp.o" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123/..\\arduino_cache_962799\\core\\core_arduino_avr_nano_cpu_atmega328old_8818ea62b50632b431f15b0cb3d0dbc9.a" "-LC:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123" -lm
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.elf" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.eep"
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.elf" "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.hex"
    Utilisation de la bibliothèque z3t0-Arduino-IRremote-2dc97b2 version 2.2.3 dans le dossier: C:\Users\cchan\Documents\Arduino\libraries\z3t0-Arduino-IRremote-2dc97b2
    "C:\\Users\\cchan\\Desktop\\arduino-nightly\\hardware\\tools\\avr/bin/avr-size" -A "C:\\Users\\cchan\\AppData\\Local\\Temp\\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.elf"
    Le croquis utilise 8252 octets (26%) de l'espace de stockage de programmes. Le maximum est de 30720 octets.
    Les variables globales utilisent 425 octets (20%) de mémoire dynamique, ce qui laisse 1623 octets pour les variables locales. Le maximum est de 2048 octets.
    C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr/bin/avrdude -CC:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b57600 -D -Uflash:w:C:\Users\cchan\AppData\Local\Temp\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.hex:i

    avrdude: Version 6.3-20190619
    Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
    Copyright (c) 2007-2014 Joerg Wunsch

    System wide configuration file is "C:\Users\cchan\Desktop\arduino-nightly\hardware\tools\avr/etc/avrdude.conf"

    Using Port : COM3
    Using Programmer : arduino
    Overriding Baud Rate : 57600
    AVR Part : ATmega328P
    Chip Erase delay : 9000 us
    PAGEL : PD7
    BS2 : PC2
    RESET disposition : dedicated
    RETRY pulse : SCK
    serial program mode : yes
    parallel program mode : yes
    Timeout : 200
    StabDelay : 100
    CmdexeDelay : 25
    SyncLoops : 32
    ByteDelay : 0
    PollIndex : 3
    PollValue : 0x53
    Memory Detail :

    Block Poll Page Polled
    Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
    ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
    eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
    flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
    lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
    hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
    efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
    lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
    calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
    signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

    Programmer Type : Arduino
    Description : Arduino
    Hardware Version: 2
    Firmware Version: 1.16
    Vtarget : 0.0 V
    Varef : 0.0 V
    Oscillator : Off
    SCK period : 0.1 us

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% -0.00s

    avrdude: Device signature = 0x1e950f (probably m328p)
    avrdude: reading input file "C:\Users\cchan\AppData\Local\Temp\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.hex"
    avrdude: writing flash (8252 bytes):

    Writing | ################################################## | 100% 2.48s

    avrdude: 8252 bytes of flash written
    avrdude: verifying flash memory against C:\Users\cchan\AppData\Local\Temp\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.hex:
    avrdude: load data flash data from input file C:\Users\cchan\AppData\Local\Temp\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.hex:
    avrdude: input file C:\Users\cchan\AppData\Local\Temp\arduino_build_899123/Ascenseur_r_tro_projecteur.ino.hex contains 8252 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 1.85s

    avrdude: verifying ...
    avrdude: 8252 bytes of flash verified

    avrdude done. Thank you.


    Cordialement

    DIODE RECEPTION ARDUINO :
    Nom : 88279191_2520236601559457_8927512016373940224_n.jpg
Affichages : 298
Taille : 125,8 Ko

    DIODE EMISSION ARDUINO :
    Nom : 88236492_3240859932608239_3715014649385582592_n.jpg
Affichages : 303
Taille : 78,1 Ko

    VUE D'ENSEMBLE :
    Nom : 89706502_2951279854909970_7325476166855294976_n.jpg
Affichages : 286
Taille : 207,6 Ko

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    la compilation semble sans souci

    la console série serait plus intéressante. voici un code qui met un peu plus de bla bla sur la console série
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    /* pins
     
      GND breadboard <--> GND Arduino (en cas d'usage d'une breadboard)
     
      D0, D1    connexion Serial
      D2
      D3        LED infrarouge (exemple TSAL 6200, (câblage pin 3 <-> R 200 Ohms  <-> LED Anode || Led Cathode <-> GND)
      D4        bouton poussoir haut (câblage pin 4 <-> bouton <-> GND)
      D5        bouton poussoir bas  (câblage pin 5 <-> bouton <-> GND)
      D6
      D7
      D8
      D9        IN1 = relais de montée
      D10       IN2 = relais de descente
      D11
      D12
      D13
     
      A0
      A1
      A2
      A3
      A4
      A5
     
    */
     
    /* **************** la partie IR **************** */
     
    #include <IRremote.h>     // https://github.com/z3t0/Arduino-IRremote
    const byte RECV_PIN = 12; // on reçoit les commandes IR  PIN 12
    IRrecv irrecv(RECV_PIN);  // notre objet récepteur
    decode_results results;   // le résultat décodé
     
    // LED IR connectée sur la pin PWM 3
    /* obtention du code on/off de la télécommande sony à obtenir avec IRrecvDumpV2
      hypothèse ---> Decoded SONY: 542A (15 bits)
    */
    const unsigned long codeProjecteurOFF = 0x542A; // (votre 21546)
    const int longeurCodeSony = 15;
    const unsigned long codeStarcom8810OFF = 0x2FD18E7; // (code OFF starcom8810)
     
    IRsend irsend;
     
    /* **************** les relais et boutons **************** */
     
    const byte pinRelaisMonter = 9;       // IN1 = relais de montée
    const byte pinRelaisDescendre = 10;   // IN2 = relais de descente
    const byte ACTIF    = LOW;
    const byte PASSIF =  HIGH;
    const unsigned long dureeCourseAscenseur = 10000UL;
    const unsigned long dureeRefroidissement = 120000UL;
     
    const byte pinBoutonHaut = 4;  // bouton poussoir haut
    const byte pinBoutonBas = 6;   // bouton poussoir bas
     
    /* **************** gestion de l'état **************** */
     
    enum : uint8_t {PROJECTEUR_OFF, PROJECTEUR_ON} etat;
     
    /* **************** fonctions **************** */
    void relais(const byte etatMonter, const byte etatDescendre)
    {
      digitalWrite(pinRelaisMonter, etatMonter);
      digitalWrite(pinRelaisDescendre, etatDescendre);
    }
     
    void appuiPower() // le protocole Sony dit qu'il faut envoyer la commande 3 fois
    {
      for (byte i = 0; i < 3; i++) {
        irsend.sendSony(codeProjecteurOFF, longeurCodeSony);
        Serial.println(F("off sony"));
        delay(40);
      }
    }
     
    void allumage()
    {
      //appuiPower();
      relais(PASSIF, ACTIF);        // active le relais descend et desactive le relais monte
      delay(dureeCourseAscenseur);  // attente de la descente
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      appuiPower();
    }
     
    void extinction(bool manuelle)
    {
      if (manuelle) appuiPower();   // désactive le retroprojecteur
      delay(2000UL);                // on attend deux secondes
      appuiPower();                 // confirmation désactivation du retroprojecteur
      delay(dureeRefroidissement);  // deux minutes de refroidissement
      relais(ACTIF, PASSIF);        // active le relais monte et desactive le relais descend
      delay(dureeCourseAscenseur);  // attente de la fermeture
      relais(PASSIF, PASSIF);       // désactive les 2 relais
    }
     
     
    uint32_t codeTelecommande()
    {
      uint32_t code = 0;
      if (irrecv.decode(&results)) {
        code = results.value;
        Serial.print(F("code = 0x"));
        Serial.println(results.value, HEX);
        irrecv.resume();  // prêt pour traiter la prochaine commande
      }
      return code;
    }
     
     
    void setup()
    {
      Serial.begin(115200);
     
      pinMode(pinRelaisMonter, OUTPUT);       //relais montée
      pinMode(pinRelaisDescendre, OUTPUT);    // relais descente
      relais(PASSIF, PASSIF);                 //extinction des relais
     
      etat = PROJECTEUR_OFF;                  // hypothèse, on a aucun moyen de savoir...
     
      pinMode (pinBoutonHaut, INPUT_PULLUP);  // activation du PULLUP interne
      pinMode (pinBoutonBas, INPUT_PULLUP);   // activation du PULLUP interne
     
      irrecv.enableIRIn(); // on commmence à écouter
    }
     
    void loop()
    {
      switch (etat) {
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            Serial.println(F("ALLUMAGE BOUTON BAS"));
            allumage(); // appel bloquant ~10 secondes
          }
          etat = PROJECTEUR_ON;
          break;
     
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeStarcom8810OFF) {
            Serial.println(F("EXTINCTION STARCOM"));
            extinction(true); // extinction par télécommande différente de celle du Sony, donc on force l'extinction, appel bloquant plus de 2 minutes !
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            Serial.println(F("EXTINCTION BOUTON HAUT"));
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
          }
          etat = PROJECTEUR_OFF;
          break;
      }
    }
    faites :

    bouton bas
    bouton haut
    bouton bas
    starcom
    bouton bas
    starcom

    -->Que dit le port série ?

  10. #10
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut Résolution programme ARDUINO SVP
    Avec les délais , compliqué pour la console lol
    Nom : bouton bas haut et starcom.png
Affichages : 325
Taille : 115,2 Ko

    Je crois que je vais laisser tomber l'extinction avec la télécommande lol
    Les boutons ça fonctionne nickel

    cordialement

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Un Copier coller du texte du moniteur série sera mieux qu’une image

  12. #12
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut Résolution programme ARDUINO SVP
    Citation Envoyé par Jay M Voir le message
    Un Copier coller du texte du moniteur série sera mieux qu’une image
    bonjour Jay M,

    essais 1 :

    18:29:19.612 -> ALLUMAGE BOUTON BAS
    18:29:29.622 -> off sony
    18:29:29.693 -> off sony
    18:29:29.762 -> off sony
    18:30:04.813 -> EXTINCTION BOUTON HAUT
    18:30:04.848 -> off sony
    18:30:04.915 -> off sony
    18:30:04.987 -> off sony
    18:30:07.047 -> off sony
    18:30:07.117 -> off sony
    18:30:07.187 -> off sony
    18:32:30.273 -> ALLUMAGE BOUTON BAS
    18:32:40.287 -> off sony
    18:32:40.355 -> off sony
    18:32:40.425 -> off sony
    -
    // appui sur starcom, pas de réaction
    -
    18:34:20.692 -> EXTINCTION BOUTON HAUT
    18:34:20.692 -> off sony
    18:34:20.762 -> off sony
    18:34:20.831 -> off sony
    18:34:22.897 -> off sony
    18:34:22.967 -> off sony
    18:34:23.040 -> off sony
    18:36:40.644 -> ALLUMAGE BOUTON BAS
    18:36:50.670 -> off sony
    18:36:50.747 -> off sony
    18:36:50.782 -> off sony
    -
    // appui sur starcom, pas de réaction
    -
    18:38:24.391 -> EXTINCTION BOUTON HAUT
    18:38:24.426 -> off sony
    18:38:24.495 -> off sony
    18:38:24.564 -> off sony
    18:38:26.618 -> off sony
    18:38:26.697 -> off sony
    18:38:26.737 -> off sony


    Essais 2 après un reset :

    // reset
    -
    18:47:41.511 -> ALLUMAGE BOUTON BAS
    18:47:51.535 -> off sony
    18:47:51.605 -> off sony
    18:47:51.640 -> off sony
    18:48:21.320 -> EXTINCTION BOUTON HAUT
    18:48:21.354 -> off sony
    18:48:21.426 -> off sony
    18:48:21.499 -> off sony
    18:48:23.565 -> off sony
    18:48:23.600 -> off sony
    18:48:23.671 -> off sony
    18:50:52.199 -> ALLUMAGE BOUTON BAS
    18:51:02.232 -> off sony
    18:51:02.305 -> off sony
    18:51:02.341 -> off sony
    -
    // appui sur starcom, pas de réaction
    -
    18:51:56.973 -> EXTINCTION BOUTON HAUT
    18:51:57.009 -> off sony
    18:51:57.080 -> off sony
    18:51:57.151 -> off sony
    18:51:59.205 -> off sony
    18:51:59.277 -> off sony
    18:51:59.344 -> off sony


    Essais 3 après un reset et un reset après la descente :

    // appui sur reset
    -
    18:55:24.510 -> ALLUMAGE BOUTON BAS
    18:55:34.534 -> off sony
    18:55:34.603 -> off sony
    18:55:34.639 -> off sony
    -
    // appui sur starcom, pas de réaction.
    // appui sur reset et appui sur starcom, réaction

    -
    18:56:34.979 -> code = 0x2FD18E7
    18:56:34.979 -> EXTINCTION STARCOM
    18:56:35.012 -> off sony
    18:56:35.049 -> off sony
    18:56:35.120 -> off sony
    18:56:37.202 -> off sony
    18:56:37.270 -> off sony
    18:56:37.338 -> off sony


    En gros si je refais le code en mode débutant du début, je rajoute la ligne "asm volatile (" jmp 0"); // RESET" après la descente et ça marche lol.

  13. #13
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Bon sang mais c'est bien sûr.... un bug tout bête:

    on a mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            Serial.println(F("ALLUMAGE BOUTON BAS"));
            allumage(); // appel bloquant ~10 secondes
          }
          etat = PROJECTEUR_ON; // HORREUR !!!
          break;
    ==> ça veut dire que dès que le projecteur est OFF, qu'on appuie ou pas sur le bouton on passe à ON....

    il faut bien sûr écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            Serial.println(F("ALLUMAGE BOUTON BAS"));
            allumage(); // appel bloquant ~10 secondes
            etat = PROJECTEUR_ON;
          }
          break;
    de la même manière on avait écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeStarcom8810OFF) {
            Serial.println(F("EXTINCTION STARCOM"));
            extinction(true); // extinction par télécommande différente de celle du Sony, donc on force l'extinction, appel bloquant plus de 2 minutes !
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            Serial.println(F("EXTINCTION BOUTON HAUT"));
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
          }
          etat = PROJECTEUR_OFF; // HORREUR !!!
          break;
    et donc on retournait à OFF à tous les coups...
    il faut bien sûr écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeStarcom8810OFF) {
            Serial.println(F("EXTINCTION STARCOM"));
            extinction(true); // extinction par télécommande différente de celle du Sony, donc on force l'extinction, appel bloquant plus de 2 minutes !
            etat = PROJECTEUR_OFF;
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            Serial.println(F("EXTINCTION BOUTON HAUT"));
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
            etat = PROJECTEUR_OFF;
          }
          break;
    on basculait donc sans arrêt de ON à OFF comme état, ce qui rendait le truc totalement instable pour l'IR (on ratait des bouts car on écoutait pas assez souvent) mais pas pour les boutons car un appui durait quand même plusieurs millisecondes et donc avait le temps d'être repéré

    Le plus simple est de gérer l'état dans les fonctions allumage() et extinction() comme ça on est sûr de faire juste

    essayez avec ce code (si ça marche vous pourrez retirer toutes les traces Serial.print()

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    /* pins
     
      GND breadboard <--> GND Arduino (en cas d'usage d'une breadboard)
     
      D0, D1    connexion Serial
      D2
      D3        LED infrarouge (exemple TSAL 6200, (câblage pin 3 <-> R 200 Ohms  <-> LED Anode || Led Cathode <-> GND)
      D4        bouton poussoir haut (câblage pin 4 <-> bouton <-> GND)
      D5        bouton poussoir bas  (câblage pin 5 <-> bouton <-> GND)
      D6
      D7
      D8
      D9        IN1 = relais de montée
      D10       IN2 = relais de descente
      D11
      D12
      D13
     
      A0
      A1
      A2
      A3
      A4
      A5
     
    */
     
    /* **************** la partie IR **************** */
     
    #include <IRremote.h>     // https://github.com/z3t0/Arduino-IRremote
    const byte RECV_PIN = 12; // on reçoit les commandes IR  PIN 12
    IRrecv irrecv(RECV_PIN);  // notre objet récepteur
    decode_results results;   // le résultat décodé
     
    // LED IR connectée sur la pin PWM 3
    /* obtention du code on/off de la télécommande sony à obtenir avec IRrecvDumpV2
      hypothèse ---> Decoded SONY: 542A (15 bits)
    */
    const unsigned long codeProjecteurOFF = 0x542A; // (votre 21546)
    const int longeurCodeSony = 15;
    const unsigned long codeStarcom8810OFF = 0x2FD18E7; // (code OFF starcom8810)
     
    IRsend irsend;
     
    /* **************** les relais et boutons **************** */
     
    const byte pinRelaisMonter = 9;       // IN1 = relais de montée
    const byte pinRelaisDescendre = 10;   // IN2 = relais de descente
    const byte ACTIF    = LOW;
    const byte PASSIF =  HIGH;
    const unsigned long dureeCourseAscenseur = 10000UL;
    const unsigned long dureeRefroidissement = 120000UL;
     
    const byte pinBoutonHaut = 4;  // bouton poussoir haut
    const byte pinBoutonBas = 6;   // bouton poussoir bas
     
    /* **************** gestion de l'état **************** */
     
    enum : uint8_t {PROJECTEUR_OFF, PROJECTEUR_ON} etat;
     
    /* **************** fonctions **************** */
    void relais(const byte etatMonter, const byte etatDescendre)
    {
      digitalWrite(pinRelaisMonter, etatMonter);
      digitalWrite(pinRelaisDescendre, etatDescendre);
    }
     
    void appuiPower() // le protocole Sony dit qu'il faut envoyer la commande 3 fois
    {
      for (byte i = 0; i < 3; i++) {
        irsend.sendSony(codeProjecteurOFF, longeurCodeSony);
        Serial.println(F("power sony"));
        delay(40);
      }
    }
     
    void allumage()
    {
      relais(PASSIF, ACTIF);        // active le relais descend et desactive le relais monte
      delay(dureeCourseAscenseur);  // attente de la descente
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      appuiPower();
      etat = PROJECTEUR_ON;
    }
     
    void extinction(bool manuelle)
    {
      if (manuelle) appuiPower();   // désactive le retroprojecteur
      delay(2000UL);                // on attend deux secondes
      Serial.println(F("CONFIRMATION OFF"));
      appuiPower();                 // confirmation désactivation du retroprojecteur
      delay(dureeRefroidissement);  // deux minutes de refroidissement
      relais(ACTIF, PASSIF);        // active le relais monte et desactive le relais descend
      delay(dureeCourseAscenseur);  // attente de la fermeture
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      etat = PROJECTEUR_OFF;
    }
     
     
    uint32_t codeTelecommande()
    {
      uint32_t code = 0;
      if (irrecv.decode(&results)) {
        code = results.value;
        Serial.print(F("code = 0x"));
        Serial.println(results.value, HEX);
        irrecv.resume();  // prêt pour traiter la prochaine commande
      }
      return code;
    }
     
     
    void setup()
    {
      Serial.begin(115200);
     
      pinMode(pinRelaisMonter, OUTPUT);       //relais montée
      pinMode(pinRelaisDescendre, OUTPUT);    // relais descente
      relais(PASSIF, PASSIF);                 //extinction des relais
     
      etat = PROJECTEUR_OFF;                  // hypothèse, on a aucun moyen de savoir...
     
      pinMode (pinBoutonHaut, INPUT_PULLUP);  // activation du PULLUP interne
      pinMode (pinBoutonBas, INPUT_PULLUP);   // activation du PULLUP interne
     
      irrecv.enableIRIn(); // on commmence à écouter
    }
     
    void loop()
    {
      switch (etat) {
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            Serial.println(F("ALLUMAGE BOUTON BAS"));
            allumage(); // appel bloquant ~10 secondes
          }
          break;
     
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeStarcom8810OFF) {
            Serial.println(F("EXTINCTION STARCOM"));
            extinction(true); // extinction par télécommande différente de celle du Sony, donc on force l'extinction, appel bloquant plus de 2 minutes !
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            Serial.println(F("EXTINCTION BOUTON HAUT"));
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
          }
          break;
      }
    }

  14. #14
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut
    Bonsoir,
    Ça ne marche toujours pas, les boutons oui mais pas télécommande.

    Je pensais, il ne faut pas mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    irrecv.enableIRIn();
    irrecv.resume();
    dans le LOOP ?

  15. #15
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Non le enable ne se fait qu’une seule fois pour activer la réception des commandes IR
    Le resume se fait une fois qu’on a traité un code, il est déjà dans la loop quand on appelle codeTelecommande()

    Il se peut que l’IR envoyé pour allumer ou éteindre le projecteur complique la réception de la starcom si des rebonds sont visibles

    Ce que vous pouvez faire c’est rajouter un après émission Sony pour être sûr d’oublier toute perturbation

    Voici le nouveau code
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     /* pins
     
      GND breadboard <--> GND Arduino (en cas d'usage d'une breadboard)
     
      D0, D1    connexion Serial
      D2
      D3        LED émission infrarouge (exemple TSAL 6200, (câblage pin 3 <-> R 200 Ohms  <-> LED Anode || Led Cathode <-> GND)
      D4        bouton poussoir haut (câblage pin 4 <-> bouton <-> GND)
      D5        bouton poussoir bas  (câblage pin 5 <-> bouton <-> GND)
      D6
      D7
      D8
      D9        IN1 = relais de montée
      D10       IN2 = relais de descente
      D11
      D12       Récepteur IR
      D13
     
      A0
      A1
      A2
      A3
      A4
      A5
     
    */
     
    /* **************** la partie IR **************** */
     
    #include <IRremote.h>     // https://github.com/z3t0/Arduino-IRremote
    const byte RECV_PIN = 12; // on reçoit les commandes IR  PIN 12
    IRrecv irrecv(RECV_PIN);  // notre objet récepteur
    decode_results results;   // le résultat décodé
     
    // LED IR connectée sur la pin PWM 3
    /* obtention du code on/off de la télécommande sony à obtenir avec IRrecvDumpV2
      hypothèse ---> Decoded SONY: 542A (15 bits)
    */
    const unsigned long codeProjecteurOFF = 0x542A; // (votre 21546)
    const int longeurCodeSony = 15;
    const unsigned long codeStarcom8810OFF = 0x2FD18E7; // (code OFF starcom8810)
     
    IRsend irsend;
     
    /* **************** les relais et boutons **************** */
     
    const byte pinRelaisMonter = 9;       // IN1 = relais de montée
    const byte pinRelaisDescendre = 10;   // IN2 = relais de descente
    const byte ACTIF    = LOW;
    const byte PASSIF =  HIGH;
    const unsigned long dureeCourseAscenseur = 10000UL;
    const unsigned long dureeRefroidissement = 120000UL;
     
    const byte pinBoutonHaut = 4;  // bouton poussoir haut
    const byte pinBoutonBas = 6;   // bouton poussoir bas
     
    /* **************** gestion de l'état **************** */
     
    enum : uint8_t {PROJECTEUR_OFF, PROJECTEUR_ON} etat;
     
    /* **************** fonctions **************** */
    void relais(const byte etatMonter, const byte etatDescendre)
    {
      digitalWrite(pinRelaisMonter, etatMonter);
      digitalWrite(pinRelaisDescendre, etatDescendre);
    }
     
    void appuiPower() // le protocole Sony dit qu'il faut envoyer la commande 3 fois
    {
      for (byte i = 0; i < 3; i++) {
        irsend.sendSony(codeProjecteurOFF, longeurCodeSony);
        Serial.println(F("power sony"));
        delay(40);
        if (codeTelecommande()) Serial.println(F("PERTURBATION SONY"))
      }
      irrecv.resume();  // reset du récepteur au cas où 
    }
     
    void allumage()
    {
      relais(PASSIF, ACTIF);        // active le relais descend et desactive le relais monte
      delay(dureeCourseAscenseur);  // attente de la descente
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      appuiPower();
      etat = PROJECTEUR_ON;
    }
     
    void extinction(bool manuelle)
    {
      if (manuelle) appuiPower();   // désactive le retroprojecteur
      delay(2000UL);                // on attend deux secondes
      Serial.println(F("CONFIRMATION OFF"));
      appuiPower();                 // confirmation désactivation du retroprojecteur
      delay(dureeRefroidissement);  // deux minutes de refroidissement
      relais(ACTIF, PASSIF);        // active le relais monte et desactive le relais descend
      delay(dureeCourseAscenseur);  // attente de la fermeture
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      etat = PROJECTEUR_OFF;
    }
     
     
    uint32_t codeTelecommande()
    {
      uint32_t code = 0;
      if (irrecv.decode(&results)) {
        code = results.value;
        Serial.print(F("code = 0x"));
        Serial.println(results.value, HEX);
        irrecv.resume();  // prêt pour traiter la prochaine commande
      }
      return code;
    }
     
     
    void setup()
    {
      Serial.begin(115200);
     
      pinMode(pinRelaisMonter, OUTPUT);       //relais montée
      pinMode(pinRelaisDescendre, OUTPUT);    // relais descente
      relais(PASSIF, PASSIF);                 //extinction des relais
     
      etat = PROJECTEUR_OFF;                  // hypothèse, on a aucun moyen de savoir...
     
      pinMode (pinBoutonHaut, INPUT_PULLUP);  // activation du PULLUP interne
      pinMode (pinBoutonBas, INPUT_PULLUP);   // activation du PULLUP interne
     
      irrecv.enableIRIn(); // on commmence à écouter
    }
     
    void loop()
    {
      switch (etat) {
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            Serial.println(F("ALLUMAGE BOUTON BAS"));
            allumage(); // appel bloquant ~10 secondes
          }
          break;
     
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeStarcom8810OFF) {
            Serial.println(F("EXTINCTION STARCOM"));
            extinction(true); // extinction par télécommande différente de celle du Sony, donc on force l'extinction, appel bloquant plus de 2 minutes !
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            Serial.println(F("EXTINCTION BOUTON HAUT"));
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
          }
          break;
      }
    }
    Pouvez vous refaire le même test et copier ce que le moniteur série dit ?

  16. #16
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut
    Bonjour Jay M,
    J'ai commis une erreur sur mon dernier message, en fait le dernier code marchait juste pour la descente, une fois en bas, même le bouton ne remonte pas, pour le refaire remonter j'ai du téléverser le code du début, cordialement

  17. #17
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    vous pouvez me montrer ce que dit la console série... sinon je ne peux pas essayer de comprendre...

  18. #18
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut
    Le code était comme ça :
    18:55:24.510 -> ALLUMAGE BOUTON BAS
    18:55:34.534 -> off sony
    18:55:34.603 -> off sony
    18:55:34.639 -> off sony

    Et plus rien d'autre malgré l'appui sur les boutons ou télécommande.
    Cordialement

  19. #19
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Citation Envoyé par brachol Voir le message
    Le code était comme ça :
    18:55:24.510 -> ALLUMAGE BOUTON BAS
    18:55:34.534 -> off sony
    18:55:34.603 -> off sony
    18:55:34.639 -> off sony

    Et plus rien d'autre malgré l'appui sur les boutons ou télécommande.
    Cordialement
    si vous avez vu "off sony" c'est que vous n'aviez pas mis le dernier Code (qui dit "power sony").

    ==> le voici à nouveau:

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    /* pins
     
      GND breadboard <--> GND Arduino (en cas d'usage d'une breadboard)
     
      D0, D1    connexion Serial
      D2
      D3        LED infrarouge (exemple TSAL 6200, (câblage pin 3 <-> R 200 Ohms  <-> LED Anode || Led Cathode <-> GND)
      D4        bouton poussoir haut (câblage pin 4 <-> bouton <-> GND)
      D5        bouton poussoir bas  (câblage pin 5 <-> bouton <-> GND)
      D6
      D7
      D8
      D9        IN1 = relais de montée
      D10       IN2 = relais de descente
      D11
      D12     Récepteur IR
      D13
     
      A0
      A1
      A2
      A3
      A4
      A5
     
    */
     
    /* **************** la partie IR **************** */
     
    #include <IRremote.h>     // https://github.com/z3t0/Arduino-IRremote
    const byte RECV_PIN = 12; // on reçoit les commandes IR  PIN 12
    IRrecv irrecv(RECV_PIN);  // notre objet récepteur
    decode_results results;   // le résultat décodé
     
    // LED IR connectée sur la pin PWM 3
    /* obtention du code on/off de la télécommande sony à obtenir avec IRrecvDumpV2
      hypothèse ---> Decoded SONY: 542A (15 bits)
    */
    const unsigned long codeProjecteurOFF = 0x542A; // (votre 21546)
    const int longeurCodeSony = 15;
    const unsigned long codeStarcom8810OFF = 0x2FD18E7; // (code OFF starcom8810)
     
    IRsend irsend;
     
    /* **************** les relais et boutons **************** */
     
    const byte pinRelaisMonter = 9;       // IN1 = relais de montée
    const byte pinRelaisDescendre = 10;   // IN2 = relais de descente
    const byte ACTIF    = LOW;
    const byte PASSIF =  HIGH;
    const unsigned long dureeCourseAscenseur = 10000UL;
    const unsigned long dureeRefroidissement = 120000UL;
     
    const byte pinBoutonHaut = 4;  // bouton poussoir haut
    const byte pinBoutonBas = 6;   // bouton poussoir bas
     
    /* **************** gestion de l'état **************** */
     
    enum : uint8_t {PROJECTEUR_OFF, PROJECTEUR_ON} etat;
     
    /* **************** fonctions **************** */
    void relais(const byte etatMonter, const byte etatDescendre)
    {
      digitalWrite(pinRelaisMonter, etatMonter);
      digitalWrite(pinRelaisDescendre, etatDescendre);
    }
     
    void appuiPower() // le protocole Sony dit qu'il faut envoyer la commande 3 fois
    {
      for (byte i = 0; i < 3; i++) {
        irsend.sendSony(codeProjecteurOFF, longeurCodeSony);
        Serial.println(F("power sony"));
        delay(40);
      }
    }
     
    void allumage()
    {
      relais(PASSIF, ACTIF);        // active le relais descend et desactive le relais monte
      delay(dureeCourseAscenseur);  // attente de la descente
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      appuiPower();
      etat = PROJECTEUR_ON;
    }
     
    void extinction(bool manuelle)
    {
      if (manuelle) appuiPower();   // désactive le retroprojecteur
      delay(2000UL);                // on attend deux secondes
      Serial.println(F("CONFIRMATION OFF"));
      appuiPower();                 // confirmation désactivation du retroprojecteur
      delay(dureeRefroidissement);  // deux minutes de refroidissement
      relais(ACTIF, PASSIF);        // active le relais monte et desactive le relais descend
      delay(dureeCourseAscenseur);  // attente de la fermeture
      relais(PASSIF, PASSIF);       // désactive les 2 relais
      etat = PROJECTEUR_OFF;
    }
     
     
    uint32_t codeTelecommande()
    {
      uint32_t code = 0;
      if (irrecv.decode(&results)) {
        code = results.value;
        Serial.print(F("code = 0x"));
        Serial.println(results.value, HEX);
        irrecv.resume();  // prêt pour traiter la prochaine commande
      }
      return code;
    }
     
     
    void setup()
    {
      Serial.begin(115200);
     
      pinMode(pinRelaisMonter, OUTPUT);       //relais montée
      pinMode(pinRelaisDescendre, OUTPUT);    // relais descente
      relais(PASSIF, PASSIF);                 //extinction des relais
     
      etat = PROJECTEUR_OFF;                  // hypothèse, on a aucun moyen de savoir...
     
      pinMode (pinBoutonHaut, INPUT_PULLUP);  // activation du PULLUP interne
      pinMode (pinBoutonBas, INPUT_PULLUP);   // activation du PULLUP interne
     
      irrecv.enableIRIn(); // on commmence à écouter
    }
     
    void loop()
    {
      switch (etat) {
        case PROJECTEUR_OFF:
          if (digitalRead(pinBoutonBas) == ACTIF) {
            Serial.println(F("ALLUMAGE BOUTON BAS"));
            allumage(); // appel bloquant ~10 secondes
          }
          break;
     
        case PROJECTEUR_ON:
          if (codeTelecommande() == codeStarcom8810OFF) {
            Serial.println(F("EXTINCTION STARCOM"));
            extinction(true); // extinction par télécommande différente de celle du Sony, donc on force l'extinction, appel bloquant plus de 2 minutes !
          } else if (digitalRead(pinBoutonHaut) == ACTIF) {
            Serial.println(F("EXTINCTION BOUTON HAUT"));
            extinction(true); // extinction manuelle, appel bloquant plus de 2 minutes !
          }
          break;
      }
    }

  20. #20
    Membre averti
    Homme Profil pro
    bricoleur
    Inscrit en
    Mars 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2020
    Messages : 26
    Par défaut
    bonsoir Jay M,
    Starcom ne marche pas bouton oui :


    18:47:20.627 -> ALLUMAGE BOUTON BAS
    18:47:30.638 -> power sony
    18:47:30.710 -> power sony
    18:47:30.779 -> power sony
    18:48:17.160 -> EXTINCTION BOUTON HAUT
    18:48:17.196 -> power sony
    18:48:17.232 -> power sony
    18:48:17.304 -> power sony
    18:48:19.347 -> CONFIRMATION OFF
    18:48:19.383 -> power sony
    18:48:19.455 -> power sony
    18:48:19.491 -> power sony
    18:50:30.427 -> ALLUMAGE BOUTON BAS
    18:50:40.449 -> power sony
    18:50:40.518 -> power sony
    18:50:40.588 -> power sony
    18:51:23.705 -> EXTINCTION BOUTON HAUT
    18:51:23.741 -> power sony
    18:51:23.778 -> power sony
    18:51:23.850 -> power sony
    18:51:25.894 -> CONFIRMATION OFF
    18:51:25.930 -> power sony
    18:51:25.966 -> power sony
    18:51:26.038 -> power sony

Discussions similaires

  1. Un programme Arduino
    Par bishoo dans le forum Arduino
    Réponses: 3
    Dernier message: 25/02/2016, 17h52
  2. Vérification programme Arduino.
    Par Zoumana05 dans le forum Arduino
    Réponses: 1
    Dernier message: 18/01/2016, 10h10
  3. Programmation Arduino + capteurs de flexion
    Par kakthus dans le forum Arduino
    Réponses: 1
    Dernier message: 21/10/2015, 12h45
  4. programmer arduino avec simulink
    Par youssefhoky dans le forum Simulink
    Réponses: 0
    Dernier message: 01/04/2015, 20h38
  5. De l'aide pour programmation Arduino
    Par Arthurie dans le forum Arduino
    Réponses: 3
    Dernier message: 01/07/2014, 13h51

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