Besoin d'aide!!!

Portrait de Alex Yamaha

Bonjour,

J'ai un projet pour l'école d'un portail électrique coulissant avec télécommandé arduino.

​J'ai tout réussi dans mon code (je suis novice) avec la télécommande, le L293D pour faire tourner le moteur dans les deux sens...

Le problème c'est que je n'arrive pas à faire arrêter le portail avec les microrupteurs; je suis obligé de faire une fonction "delay" mais ce n'est pas ce que je veux...

Quelqu'un aurait-il une solution à mon problème???

Mon code:


#include <IRremote.h>

const char DIN_RECEPTEUR_INFRAROUGE = 53;

IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

int led = 33;
int input1 = 40 ;
int input2 = 41 ;

(avec fdc1 et fdc 2 sur les pins 46 et 47 de mon arduino méga)
 

void setup()
{
 Serial.begin(9600);
 monRecepteurInfraRouge.enableIRIn();
   
 //monRecepteurInfraRouge.blink33(true);
 pinMode(led, OUTPUT);
pinMode (input1, OUTPUT);
pinMode (input2, OUTPUT);
}
void loop()
{
  {
digitalWrite (input1 , LOW) ;
digitalWrite (input2 , LOW) ;
digitalWrite (led , HIGH);
delay (10);

  if (monRecepteurInfraRouge.decode(&messageRecu))
  {
    if (messageRecu.value == 0x80C)
    {
          
digitalWrite (led , HIGH);
delay (1000);
digitalWrite (led , LOW);
delay(1000);

digitalWrite (led , HIGH);
delay (1000);
digitalWrite (led , LOW);
delay(1000);

digitalWrite (input1 , HIGH ) ;
digitalWrite (input2 , LOW ) ; // sens aiguilles d'une montre ( ouvrir )
delay (4200);
    }   
    monRecepteurInfraRouge.resume();
  delay(1); 

 if (messageRecu.value == 0x801)

{

digitalWrite (led , HIGH);  
delay (1000);
digitalWrite (led , LOW);    
delay(1000);                

digitalWrite (led , HIGH);   
delay (1000);
digitalWrite (led , LOW); 
delay(1000);               

digitalWrite (input1 , LOW);
digitalWrite (input2 , HIGH); // fermer
delay (4200);
}
  monRecepteurInfraRouge.resume();
  delay(1);

     if (messageRecu.value == 0x802)
    {
          
digitalWrite (led , HIGH);
delay (1000);
digitalWrite (led , LOW);
delay(1000);

digitalWrite (led , HIGH);
delay (1000);
digitalWrite (led , LOW);
delay(1000);

digitalWrite (input1 , HIGH ) ;
digitalWrite (input2 , LOW ) ; // sens aiguilles d'une montre ( ouvrir )
delay (1500);
    }   
    monRecepteurInfraRouge.resume();
  delay(1); 

 if (messageRecu.value == 0x803)

{

digitalWrite (led , HIGH);  
delay (1000);
digitalWrite (led , LOW);    
delay(1000);                

digitalWrite (led , HIGH);   
delay (1000);
digitalWrite (led , LOW); 
delay(1000);               

digitalWrite (input1 , LOW);
digitalWrite (input2 , HIGH); // fermer
delay (1500);
}
  monRecepteurInfraRouge.resume();
  delay(1);

  }
 

}

 

Portrait de Cédric29

salut

essais en créant des void

void ouvrir()

digitalWrite (input1 , HIGH ) ;
digitalWrite (input2 , LOW ) ; // sens aiguilles d'une montre ( ouvrir )

void fermer()

digitalWrite (input1 , LOW);
digitalWrite (input2 , HIGH); // fermer

Ensuite tu n'apelles ces fonctions seulement quand :

if ((messageRecu.value == 0x802) && (fdc1 == LOW)) // reçu demande ouverture et fin de course1 LOW
    {

while (fdc ==LOW ){ // tant que fin de course est niveau bas

ouvrir()} (//j'appelle la fonction ouvrir()

}

// faire la même pour la demande de fermeture

void ouvrir()

digitalWrite (input1 , HIGH ) ;
digitalWrite (input2 , LOW ) ;

void fermer()

digitalWrite (input1 , LOW);
digitalWrite (input2 , HIGH);

Voila essais cette possibilité, j'ai pas testé mais possible que ca fonctionne a peu pret.

Portrait de Alex Yamaha

D'accord merci je vais essayer