Lecture de mon programme impossible

Bonjour,
Je crée un nouveau sujet car je viens d'acheter une Arduino UNO R3, avant celle-ci j'avais une autre UNO mais plus ancienne.

Photos de l'ancienne :

Photo de la nouvelles avec ces spec :

Mon programme est créer et fonctionne sauf que, pendant que je soudais j'ai abîmé mon ancienne carte.

Programme en question:

  #include <Servo.h>

    // crée l’objet pour contrôler le servomoteur
      Servo monservo; 

    // constantes ne change pas. Elles sont utilisées pour donner les pins:
      const int BoutonD = 12; //le numéro de la pin du bouton départ
      const int BoutonR = 10; //le numéro de la pin du bouton RAZ
      const int LedF = 2; //le numéro de la pin de la Led fin de cycle
      const int LedV = 6;//le numéro de la pin de la Led verte
      const int LedJ = 7;//le numéro de la pin de la Led jaune
      const int LedR = 3;//le numéro de la pin de la Led rouge
      const int ReedV = 4;//le numéro de la pin du capteur REED vert
      const int ReedJ = 5;//le numéro de la pin du capteur REED jaune
      
    // les variables vont changées :
      int etatBoutonD = 0;//état du bouton de départ
      int etatBoutonR = 0;//état du bouton de RAZ
      int etatReedV = 0;//état du capteur reed vert
      int etatReedJ = 0;//état du capteur reed jaune
      int pos = 0;//variable pour stocker la position du servomoteur
      
      
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
  void setup() {

  
  
    // initiliser les LEDs en tant que sortie :
      pinMode(LedF, OUTPUT);
      pinMode(LedV, OUTPUT);
      pinMode(LedJ, OUTPUT);
      pinMode(LedR, OUTPUT);
    
    //initiliser les boutons en tant que entrer :
      pinMode(BoutonD, INPUT);
      pinMode(BoutonR, INPUT);

      //capteur Reed en tant qu'entrer :
      pinMode(ReedV, INPUT_PULLUP);
      pinMode(ReedJ, INPUT_PULLUP);
      
      
    //initialisation du servomoteur
      monservo.attach(9);  // utilise la broche 13 pour le contrôle du servomoteur
     }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
void loop() {
  
  //Contrôle du reed jaune avant cycle (détection capteur bloqué fermé)
   {etatReedJ = digitalRead(ReedJ);
        if (etatReedJ == LOW){
            digitalWrite(LedR, HIGH);
        }    
       }
  //Contrôle du reed vert avant cycle (détection capteur bloqué fermé)         
    {etatReedV = digitalRead(ReedV);
        if (etatReedV == LOW){
            digitalWrite(LedR, HIGH);    
        } 
        }
                
  //Lit la broche d'entrée du bouton départ
    etatBoutonD = digitalRead(BoutonD);

  //Si le bouton est HIGH alors...
    if (etatBoutonD == HIGH){

  //Demande au servo de se déplacer à ... puis attendre ...    
        for(pos = 0; pos < 135; pos+= 1);
         {
          monservo.write(pos);
         delay(500);
         } 

  //Contrôle du capteur reed vert, on lit la broche puis si elle est LOW alors on allume la Led verte sinon on éteind
                {etatReedV = digitalRead(ReedV);
                    if (etatReedV == LOW){
                        digitalWrite(LedV, HIGH);
                            }else{
                                digitalWrite(LedR,HIGH);      
                                }
                              }
                
  //Demande au servo de se déplacer à ... puis attendre ...
        for(pos = 135; pos >=5; pos -=1)
          {monservo.write(pos);
            delay(20); 
          }
          
  //Contrôle du capteur reed jaune, on lis la broche puis si elle est LOW alors on allume la Led verte sinon on éteind          
                {etatReedJ = digitalRead(ReedJ);
                    if (etatReedJ == LOW){
                        digitalWrite(LedJ, HIGH);
                            }else{
                                digitalWrite(LedR, HIGH);
                                } 
                              }
        
  //Demande au servo de se déplacer à ... puis attendre ...
       delay(500);
        monservo.write(80); // demande au servo de se déplacer à cette position
            delay(200); // attend 1000 ms entre changement de position

  //Allumer la led de fin de cycle
        digitalWrite(LedF, HIGH); //Allumer la Led en fin de cycle
        }
       
          
  // lire l'état du bouton RAZ
    {etatBoutonR = digitalRead(BoutonR);

  //Si le bouton RAZ est HIGH alors éteind les leds
      if (etatBoutonR == HIGH){
        digitalWrite(LedF, LOW);
        digitalWrite(LedV, LOW);
        digitalWrite(LedJ,LOW);
        digitalWrite(LedR,LOW);
        }
     }
    }
   
   

