Untitled

 avatar
unknown
c_cpp
4 years ago
2.9 kB
5
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...