Untitled
unknown
c_cpp
4 years ago
2.9 kB
7
Indexable
#define trigPin 5 //Trig
#define echoPin 4 //Echo
#define avertisseur 9 //Led
int mindist = 100; //On indique la distance en dessous de laquelle
int fadeValue = 0;
bool etat = false;// Variable d'état de la LED, c'est un booléen, et donc n'accepte que true et false (ou 0 et 1) comme valeurs
// Déclaration de la FONCTION de mesure de distance, c'est ton code, mais dans une fonction. C renvoie la distance en "long"
// D'où son typage "long"
long mesure()
{
long duree, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //Trig envois pendant 10ms
digitalWrite(trigPin, LOW);
// On calcul le temps pour l'aller retour du signal
duree = pulseIn(echoPin, HIGH);
distance = duree*340/(2*10000);
return distance;
}
// Déclaration de la fonction faeIn. Elle ne retourne rien, c'est un typage "void"
// Toujours ton code.
void fadeIn()
{
fadeValue = 0;
for (fadeValue <= 255; fadeValue += 1;)
{
// sets the value (range from 0 to 255):
analogWrite(avertisseur, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(10);
}
etat = true; // Une fois la LED à fond, on la déclare allumée
}
// Idem
void fadeOut()
{
fadeValue = 255;
for (fadeValue >= 0; fadeValue -= 1;)
{
// sets the value (range from 0 to 255):
analogWrite(avertisseur, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
etat = false; // Une fois la LED éteinte, on la déclare... Bin éteinte...
}
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT); //On défini Trig comme une sortie
pinMode(echoPin, INPUT); //On défini Echo comme une entrée
pinMode(avertisseur, OUTPUT); //On défini la led comme une sortie
}
void loop()
{
if(mesure() <= mindist)// Si la distance récupérée dans la fonction mesure() est inferieure ou égale à mindist
{
if(etat = false)// ET si la LED est eteinte
{
fadeIn();//On allume la LED en éxécutant fadeIn
}
}// Si etat = true, on ne fait rien
else if(mesure() > mindist)// Si la distance récupérée dans la fonction mesure() est superieure à mindist
{
if(etat =true)// ET si la LED est allumée
{
fadeOut();
}
}
}//Sinon, on ne fait rien, la loop recommence.
// DISCLAMER
// Voilà, c'est ton code mais restructuré. Ce qu'il te manquait, c'était ça et aussi la variable booléenne
// qui te permet de connatre l'état de ta LED, sino, à chaque fois que la distance change, meme si elle est dans la bonne
// tranche, ton fade se ré-éxécute, d'où l'espèce de clignottement...
// Je n'ai pas testé le code, pas ce qu'il faut sous la main, mais ça devrait faire le taf.
// Du coup t'a un bel exemple simple de structure de code et d'utilisation des fonctions.
// Si ca ne marche pas n'hésite pas à me contacter
Editor is loading...