Une fois ma nouvelle carte reçu, je téléverse mon programme, il fonctionne :partying_face:
Quelques temps plus tard, j'ai voulu la refaire marcher mais impossible (je rappelle l’Arduino est neuve) la LED ON s'allume mais pas la LED L :scream: .

  • J'ai essayé de débrancher tous mes fils qui venait sur l’Arduino, rien ne change,

  • J'ai essayé de mettre à jour toutes mes bibliothèques, mes cartes et le PC, mais rien ne change,

  • Pour finir j'ai essayé de mettre un programme exemple "Blink", et là, la LED ON s'allume et la LED L clignote.

Est-ce que c'est déjà arriver à quelqu'un ? Quelles peuvent être les solutions pour m'aider ?

comment est alimenté le servo ?

Bonjour,
Ma carte est branchée avec un adaptateur secteur vers 12v et le servo est branché sur Vin
Schematic_banc test_2023-07-24-3.pdf (42,9 Ko)

Alimentez le servo sans passer par l’arduino, ce n’est pas une alimentation de puissance !

Faudrait savoir, c'est 9 ou c'est 13?
C'est 13 dans le commentaire, et aussi sur le schéma mais c'est 9 dans le code.

J'ai changer le PIN mais oublier de mettre à jour, et ça ne change rien car c'est une annotation // pas du code

Comment faire cela ?

  • une autre alim 5V qui va vers le servo ?
  • un step down qui transforme les 12VDC en 5VDC

(alimenter un UNO avec 12V c'est faire chauffer la carte pour rien - elle a besoin de 5V donc les autres 7V multipliés par la consommation de la carte, c'est de la puissance dissipée par le régulateur sous forme de chaleur)

Faire un pont jusqu'à l'autre 5V je peux mais ça change rien :sweat:

ça veut dire quoi ?

Et bien mettre le 5V du servo sur le 5V qui va a mes boutons

vos boutons peuvent être connectés sans soucis au 5V de votre Arduino, ce n'est pas ça qui va faire chauffer la carte. vous n'avez pas besoin de les câbler comme ils le sont d'ailleurs, vous pourriez faire comme pour les Reed, utiliser le pullup interne de votre arduino

si vous connectez les boutons à une alim séparée (celle du servo) il faudra quand même que le GND des boutons soit le même que celui de l'arduino

si vous aviez une bonne alim stabilisée 5V, elle pourrait servir à la fois pour l'arduino et à la fois pour le servo (avec un petit étage de découplage peut être)

Tout est branché, si je branche l'alimentation Usb sur le PC ou en 12V, la LED de la carte ON s'allume, si j’appuie sur le bouton départ cycle la LED L s'allume mais rien ne se passe

postez le nouveau code et une description exacte du schéma

une photo du montage serait bien aussi.

sinon cette boucle prend plus d'une minute sans que rien d'autre ne puisse être traité au niveau des boutons

