No me resulta poder armar una cadena de datos con lecturas de un sensor IR

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)

El código debe verse.

Lee las normas, mira como se postea un código usando tags.
Ve a More (abajo a la derecha), click, luego Modify y estas en modo EDICION.
**Selecciona todo el código y click en </> arriba del emoticon **

Gracias surbyte por la corrección desconocía como hacerlo, si molestó mi error a alguien me disculpo con los usuarios de este foro.

¿Alguien con alguna idea de como hacer que funcione esta cosa?

Hola.
No tengo mucho tiempo ahora, pero más o menos los tiros creo que deberían ir por aquí:

void irSharp_detection()
{
int dis=sharp.distance();

digitalWrite(ledverde, LOW);
digitalWrite(lednaranja, LOW);
digitalWrite(ledrojo, LOW);

if (dis>150){
  contador3++;
  digitalWrite(ledrojo,HIGH);
  detectionShow();
}
else if (dis<140&&dis>60){
  contador2++;
  digitalWrite(lednaranja,HIGH);
  detectionShow();
}
else if (dis<50&&dis>30){
  contador1++;
  digitalWrite(ledverde,HIGH);
  detectionShow();
}
else
  {
    if (irState == HIGH)
    {
      //Serial.println("Stop Sensor");
      irState = LOW;
      //contador=0;//Reset Counter
    }
  }
} 

void detectionShow(void) {
  irState = HIGH; //esto lo he pasado aquí porque se repetía en los mismos sitios en los que se debe actualizar contador
  Serial.print("IR: A=");
  Serial.print(contador1);
  Serial.print(" / B=");
  Serial.print(contador2);
  Serial.print(" / C=");
  Serial.println(contador3);
}

Por favor, tienes otra persona con el mismo problema, intenta trabajar en paralelo con el.

Gracias Surbyte!!!!