ciao a tutti
scusatemi per il disturbo .
ho usato 2 led ir per rilevare gli ostacoli , allora io vorrei collegare questo 2 led sulle parete della mia stanza che quando qulcuno entra mi accende una lamapdina e quando esce mi spegne la lampadina, vorrei fare un modo mi memorizza una valore HIGH quando qualcuno entra e mi accende la lampada , e quando quella persona esce mi converte il valore HIGH in LOW.
solo che è importante anke la distanza perchè voglio che il mio sensore riesce a leggere fino a 130cm .
non lo so se puo funzionare con questo sensore.
spero che mi sono spiegato bene
il programma è questo :
#define irEmitter 13 // polo positivo emettitore - positive emitter pin
#define irReceiverN 12 // polo negativo ricevitore - negative receiver pin
int Ledvar = 2; // variabile del led
int soglia = 1000;
long ambient = 0;
long emission = 0;
boolean ledstatus = false; //variabile dell'if
long distance = 0;
long setDistance = 0;
long lightTime = 0;
int currentInit = 0;
//// Valori di setup - setup&tune values ////
long gain = 4; //gain crescita valore distanza
long maxRangeSetDistanceValue = 666666; //valore setDistance range massimo
long maxRange = 2000; //distanza range massimo in mm
int startDriftDistance = 15; //valore distanza inizio drift distanza
////////////////////////////////////////////void setup() {
Serial.begin(9600);
}void getDistance() {
if(currentInit == 0){if(digitalRead(irReceiverN) == LOW){ ambientLightCheck();}}
if(currentInit == 1){if(digitalRead(irReceiverN) == LOW){ reflectionLightCheck();}}
}void ambientLightCheck() {
ambient = micros() - lightTime;
init(1);
}void reflectionLightCheck() {
emission = micros() - lightTime;
distance = emission * (ambient / (ambient - emission));
setDistance = distance;
distance = map(distance, 0, maxRangeSetDistanceValue, 0, maxRange);
if(distance <= 0) distance = 0;
if(distance > startDriftDistance) distance = sqrt(distance) * gain;
Serial.println(distance);
emission = 0;
ambient = 0;
init(0);
}void init(int emitter) {
if(emitter == 0)digitalWrite(irEmitter, LOW);
if(emitter == 1)digitalWrite(irEmitter, HIGH);
lightTime = micros();
pinMode(irReceiverN, OUTPUT);
digitalWrite(irReceiverN, HIGH); //carico ricevitore di induttanza
pinMode(irReceiverN, INPUT);
digitalWrite(irReceiverN, LOW);
if(emitter == 1) currentInit = 1;
if(emitter == 0) currentInit = 0;
}void loop() {
getDistance();
if (distance > soglia & ledstatus == false )
ledstatus = true;
else if (distance > soglia & ledstatus == true )
ledstatus = false;if (ledstatus == true)
digitalWrite(Ledvar, HIGH);
else
digitalWrite(Ledvar, LOW);}
è normale che non si accende il mio led????
grazie