Leer Pulsos de una señal de dispositivo externo

Hola gente.. Como van?

A ver, se me presento otro problema, Me trajeron un termómetro para ver si podía leer cuando fuese alta o normal la temperatura. (Adjunto imagen del termómetro)

Partí de tomar la señal de los led, al conectarlo al Arduino la lectura es lógica inversa, siempre esta HIGH o 1. para cuando me mido la temperatura, al ser normal me genera un pulso de 0 o LOW, y al ser alto me genera dos pulsos LOW o 0 en intermitencia 010.

Ahora mi consulta es la siguiente...

const int pinIRd = 4; // señal conectada en la señal del led RGB verde
const int pinIRd2 = 13;  // señal conectada en la señal del led RGB roja
const int termometro = 2; // para encender el termometro desde arduino

int IRvalueD = 0;
int IRvalueD2 = 0;

void setup()
{
  Serial.begin(9600);
  pinMode(pinIRd, INPUT);
  pinMode(pinIRd2, INPUT);
  pinMode(termometro, OUTPUT);
}

void loop()
{
  digitalWrite(termometro, HIGH);
  Serial.print("\t NORMAL=");
  Serial.println(IRvalueD);
  Serial.print("\t FIEBRE=");
  Serial.println(IRvalueD2);
  Serial.println("-------------------");
  delay(4000);

  IRvalueD = digitalRead(pinIRd);
  IRvalueD2 = digitalRead(pinIRd2);
}*/

Con este código de prueba o test anterior me lee perfecto, 10 al estar bien, 0101, al ser alta y se mantiene en 11 si no se toma la temperatura.

Pero al pasarlo al código y combinar con la puerta que venia trabajando ( los que pudieron leer mi otro post entenderán), en general al llevarlo al código general no me funciona, incluso añadiéndolo como un protothread.

Ahora indagué y conseguí el tema del la función pulseIn() la use y la recepción de pulsos es inestable.. como que me tomara uno si, 2 no, y así..

Mi consulta es, hay algún otro método con el que pudiera leerlos pulsos generados por el termómetro con el Arduino?? leí por ahí algo de micros() no se por ahí me serviría o que otra solución pudieran ver?

Adjunto el código con pulseIn()

int pin = 13;
int pin2 = 4;
unsigned long duration;
unsigned long duration2;
const int termometro = 2;

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
  pinMode(pin2, INPUT);
  pinMode(termometro, OUTPUT);
}

void loop() {
  digitalWrite(termometro, HIGH);
  duration = 0;
  duration2 = 0;
  Serial.print("fiebre");
  duration = pulseIn(pin, LOW);
  Serial.println(duration);
  Serial.print("bien");
  duration2 = pulseIn(pin2, LOW);
  Serial.println(duration2);

o no se si podría mezclar los 2 scketch, 2 programas separados en uno solo.. se puede tener múltiples void loop?

Desde ya gracias por lo que puedan asesorarme, soy nuevo en el mundo

SALU2

P.D: trabajo con una placa Arduino Uno

Hi,

Creo que la instruccion si vaz a leer por ejemplo data que es enviada serial entonces necesitas usar la instruccion "shiftIn()". Esta te lee data que es enviada serial. Ahora la instruccion pulsin te da la duracion del pulso. Si el termometro tiene la option de enviar la temperatura serial enontoces debes de usar shiftin.

Hola @tauro0221 gracias por tu pronta respuesta.

Quizás me expresé mal, intente ver si leía la temperatura pero no pude.. Pudiera intentar con este función que me das y ver que onda.

Pero actualmente lo tengo conectado a pines del led RGB directo del termómetro y leo cuando enciende verde o rojo y es la señal que leo... pero no es estable la lectura.

Veré si pruebo esta opción que me dices con el shiftIn()

Hi,
Entonces si esta leyendo los leds entonces tienes que usar un pin por cada segmento y usar si es posible la senal que se usa para seleccionar los segmentos. Normalmentte los numberos le dan display usando el metodo multiplexer, En otras palabras ellos usan los segmentos de los digitos en paralelo y entonces seleccionan cual display vaz a desplegar. Ahora porque no usas el programa que lee las temperaturas usando un laser. Adjunto un link que explica como hacerlo. Yo use este metodo y lee las temperturas a una buena distancia.