EDIT j'avais raté le ; après le for. c'est un souci. !!

  #include <Servo.h>

    // crée l’objet pour contrôler le servomoteur
      Servo monservo; 

    // constantes ne change pas. Elles sont utilisées pour donner les pins:
      const int BoutonD = 12; //le numéro de la pin du bouton départ
      const int BoutonR = 10; //le numéro de la pin du bouton RAZ
      const int LedF = 2; //le numéro de la pin de la Led fin de cycle
      const int LedV = 6;//le numéro de la pin de la Led verte
      const int LedJ = 7;//le numéro de la pin de la Led jaune
      const int LedR = 3;//le numéro de la pin de la Led rouge
      const int ReedV = 4;//le numéro de la pin du capteur REED vert
      const int ReedJ = 5;//le numéro de la pin du capteur REED jaune
      
    // les variables vont changées :
      int etatBoutonD = 0;//état du bouton de départ
      int etatBoutonR = 0;//état du bouton de RAZ
      int etatReedV = 0;//état du capteur reed vert
      int etatReedJ = 0;//état du capteur reed jaune
      int pos = 0;//variable pour stocker la position du servomoteur
      
      
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
  void setup() {

  
  
    // initiliser les LEDs en tant que sortie :
      pinMode(LedF, OUTPUT);
      pinMode(LedV, OUTPUT);
      pinMode(LedJ, OUTPUT);
      pinMode(LedR, OUTPUT);
    
    //initiliser les boutons en tant que entrer :
      pinMode(BoutonD, INPUT);
      pinMode(BoutonR, INPUT);

      //capteur Reed en tant qu'entrer :
      pinMode(ReedV, INPUT_PULLUP);
      pinMode(ReedJ, INPUT_PULLUP);
      
      
    //initialisation du servomoteur
     // monservo.attach(9);  // utilise la broche 9 pour le contrôle du servomoteur
     }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
void loop() {
  
  //Contrôle du reed jaune avant cycle (détection capteur bloqué fermé)
   {etatReedJ = digitalRead(ReedJ);
        if (etatReedJ == LOW){
            digitalWrite(LedR, HIGH);
        }    
       }
  //Contrôle du reed vert avant cycle (détection capteur bloqué fermé)         
    {etatReedV = digitalRead(ReedV);
        if (etatReedV == LOW){
            digitalWrite(LedR, HIGH);    
        } 
        }
                
  //Lit la broche d'entrée du bouton départ
    etatBoutonD = digitalRead(BoutonD);

  //Si le bouton est HIGH alors...
    if (etatBoutonD == HIGH){

  //Demande au servo de se déplacer à ... puis attendre ...    
        for(pos = 0; pos < 135; pos+= 1);
         {
          monservo.write(pos);
         delay(500);
         } 

  //Contrôle du capteur reed vert, on lit la broche puis si elle est LOW alors on allume la Led verte sinon on éteind
                {etatReedV = digitalRead(ReedV);
                    if (etatReedV == LOW){
                        digitalWrite(LedV, HIGH);
                            }else{
                                digitalWrite(LedR,HIGH);      
                                }
                              }
                
  //Demande au servo de se déplacer à ... puis attendre ...
        for(pos = 135; pos >=5; pos -=1)
          {monservo.write(pos);
            delay(20); 
          }
          
  //Contrôle du capteur reed jaune, on lis la broche puis si elle est LOW alors on allume la Led verte sinon on éteind          
                {etatReedJ = digitalRead(ReedJ);
                    if (etatReedJ == LOW){
                        digitalWrite(LedJ, HIGH);
                            }else{
                                digitalWrite(LedR, HIGH);
                                } 
                              }
        
  //Demande au servo de se déplacer à ... puis attendre ...
       delay(500);
        monservo.write(80); // demande au servo de se déplacer à cette position
            delay(200); // attend 1000 ms entre changement de position

  //Allumer la led de fin de cycle
        digitalWrite(LedF, HIGH); //Allumer la Led en fin de cycle
        }
       
          
  // lire l'état du bouton RAZ
    {etatBoutonR = digitalRead(BoutonR);

  //Si le bouton RAZ est HIGH alors éteind les leds
      if (etatBoutonR == HIGH){
        digitalWrite(LedF, LOW);
        digitalWrite(LedV, LOW);
        digitalWrite(LedJ,LOW);
        digitalWrite(LedR,LOW);
        }
     }
    }
   
   

Voici le programme avec les corrections dans les annotations,

Les deux Delay (500) c'est le moment ou les aimants sont en face du capteur électromagnétique donc je laisse du temps pour être sur que cela fonction et 500ms vaut 0.5s et non 1 minute :grinning:

Les photos du montage :




C'est difficile à prendre en photo, mais c'est un système pour faire un banc de test

la boucle repère 135 fois une attente de 0,5 secondes ➜ ça fait plus d'une minute...

Avec cette ligne en commentaire le servo ne doit pas trop bouger;

Je l'ai enlever exprès pour un test mais le servo tourne dans le vide quand même

Un ; de trop

lequel ?