[Résolu] Capteur de mouvement utilisé comme un inter

Bonjour à tous,
Je suis en train de programmer une carte Uno R3 avec un detecteur de mouvement pour allumer un ruban led en éclairage indirect.

J'ai cependant un probleme, j arrive bien à detecter, récuperer les donnees mais je n arrive pas à coder de cette façon :
Quand il detecte et que la lampe n est pas allumé, elle s allume
Quand il ne detecte rien mais que s est allumé ça ne change rien
Quand il detecte et que s est allumé, ça s'éteint.

En résumé la partie code : (je ne l'ai pas sous la main)

etatlampe = 0;

If ( detection == HIGH && etatlampe == 0) {
etatlampe = HIGH; }
Else if ( detection == LOW && etatlampe == 1 ) {
Etatlampe = HIGH; }
Else if ( detection == HIGH && etatlampe == 1 ){
Etatlampe = LOW }

( bien entendu c est dans le loop)

Merci si quelqu un à une piste ... !!!

Jibogs

Tues pas dans la bonne section, demande à un modo de déplacer.

Utilise digitalWrite(pinlampe, high) et ca devrait fonctionner

essaye ça:
tout d'abord tu déclare au début de ton prog boolean ar=false; il servira d'anti-rebond de ta détection
puis dans le loop tu fait :
If ( detection ) {if (!ar) {ar=true; etatlampe=!etatlampe;}} else ar=false; ce qui à pour effet d'inverser etatlampe à chaque détection

Bonjour et merci de vos réponses,
j'utilise bien digitalWrite Jambe, voici mon code refait avec ton morceau fifi82:

int decompte = 0;              

int ledPin = 13;               
int inputPin = 5;              

int val = LOW;                    
int lastval = 0;                
boolean ar=false;
void setup() {
  pinMode(ledPin, OUTPUT);     
  pinMode(inputPin, INPUT);     
  Serial.begin(9600);
}


void loop(){
  
  val = digitalRead(inputPin);                
  if (val == HIGH && !ar) { 
    decompte++;                               
    digitalWrite(ledPin, HIGH);
    Serial.println("La lampe s'allume !");
    Serial.println(decompte);
    lastval = !lastval;
  }
  
  else { ar=false;
  Serial.println("La lampe s'eteint");
  }}

Je viens de comprendre pourquoi ça ne fonctionne pas bien ... j'ai un module de detection CSR501 avec un temporisateur dessus du coup ... Ce qui bloque à chaque fois mon compte avec un délais réglable sur le module. Je viens de commander un module FC-51 d'évitement d'obstacle, et là à mon avis je n'aurais plus ce probleme de timer.

Suis-je dans le vrai ?

Merci à vous

oups j'ai oublier le if (!ar) si non cela ne fonctionne pas

essaye comme ça pour voir

int decompte = 0;              

int ledPin = 13;               
int inputPin = 5;              

int val = LOW;                    
int lastval = 0;                
boolean ar=false;
void setup() {
  pinMode(ledPin, OUTPUT);     
  pinMode(inputPin, INPUT);     
  Serial.begin(9600);
}


void loop(){
  
  val = digitalRead(inputPin);                
  if (val == HIGH ) { if (!ar) {
    decompte++;                               
    digitalWrite(ledPin, HIGH);
    Serial.println("La lampe s'allume !");
    Serial.println(decompte);
    lastval = !lastval;
  }}  
  else { ar=false;
  Serial.println("La lampe s'eteint");
  }}

Bonjour et merci fifi82.

Après des millions de tentatives, j'ai enfin réussi à faire fonctionner le tout.

void loop(){
 int ReadDIR = digitalRead(DIR);
           if (ReadDIR == LOW && lastval == LOW)
           {
            Serial.println("Ca fonctionne");
            lastval = !lastval;
            digitalWrite(RELAIS2, LOW);
            delay(1000);
           }
           else if (ReadDIR == LOW && lastval == HIGH)
           {
           Serial.println("La lampe s'eteint");
           digitalWrite(RELAIS2, HIGH);
           lastval = !lastval; 
           delay(1000);
           }
}

J'ai acheté un capteur de proximité, beaucoup plus simple et j'ai compris que mes modules ne m'envoyés pas forcement les données que je pensais.
Là ça fonctionne parfaitement ! Je peux enfin allumé mon ruban led.

Merci de ton aide !!!