[RESOLU] détecteurs mutiples

Bonjour,

malgré mes recherches, je n'ai rien trouvé sur le sujet sur lequel je bute.

Pour rappel, je suis débutant avec un très grand D majuscule, même si j'ai de bonnes bases en électronique et en programmation, mais pas forcément sur "c".

Cet après midi, j'ai constaté qu'un CPRC 5000 est très sensible à la lumière ambiante. Je sais, c'est marqué partout ou presque mais je ne l'ai vu qu'après...

J'ai donc décidé de faire une mesure de la lumière à l'aide d'une LDR afin d'adapter, en temps réel, le niveau du signal délivré par l'infrarouge. (je ne sais pas si je suis clair là...)

En bref, si un actionneur doit réagir, en plein jour, à partir d'une valeur 500 rendue par l'infrarouge, quand il fait plus sombre, ce même actionneur devrait réagir à un seuil 300 par exemple.

Fort bien, sauf que... mon code me renvoie systématiquement des valeurs fantaisistes, comme si les deux capteurs se neutralisaient.

Voici ce code:

//definition des broches et variables
int ldrPin  = A2; 
int tcrtPin = A1;
int ledPin  = 13;
int valLDR  = 0;
int valTCRT = 0;

void setup() {
  analogReference(DEFAULT);       //Analog Reference of 5V is default, I know not needed.

  pinMode(ledPin, OUTPUT);            //definit ledPin en sortie
  pinMode(tcrtPin, INPUT);            //Definit tcrtPin en entree
  pinMode(ldrPin , INPUT);            //definit ldrPin en entree

  Serial.begin(9600);                 //vitesse de communication serial
}

void loop() {
  
  valLDR  = analogRead(ldrPin);   //definit valLDR
  valTCRT = analogRead(tcrtPin);  //definit valTCRT

  if(valTCRT < 1000) digitalWrite(ledPin, HIGH);   //si obstacle, led s'allume
  else digitalWrite(ledPin, LOW);                  // sinon, reste eteinte

  //affichage moniteur serie
  Serial.print("LDR: ");
  Serial.println(analogRead(valLDR));
  Serial.print("infrarouge: ");
  Serial.println(analogRead(valTCRT)) ;
  Serial.print("  "); 
  delay(150);
}

quelqu'un a une idée ? (code rectifié, j'avais des erreurs de nom de variables)

bonjour,
ca veut dire quoi ca?
tu récupère les valeurs déjà ici

  valLDR  = analogRead(ldrPin);   //definit valLDR
  valTCRT = analogRead(tcrtPin);  //definit valTCRT

et après tu fais ca

 //affichage moniteur serie
  Serial.print("LDR: ");
  Serial.println(analogRead(valLDR));
  Serial.print("infrarouge: ");
  Serial.println(analogRead(valTCRT)) ;
  Serial.print("  "); 
  delay(150);
//definition des broches et variables
int ldrPin  = A2; 
int tcrtPin = A1;
int ledPin  = 13;
int valLDR  ;
int valTCRT ;

void setup() {


  pinMode(ledPin, OUTPUT);            //definit ledPin en sortie
  pinMode(tcrtPin, INPUT);            //Definit tcrtPin en entree
  pinMode(ldrPin , INPUT);            //definit ldrPin en entree

  Serial.begin(9600);                 //vitesse de communication serial
}

void loop() {
  
  valLDR  = analogRead(ldrPin);   //definit valLDR
  valTCRT = analogRead(tcrtPin);  //definit valTCRT

  if(valTCRT < 1000) digitalWrite(ledPin, HIGH);   //si obstacle, led s'allume
  else digitalWrite(ledPin, LOW);                  // sinon, reste eteinte

  //affichage moniteur serie
  Serial.print("LDR: ");
  Serial.println(valLDR);
  Serial.print("infrarouge: ");
  Serial.println(valTCRT) ;

  delay(150);
}

si je comprends bien, en faisant çà, je récupère deux fois la valeur, d'où le télescopage ?

Serial.println(analogRead(valLDR));

Serial.println(analogRead(valTCRT)) ;

tu lis une valeur analogique que tu as déjà lu.
d'après toi, ca fait quoi? :grin:

je suis sur de la connaitre :grin:

en attendant, après essai, ça fonctionne nettement mieux :slight_smile:

merci

Euh l'erreur c'est pas de lire 2 fois l'entrée c'est surtout qu'il y a gourance entre le numéro de la pin et le nom de la variable qui contient le résultat de la lecture précédente.

//affichage moniteur serie
  Serial.print("LDR: ");
  Serial.println(analogRead(valLDR));   //<---- valLDR ce n'est pas la pin de la LDR c'est le résultat de la lecture précédente
  Serial.print("infrarouge: ");
  Serial.println(analogRead(valTCRT)) ;  //<---- valTCRT ce n'est pas la pin de la TCRTc'est le résultat de la lecture précédente
  Serial.print("  ");

Par ce que à la limite ceci aurait fonctionné (même si effectivement la lecture est redondante)

//affichage moniteur serie
  Serial.print("LDR: ");
  Serial.println(analogRead(ldrPin));   //<---- Là c'est la pin de la LDR 
  Serial.print("infrarouge: ");
  Serial.println(analogRead(tcrtPin)) ;  //<---- Là c'est la pin de la TCRT
  Serial.print("  ");