programmation ascenseur

Bonjour a tous,

J'ai voulu réaliser un ascenseur autonome, mais la n'est pas le probleme, dans ce prgramme je gere 2 capteurs en entrée et 2 electroaimant en sortie. Pour cela j'utilise un shield que j'ai confectionné, or il y a un probleme sur mon programme que je n'arrive pas a déceler, si quelqu'un pourrait m'aider j'apprécierais fortement.
Merci d'avance :wink:

// definition des constantes qui définiront les broches
#define ENA 3        // validation pont A sur broche 3
#define ENB 5        // validation pont B sur broche 5
#define G1 6         // commande grille transistor 1 sur broche 6
#define G2 7         // commande grille transistor 2 sur broche 7
#define IN1 9        // commande demi-pont 1 (A) sur broche 9
#define IN2 10       // commande demi-pont 2 (A) sur broche 10
#define IN3 12       // commande demi-pont 3 (B) sur broche 12
#define IN4 13       // commande demi-pont 4 (B) sur broche 13


void setup() {
  
// initialisation des broches pour le shield
  pinMode(ENA, OUTPUT);   // sets the pin as output
  pinMode(ENB, OUTPUT);   // sets the pin as output
  pinMode(G1, OUTPUT);    // sets the pin as output
  pinMode(G2, OUTPUT);    // sets the pin as output
  pinMode(IN1, OUTPUT);   // sets the pin as output
  pinMode(IN2, OUTPUT);   // sets the pin as output
  pinMode(IN3, OUTPUT);   // sets the pin as output
  pinMode(IN4, OUTPUT);   // sets the pin as output

  // les 2 transistors supplémentaires sont dans l'état ouvert (ils ne sont pas utilisés ici)
  digitalWrite(G2,LOW);        // transistor 2 OFF
  analogWrite(G1,0);         // transistor 1 à 0%

  

///INITIALISATION ENTREES  
// initialisation du BP
    pinBouton=2;
    pinMode(pinBouton,INPUT);
// initialisation du capteur
    pinCapteur=4;
    pinMode(pinCapteur,INPUT);
    
/// INITIALISATION SORTIES
// initialisation de ventouse
    pinventouse=7;
    pinMode(pinventouse,OUTPUT);
// initialisation de Electro
    pinElectro=8;
    pinMode(pinElectro,OUTPUT);
  
 

  
    //ventouse + electoaimant activé                              OK
    //appui sur le BP                                             OK
    //ventouse + electoaimant désactivé                           OK
    //capteur a l'état 1                                          OK
    //electoaimant activé                                         OK
    //temps 5s                                                    OK
    //ventouse activée + electoaimant désactivé                   OK

  //allumage ventouse + electoaimant
  digitalWrite(pinventouse, HIGH);
  digitalWrite(pinElectro, HIGH);
  
  //lecture de l'état du BP
  //interprétation état BP
  while (1)
{
  if (digitalRead(pinBouton) == 1)
  {
    digitalWrite(pinventouse, LOW);
    digitalWrite(pinElectro, LOW);
    break;
  }
}
  //lecture de l'état du capteur
  //interprétation état capteur

  while (1)
{
  if (digitalRead(pinCapteur) == 1)
  {
    digitalWrite(pinElectro, HIGH);
    digitalWrite(pinventouse, HIGH);
    delay(5000);
    digitalWrite(pinElectro, LOW);
    break;
  }
}

while (1);
}

Mis à part que tes variables "pin..." ne sont pas déclarées, que la boucle "void loop() {} manque, avec cette instruction, tu risques d'y rester longtemps :

while (1);

J'ai mis ceci pour déclarer mes pins ? ce n'est pas bon ?

//INITIALISATION ENTREES
// initialisation du BP
pinBouton=2;
pinMode(pinBouton,INPUT);
// initialisation du capteur
pinCapteur=4;
pinMode(pinCapteur,INPUT);

/// INITIALISATION SORTIES
// initialisation de ventouse
pinventouse=7;
pinMode(pinventouse,OUTPUT);
// initialisation de Electro
pinElectro=8;
pinMode(pinElectro,OUTPUT);

effectivement honte à moi d'avoir oublier la void loop
J'avais mis while(1) dans le but que le programme se répète continuellement, comment puis-je faire autrement ?

Pour déclarer une variable, il faut écrire ceci :

TypeVariable NomVariable;

Dans ton cas, tes pin... sont des "byte" donc, tu écris :

byte pinBouton;

et si tu veux l'initialiser :

byte pinBouton = 2;

Mais comme dans ton cas, ces pin... sont des constantes, tu peux aussi utiliser les #define ; ce qui te donnera :

#define PIN_BOUTON 2

Pour répéter indéfiniment une action, il faut justement l'inclure dans la méthode loop() (d'où son nom).

Mais je pense qu'avant d'aller plus loin, tu devrais voir (ou revoir) quelle est la structure d'un programme Arduino (par exemple).

Cordialement.

Pierre