Détecteur Ultrason + Uno > intérupteur led

Bonjour,

Voila j’ai fait un schéma avec une carte uno et un capteur ultrason, en vue de faire un interrupteur d’une lampe avec un relais
j’ai mis ce code, mais j’aimerai quand je passe la main cela allume la led (donc la lampe sur le relais) mais que cela ne s’éteint pas, et que quand je repasse la main devant, cela s’éteint et que ça reste éteint jusqu’à la prochaine fois ou je repasse la main pour la rallumer.

Voici le code que j’ai mis :

#include 

const int Trig = 12;     // pin "Trig" du HC-SR04 connectée à pin 13 de l'Arduino
const int Echo = 13;     // pin "Echo" du HC-SR04 connectée à pin 12 de l'Arduino

const int LED = 1; // pin connecté à la LED + resistance

const int green = 10;   // LEDs reliées aux pins de l'Arduino via une résistance
const int yellow = 11;  // de 150 Ohms.
const int red = 12;

long cm;                // variable pour stocker la distance de l'objet en cm

Ultrasonic HCSR04(Trig,Echo);

void setup()
{
  pinMode(LED, OUTPUT);
}

void loop()
{

  cm = HCSR04.convert(HCSR04.timing(), 1);

  if(cm > 0 && cm < 20)          // Il y a une présence   {     digitalWrite(LED, HIGH); // Allumer la LED     delay(10); // Temps de traitement   }   else if(cm >= 20)  // Il n'y a pas de présence
  {
    digitalWrite(LED, LOW); // Eteindre la LED
    delay(10); // Temps de traitement
  }
}

je débute en arduino et en code, donc si il y a aussi un bon tuto pour apprendre ce genre de fonction, je suis preneur :wink:

merci
Johan

bonjour,
fonction boolean ICI
par contre, pas besoin de mettre

if(cm > 0 && cm < 20)

ceci suffit largement

if(cm < 20)

Bonjour,

En fait, si j’ai bien compris, quand tu passes la main devant tu veux que la led change d’état allumé-> éteint, éteint->allumé.
Il suffit de relire l’état de la led (on peut aussi utiliser une variable bool).

void loop()
{
  cm = HCSR04.convert(HCSR04.timing(), 1);

  if(cm > 0 && cm < 20)          // Il y a une présence   {     digitalWrite(LED, HIGH); // Allumer la LED     delay(10); // Temps de traitement   }   else if(cm >= 20)  // Il n'y a pas de présence
  {
    digitalWrite(LED, !digitalRead(LED)); // Change l'état de la LED
    delay(500); // Pour éviter les doubles détection
  }
}

Oui kamill c’est bien ça que je veux faire

voici ce que le code que j’ai mis fait =

quand led(rouge) est allumée, et que la led(verte) est éteinte, et que je m’approche à moins de 2cm, la led(rouge) s’éteint, et la led(verte) s’allume
et si je m’écarte de plus de 2cm, les led reviennent dans leurs états initiaux

voici ce que j’aimerai obtenir =

quand la led(rouge) est allumée, la led(verte) est éteinte, quand je m’approche à moins de 2cm, la led(rouge) s’éteint, et la led(verte) s’allume
et si je m’écarte de plus de 2cm, les led restent dans ce meme état
alors si la led(rouge) est éteinte, et que la led(verte) est allumée, quand je m’approche à moins de 2cm, la led(rouge) s’allume, et la led(verte) s’éteint
et si je m’écarte de plus de 2cm, les led restent dans ce meme état

en fait je me suis trompé de code dans mon 1er post, j’ai mis celui ci sur ma carte (l’autre marche pas) =

/*
HC-SR04 Ping distance sensor]
VCC to arduino 5v GND to arduino GND
Echo to Arduino pin 13 Trig to Arduino pin 12
Red POS to Arduino pin 11
Green POS to Arduino pin 10
560 ohm resistor to both LED NEG and GRD power rail
More info at: http://goo.gl/kJ8Gl
Original code improvements to the Ping sketch sourced from Trollmaker.com
Some code and wiring inspired by http://en.wikiversity.org/wiki/User:Dstaub/robotcar
*/

#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance < 4) {  // This is where the LED On/Off happens
    digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off
  digitalWrite(led2,LOW);
}
  else {
    digitalWrite(led,LOW);
    digitalWrite(led2,HIGH);
  }
  if (distance >= 200 || distance <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distance);
    Serial.println(" cm");
  }
  delay(500);
}