Bonjour bonjour !
Je suis sur un projet d’automatisation d’un portail mais il me manque une étape essentielle, je ne comprend pas la fonction millis().Pour commencer voici un schéma de mon montage:
(PS: Le câble bleu qui va du GND au pin 2 est pour simuler un détecteur de passage par zéro (zero crossing detector))
Et mon code côté récepteur:
#include <RH_ASK.h>
#include <SPI.h>
#define IN1 18
#define IN2 19
#define IN3 20
#define IN4 21
#define buffsize 10
uint8_t buf[buffsize];
uint8_t buflen = buffsize;
RH_ASK driver(2000, 3);
void setup()
{
Serial.begin(9600);
driver.init();
initialisation_interruption ();
pinMode(2, INPUT);
digitalWrite(2, HIGH);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(IN1, OUTPUT);
digitalWrite(IN1, LOW);
pinMode(IN2, OUTPUT);
digitalWrite(IN2, LOW);
pinMode(IN3, OUTPUT);
digitalWrite(IN3, LOW);
pinMode(IN4, OUTPUT);
digitalWrite(IN4, LOW);
}
void loop()
{
delay (2000);
}
void initialisation_interruption ()
{
attachInterrupt(digitalPinToInterrupt(2), del, CHANGE);
attachInterrupt(digitalPinToInterrupt(3), remote, CHANGE);
}
void remote () //contrôle via une télécommande RF 433 MHz
{
uint8_t buf[4];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen))
{
if ( !strcmp ((char*) buf, "A") ) //Allume la LED 18 quand on reçoit le caractère "A"
{
digitalWrite(IN1, HIGH);
delay (2000);
digitalWrite(IN1, LOW);
}
if ( !strcmp ((char*) buf, "B") )//Allume la LED 19 quand on reçoit le caractère "B"
{
digitalWrite(IN2, HIGH);
delay (2000);
digitalWrite(IN2, LOW);
}
if ( !strcmp ((char*) buf, "C") )
{
digitalWrite(IN3, HIGH);
delay (2000);
digitalWrite(IN3, LOW);
}
if ( !strcmp ((char*) buf, "D") )
{
digitalWrite(IN4, HIGH);
delay (2000);
digitalWrite(IN4, LOW);
}
Serial.print("Bouton: ");
Serial.println((char*)buf);
Serial.println("----------");
}
}
void del () //Zero crossing
{
if (digitalRead(2))
{
digitalWrite(13, LOW);
}
else if (!digitalRead(2))
{
digitalWrite(13, HIGH);
}
}
Sauf qu’il me faudrait instaurer un laps de temps entre le moment où la carte détecte le passage par zéro et le moment où la LED s’allume pour que ça ressemble à ça :
Et donc gérer la vitesse du portail selon le temps entre la détection et l’activation.
Il me faut utiliser la fonction millis car le delay stop le programme ce qui n’est pas envisageable pour un portail.
J’ai essayé d’être le plus clair possible afin de vous faciliter vos réponses donc je remercie d’avance ceux qui ont pris la peine de tout lire