Besoin d'aide!!!

Alex Yamaha
sam, 02/25/2017 - 13:48
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);
}
}
Cédric29
sam, 02/25/2017 - 17:53
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.
Alex Yamaha
dim, 02/26/2017 - 10:47
D'accord merci je vais essayer