Tengo:
- Un sensor IR SHARP que es capaz de medir distancias desde 20cms hasta 180cms. La idea es tratar de definir 4 rangos de medición (cerca/media/lejos/muy lejos) y que al detectar uno de los rangos sume un "1" a la cantidad correspondiente, pero que a la vez si otro rango no tiene mediciòn, que me muestre el ultimo dato registrado.
La idea:
-Sensor IR midiendo Distancia A (cerca), Distancia B (media) y Distancia C (lejos).
El Objetivo:
-Poder enviar los datos posteriormente a una tarjeta MicroSD para que los archive como un "LOG" y posibilitar la consulta según hora en el caso de agregar un RTC. En ese caso podría saber por ejemplo desde que se encendió el dispositivo, cuantas interacciones y en que rangos hubo entre unas horas determinadas.
Pretendo que muestre:
- IR: A=1 / B=5 / C=2
Cuando detecta nuevamente por ejemplo 2 interacciones en el rango "A", debiese mostrar consecutivamente:
-IR: A=2 / B=5 / C=2
-IR: A=3 / B=5 / C=2 (Sumando +1 al rango "A" y mostrando la última lectura de los otros rangos)
Mi Problema:
- No he encontrado la forma de que funcione de esta forma, aclaro que soy novato en el tema, no tengo mayores conocimientos de programación que los que me ha entregado la lógica de usar y probar una y otra vez con Arduino, pero llegué a esta traba que no me deja seguir con mi proyecto. Espero me puedan ayudar a entender las cadenas de datos, o si me pueden apoyar con un ejemplo en un sketch se los agradecería aún más ya que se hace mucho más simple probar a modificar con "algo hecho" que intentar construir sin tener conocimientos de programación.
Adjunto el código que estoy trabajando.
#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;
}
}
_20160930_PIR_TEST.ino (1.62 KB)