Hola "raika125", mira yo también estuve probando con ese sensor tratando de que me tomara 3 lecturas diferentes a 3 rangos determinados que yo fijaba. El primer inconveniente que me topé con este antojadizo sensor, es que demora varios segundos en "estabilizarse" un poco, luego que la superficie a la que apunta ojalá debe ser perpendicular al haz que emite el sensor, si no como que se marea en la lectura. Una vez revisado esto, me centré en la librería adecuada y aún así, pega saltos en la lectura (no es número cerrado nunca). te adjunto mi código para ver si te da alguna idea y si juntos podemos solucionar estos problemas, ya que haaartos dolores de cabeza me ha dado.
Algo que también mejora el desempeño del sensor es alimentarlo aparte del Arduino directamente para que lo tengas presente.
Te adjunto el link a mi post para que te hagas referencia donde está el código que he armado, ojalá postees aunque sea un OK ahí para mantener contacto ya que como ambos somos novatos, como no vamos a llegar a alguna parte entre 2 o no?
No me resulta poder armar una cadena de datos con lecturas de un sensor IR
(Si no es la forma de postear me disculpo, pero me cuesta aún el tema de los adjuntos y etc de este foro y estoy en proceso de aprender).
#include <SharpIR.h>
#define ir A0
#define model 20150
SharpIR sharp(ir, 15, 93, model);
int ledrojo=13;
int lednaranja=12;
int ledverde=11;
int led;
int irState = LOW;
const int LEDpir = 10;
const int PIRPin = 2;
int pirState = LOW;
int val = 0;
int contador1=0;
int contador2=0;
int contador3=0;
int estadoAnterior = 0;
void setup() {
Serial.begin(9600);
pinMode (ir, INPUT);
pinMode(ledrojo, OUTPUT);
pinMode(lednaranja, OUTPUT);
pinMode(ledverde, OUTPUT);
pinMode(PIRPin, INPUT);
pinMode(LEDpir, OUTPUT);
}
void loop() {
irSharp_detection();
pir_detection();
}
void irSharp_detection()
{
int dis=sharp.distance();
if (dis>150){
Serial.print("C=");
Serial.println(contador3++);
irState = HIGH;
digitalWrite(ledverde,LOW);
digitalWrite(lednaranja,LOW);
digitalWrite(ledrojo,HIGH);
}
if (dis<140&&dis>60){
Serial.print("B=");
Serial.print(contador2++);
irState = HIGH;
digitalWrite(ledverde,LOW);
digitalWrite(lednaranja,HIGH);
digitalWrite(ledrojo,LOW);
}
if (dis<50&&dis>30){
Serial.print("A=");
Serial.print(contador1++);
irState = HIGH;
digitalWrite(ledverde,HIGH);
digitalWrite(lednaranja,LOW);
digitalWrite(ledrojo,LOW);
}
else
{
digitalWrite(ledverde, LOW);
digitalWrite(lednaranja, LOW);
digitalWrite(ledrojo, LOW);
if (irState == HIGH)
{
//Serial.println("Stop Sensor");
irState = LOW;
//contador=0;//Reset Counter
}
}
switch(led){
case 1:
digitalWrite(ledverde,HIGH);
break;
case 2:
digitalWrite(lednaranja,HIGH);
break;
case 3:
digitalWrite(ledrojo,HIGH);
break;
}
}