SOLUCIONADO -- Duda con los tiempo de los codigos

Hola de nuevo.

Esto de reencontrarse con la programación después de 20 años en silencio, a veces se hace cuesta arriba.
Tengo una duda de novata. La cuestión es simple.

¿Que haceis cuando quereis interrumpir el proceso de lectura del Loop para que atienda a una modificación de algun parametro desde fuera?

Por ejemplo:

Tenemos un código largo del cual estamos tomando lecturas de sondas y encendiendo o apagando cosas en función de estas.
Los condicionales que hacen encender y apagar las cosas los regulamos con potenciometros, los cuales ponemos en un LCD el valor que tienen en ese momento.

¿Como se hace, si queremos modificar el valor de potenciometro, para que el código se detenga donde esté y atienda a nuestra modificación?

No se si me explico

Algo como si aprieto este botón para de leer y atiende a la modificación que estoy haciendo.

Seguro que se puede hacer, sin la necesidad de tener dos Arduinos conectados entre si.
Uno de ellos corriendo continuamente el Loop y otro esperando la modificación de los valores.

Muchas gracias.

Igual me equivoco, pero, ¿eso no se hace con interrupciones?

Lo puedes hacer sin problemas mediante la conversión automática del ADC.

Para ello la debes de habilitar en el bit ADATE del registro ADCSRA y posteriormente en el registro ADCSRB configurarla para que se produzca mediante la interrupción externa INT0, cada vez que pulses el botón que deberá estar en dicha entrada.

De esa forma, cada vez que pulses el botón tendrás la lectura del potenciómetro, mediante el ADC.

Saludos.

¿Cómo vas a modificar los parámetros? Básicamente se tratará de escuchar un determinado evento en uno o varios puntos del loop y cuando se produzca ese evento llamar a una función que se encargue de leer el valor a modificar.
Por ejemplo, si utilizáramos el puerto serie para modificar parámetros, podemos incluir uno o varios
if (Serial.available) leeparametro();
y desde dicha funcion leer el valor y modificar el parámetro correspondiente.

eso que nesecitas es la interrupcion. Las hay por hardware o por software. Estas ultimas son disparadas por cambios internos, como el desbordamiento de un contador, el fin de conversion del adc etc.
para tu caso no es lo mejor porque lo unico que lograras es que no alcance a escribir que ya llama a la imnterrupcion.
Lo mejor es el adc continuo y un timer cada x milisegundos que haga todas las lecturas y escrituras de variables.

Os agradezco un montón a todos vuestras respuestas.
Lo único que he encontrado es esto:

http://arduino.cc/es/Reference/AttachInterrupt
No se si atiende a lo mismo que me decis o no me sirve .

En cuanto a al comentario de Iburol:

Lo puedes hacer sin problemas mediante la conversión automática del ADC.

Para ello la debes de habilitar en el bit ADATE del registro ADCSRA y posteriormente en el registro ADCSRB configurarla para que se produzca mediante la interrupción externa INT0, cada vez que pulses el botón que deberá estar en dicha entrada.

De esa forma, cada vez que pulses el botón tendrás la lectura del potenciómetro, mediante el ADC.

Saludos.

Si me lo podeis explicar para tontos os lo agradecería en el alma.
No se que es “ADATE” “ADCSRA” “ADCSRB” “ADC”

Pensaba que la dimensión que te producía al no enterarte de nada, después de ver “La bruja de Blair” no volvería a existir, pero acaba de suceder.
¿Que serán todas esas palabras?

Gracias

Katynga:
Si me lo podeis explicar para tontos os lo agradecería en el alma.
No se que es "ADATE" "ADCSRA" "ADCSRB" "ADC"

Pensaba que la dimensión que te producía al no enterarte de nada, después de ver "La bruja de Blair" no volvería a existir, pero acaba de suceder.
¿Que serán todas esas palabras?

Gracias

Son registros del procesador, busca en la hoja de datos del micro que usas y al cambiar el valor modifica su comportamiento.
Esto está "oculto" por el ide arduino a un nivel muy alto de programación para principiantes.
Cuando haces Serial.begin(9600); lo que hace es configurar los registros internos para que se use el harware del puerto serial del micro.

Como estás haciendo algo mas complejo debes tocar estos registros.

aca tienes para ver como cambia la velocidad de lectura usando analogRead y otra por interrupcion.: Arduino analog measurements :: Electronic Measurements

aca extraido del la datasheet del atmega328:

23.3 Starting a Conversion
A single conversion is started by disabling the Power Reduction ADC bit, PRADC, in ”Minimizing
Power Consumption” on page 42 by writing a logical zero to it and writing a logical one to the
ADC Start Conversion bit, ADSC. This bit stays high as long as the conversion is in progress
and will be cleared by hardware when the conversion is completed. If a different data channel is
selected while a conversion is in progress, the ADC will finish the current conversion before performing
the channel change.
Alternatively, a conversion can be triggered automatically by various sources. Auto Triggering is
enabled by setting the ADC Auto Trigger Enable bit, ADATE in ADCSRA. The trigger source is
selected by setting the ADC Trigger Select bits, ADTS in ADCSRB (See description of the ADTS
bits for a list of the trigger sources). When a positive edge occurs on the selected trigger signal,
the ADC prescaler is reset and a conversion is started. This provides a method of starting conversions
at fixed intervals. If the trigger signal still is set when the conversion completes, a new
conversion will not be started. If another positive edge occurs on the trigger signal during conversion,
the edge will be ignored. Note that an Interrupt Flag will be set even if the specific
interrupt is disabled or the Global Interrupt Enable bit in SREG is cleared. A conversion can thus
be triggered without causing an interrupt. However, the Interrupt Flag must be cleared in order to
trigger a new conversion at the next interrupt event.

Using the ADC Interrupt Flag as a trigger source makes the ADC start a new conversion as soon
as the ongoing conversion has finished. The ADC then operates in Free Running mode, constantly
sampling and updating the ADC Data Register. The first conversion must be started by
writing a logical one to the ADSC bit in ADCSRA. In this mode the ADC will perform successive
conversions independently of whether the ADC Interrupt Flag, ADIF is cleared or not.

Ok. Maxid le pasaré un vistazo al enlace que me envías.

Espero comprenderlo con los ejemplos que ponen en la web.

¿Sabes de algún sitio donde pueda ver ejemplos de este tipo de código?

¿Y que diferencia hay entre los link´s que me envias y este: http://arduino.cc/es/Reference/AttachInterrupt?