Go Down

Topic: [SOLUCIONADO] Interrupciones con entradas analógicas (Read 3022 times) previous topic - next topic

2duromen

Soy nuevo y tengo algunas dudas.

¿Es posible usar las interrupciones de Arduino con las entradas analógicas?. Es decir, tengo conectado un luxómetro en las entradas analógicas y quiero que este me recoja la medida cada vez que salte la interrupción cuando se active un sensor inductivo. Las dos me funcionan por separado pero cuando lo uno en el mismo código, el luxómetro no me recoge medidas. Espero haberme explicado bien.

Gracias de antemano.

surbyte

Muestra el código, tal vez estes haciendo algo mal.
Explicar te has explicado pero que no mida hasta que no salte la interrupción denota que algo has programado mal.

2duromen

Este es mi código:

Code: [Select]

int pin_sensorLux = A0; 
int SensorLuxValor=0;
volatile int indsensorCount = 0;
int configIndSensor = 3;

void setup() { 
Serial.begin(9600);
attachInterrupt(4, interrupt_sensorInd, FALLING); 
}

void loop() {
 
if ( indsensorCount > configIndSensor)
  {
    SensorLuxValor=analogRead(pin_sensorLux);
    Serial.println(SensorLuxValor);
    delay(1000);
  }
}

void interrupt_sensorInd()
{
 
  Serial.println(indsensorCount);
  indsensorCount++;
 
}



Gracias surbyte.

surbyte

Pequeños cambios y tienes tu solución


Code: [Select]
volatile unsigned int SensorLuxValor;
const byte pin_sensorLux = A0;  

bool PresentarAD = false;

void setup() {  
   Serial.begin(9600);
   attachInterrupt(4, interrupt_sensorInd, FALLING);  
}

void loop() {
  
if (PresentarAD )   {
    Serial.println(SensorLuxValor); 
    PresentarAD = false;
  }
}

void interrupt_sensorInd() {
  SensorLuxValor = analogRead(pin_sensorLux);
  PresentarAD = true;    // si el sensor inductivo se activa, habilita la lectura del AD
}


Nunca envies datos a un puerto serie desde una interrupción.
La interrupción debe ser breve. Veloz!!
cuando tu sensor inductivo pasa de 1 a 0 FALLING, activa la interrupción 
entonces lees el sensor con SensorLuxValor
activas un flag que llame PresentarAD o sea que se pone en 1
cuando en el loop PresentarAD esta en uno, imprime por el puerto serie el dato y luego pone en 0 el flag y no presenta mas.

2duromen

Muchas gracias surbyte, pero me sigue sin funcionar. He probado el código, activo el sensor inductivo y no me muestra el valor del luxómetro por el puerto serie. ¿Pueden ser problemas de la alimentación cuando junto los dos sensores?. He probado varias entradas analógicas y varias interrupciones por descartar problemas de los pines.

surbyte

Prueba con algo simple. Usa un interruptor en lugar del sensor magnético.
El interruptor conectalo de este modo. En la imagen se ven dos reed switches. Similares a tu sensor, y similar a un pulsador.


acabo de ver esto

Code: [Select]
attachInterrupt(4, interrupt_sensorInd, FALLING);  

aca pones INT 4 o sea.. que Arduino estas usando y en que pin colocas el sensor?
Aca parece estar tu problema

2duromen

Estoy usando Arduino Mega y lo conecto al pin 19, igual estoy haciéndolo mal. He probado más simple con el pulsador, y ahora sí que me recoge el valor del luxómetro, pero los valores son aproximados a cero, teniéndolo con una luz encima. Pero es que lo curioso que con el voltímetro, mido la salida de la señal del luxómetro y me dan aproximadamente 3,9 V, y cuando lo tapo me da valores cercanos 0V. En valores de tensión creo que me da bien. Pero por el monitor serie no me está sacando bien los valores. Voy a seguir investigando que puede pasar.
Muchas gracias surbyte por la ayuda.

2duromen

¿Necesitaría poner una tensión de referencia en Ioref? estoy conectando únicamente la señal de la salida del luxómetro al pin analógico directo, probando varios pines.

surbyte

No. No necesitas eso. Seguramente esta mal conectado tu luxómetro.
Porque no dibujas un esquema simple a mano alzada, y muetras las conexiones del luxómetro al MEGA?
Lo subes a www.tinypic.com y luego usas tags para imágenes. Si no sabe como, lee las normas del foro

Prueba mientras tanto esto. Asegúrate que el GND del luxómetro esta unido al GND del MEGA. Según tu código la salida esta conectada a A0.

Ahora me pongo a mirar y no veo cual puede ser tu luxómetro. Qué modelo es, o estas usando una LDR?

2duromen

Era ese el error!!. Estaba conectando solo la masa a la masa de la alimentación y ahora al conectarlo también al GND del Arduino ya me funciona. Estoy usando el modelo HD2021T de Delta OHM.
Muchas gracias.

surbyte


Go Up