Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Curso de Arduino – Uso del pin AREF y el mandato anlogReference

Por Félix Maocho
21/12/2015

Objetivo de este post

A la izquierda del último pin digital, el pin 13 aparece en Arduino UNO dos pines más, el primero es el pin marcado como GND contracción de la palabra inglesa “ground” (suelo o tierra) o lo que es lo mismo la entrada de cierre de un circuito con voltaje 0.

El siguiente pin situado a la izquierda viene marcado como AREF y si buscamos en el manual veremos que es el acrónimo de Analog REFerence (referencia analógica, lo cual no indica mucho más. Para eso para explicar la utilidad del pin AREF y el mandato asociado “analogReference· es a lo que dedicamos este post.

La existencia de pin AREF y del mandato “analogReferenca”, se deben a la necesidad que a vece se plantes de tener una lectura de los sensores de extrordinaria prrecisión. Como indicamos en el capítulo dedicado a las entradas analógicas, los sensores  son capaces de traducir una medida de una manifestación física cualquiera, sonido, luz, distancia, temperatura, etc. en una corriente electrica cuyo voltaje varía proporcionalmente a la intensif¡dad de lo que miden. Por su parte Arduino el capaz de comparar el voltaje que recibe por una entrada analógica y compararla con un voltaje de 5v y en funcion de eso generar un valor comprendido entre 0 y 1024, que ya podemos utilizar en nuestro programa para mandar hacer a Arduino lo que consideremos v.

El problema es que en funcion del sensor que utilicemos y la manofestación física que queramos monitorizar se produciran un rango de voltajes determinados. Por ejemplo si con un termómetro pensado para medir la temperatura de la calle que puede variar d entre -25º y 75º deseamos medir la temperatura del cuerpo humano  que como mucho varía entre los 34º y loa 48º  o podremos hacerlo, pero el problema es que el voltaje 0v  querrá decir que se miden -25º y el voltaje 5v 75º por lo que el rango de los 5 voltios mide 100º o lo que es lo mismo a 1º de remperatura es equivalente a 0,05v, por un lado, y por otro 1024 unidades equivales a 5v luego a un grado le correponden 200 unidades.

Primer problema que se nos plantea, el termómetro utilizado lo mas que mide son grados centigrados, es decir con el podremos saber si un señor esta a 36º o a 37º pero no si esta a 36,6º, segundo problema  34º minimos de una persona viva le corresponde en nuestro cas,o un voltaje aproximad de (0,05 x (25 +34) =2,95 volts  aproximadamete 590 unidades y los 48º cmtigrados ( 0,05 x( 25 +48) =3,65 Volts aproximadammente 730 unidades.

Observen que el problema en nuestro caso reside en que dificilmente un termómetro pensado para medir la temperatura de la calle, marcará con precision las décinmas de temperatura pero por otro lado de las 1024 fracciones que nos puede proporcionalr Arduino al final terminamos utilizando una gana muy pequeña. Tememos pues que por un lado elegir un sensor no solo que mida los que deseamos medir sino que lo mis da en un rango y precisión adecuado a lo que va a medir.

Evidentemente para medir la temperatura del cuerpo humano, es conveniente utilizar como sensor un termómetro clínico, que sólo medirá temperaturas dentro del rango adecuado, pero con precisión de décimas, pero por el otro lado, convendría que los 1024 niveles que mide Arduino, se repartieran entre los voltajes máximos y mínimos que por lógica podemos recibir.

Mejoramiento de la precisión de las lecturas analógicas

Vamos a repasar antes para que valían las entradas analógicas. En el post anterior vimos este montaje que con su software que pongo a continuación, media el voltaje de un circuito mediante una derivación hecha con el cable amarillo a un pin analógico. EL voltaje que aumenta o disminuye según girara el potenciómetro, encendiendo un led cada 0,5 voltios o sea que 5 leds encendidos supriman un voltaje entre 2,5v y 3v. (Si tienes alguna duda sobre su funcionamiento mira el post dedicado a las Salidas Analógicas)

Pin analógico

/*
Prueba de pin Analógico
Voltímetro. Cada led encendido equivale a 0,5 volts
por el circuito que contiene el potenciómetro
Este ejemplo es de dominio público
*/

// Declaración de variables
int tension =0; // variable que almacena el voltaje (de 0 a 1023)
espera1 =1000; // milisegundos de espera para dar tiempo a hacer la lectura
// indicadores de estado de los Led 0=apagado 1=encendido
int encendido2 =0;
int encendido3 =0;
int encendido4 =0;
int encendido5 =0;
int encendido6 =0;
int encendido7 =0;
int encendido8 =0;
int encendido9 =0;
int encendido10 =0;
int encendido11 =0;

void setup() {
// incializa los pines 2 a 11 como OUTPUT
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}

void loop() {
tension = analogRead(A0); // 1º) realizar la lectura por el pin A0
// 2º) Encender un led por cada 100 unidades de tension
if tension > 100 { // si es mayor que 100 (0.5v)
digitalWrite(2, HIGH);
encendido2 =1; // led del pin2 como encendido
}
if tension > 200 {
digitalWrite(3, HIGH);
encendido3 =1;
}
if tension > 300 {
digitalWrite(4, HIGH);
encendido4 =1;
}
if tension > 400 {
digitalWrite(5, HIGH);
encendido5 =1;
}
if tension > 500 {
digitalWrite(9, HIGH);
encendido9 =1;
}
if tension > 900 {
digitalWrite(10, HIGH);
encendido10 =1;
}
if tension > 1000 {
digitalWrite(11, HIGH);
encendido8 =11;
}
// Acabados de encender los led que marcan cada uno 0,5v
delay(espera1); // 3º) esperar para que se capte la lectura
// 4º) Apagar los led encendidos
if encendido2 =1; // si esta encendido el led 2, lo apagamos
digitalWrite(2, LOW);
encendido2 =0; // ponemos el indicador en apagado
}
if encendido3 =1;
digitalWrite(3, LOW);
encendido3 =0;
}
if encendido4 =1;
digitalWrite(4, LOW);
encendido4 =0;
}
if encendido5 =1;
digitalWrite(5, LOW);
encendido5 =0;
}
if encendido6 =1;
digitalWrite(6, LOW);
encendido6 =0;
}
if encendido7 =1;
digitalWrite(7, LOW);
encendido7 =0;
}
if encendido8 =1;
digitalWrite(8, LOW);
encendido8 =0;
}
if encendido9 =1;
digitalWrite(9, LOW);
encendido9 =0;
}
if encendido10 =1;
digitalWrite(10, LOW);
encendido10 =0;
}
if encendido11 =1;
digitalWrite(11, LOW);
encendido11 =0;
}
} // Fin de la funcion loop

Cómo mejorar la precisión de este aparato.

La entrada analógica nos genera un valor comprendido entre 0 y 1023 que es proporcional al voltaje, de modo que si el voltaje es 0v, el valor que obtenemos es 0, mientras que si el voltaje es 5v, el valor será 1023 unidades, lo que hace que aproximadamente por cada 0,5v, aumente 100 unidades la respuesta.

Pero, claro está, tal como está construido este circuito, el voltaje que reciba el potenciómetro nunca será 5v porque la resistencia de 220 Ω reducirá la tensión que llega al potenciómetro, por lo tanto,una parte de muestro contador que media de 0 a 5 voltio no se va a utilizar nunca.

En el propio post dimos una solución, hacer que cada led se encienda no a los 0,5v, sino a los 0,4v, de modo que solo podremos medir voltajes sólo de 0 a 4 voltios, pero con mayor precisión. Sin embargo, lo que no podemos es evitar con este sistema, es desaprovechar una parte de la escala de 1024 valores que genera Arduino. Si medimos como mucho cuatro voltios, nunca recibiremos respuestas superiores a 800 unidades, con lo que estamos desaprovechando un 20% de su precisión, pero si el voltaje máximo fuera de solo un voltio, solo aprovechamos unas 200 unidades desaprovechando un 80%

Pudiera ocurrir, que si necesitamos mucha precisión en la lectura, deseemos tener los 1024 niveles de respuesta repartidos, no entre O y 5 voltios que es lo estándar, sino entre 0 y 4 voltios en el primer caso o entre 0 y 1 voltio, ¿Como lo podemos conseguirlo?

Utilidad del pin AREF y el mandato “analogReference(EXTERNAL)”

Para eso está el pin AREF, y el mandato analogReference(EXTERNAL). El reparto de los 1024 niveles se hace en proporción del voltaje de la corriente que entra por AREF, si esta es de 4 voltios los 1024 niveles se reparten entre o y 4 voltios y si entra 1v. se reparten entre 0 y un voltio, por tanto mediante este mandato la lectura será mucho más fina que con la comparación estándar.

Un ejemplo

Sé, que por más que he intentado explicarlo esta explicación es un poco confusa, pero espero que un ejemplo pueda aclararla. Sólo necesito cambiar un mínimo tanto el hardwar como el programa. Veamos como queda el muevo montaje.

Pin AREF

Modificaciones en el hardware

  • Como ves, la única diferencia con el montaje anterior, es un cable verde que esta en el lado izquierdo de la imagen, que conecta el cable que entra en el potenciómetro con el pin AREF.
  • Este cable permite llevar a AREF el máximo voltaje que entra en el potenciómetro y que nos valdrá como referencia a la hora de comparar el voltaje medido en AO, de modo que si A0 no detecta voltaje, seguirá dando el valor 0, pero si el potenciómetro fuera de resistencia 0Ω el voltaje saliente sería igual al voltaje entrante por lo que el valor generado sería 1023 unidades.

El software también lo tenemos que cambiar un poquito. Quedara así:

/*
Prueba de pin AREF
Mide la proporcion de voltaje que deja pasar el potenciómetro.
Se enciende una luz por cada 10% del votaje inicial que queda
una vez atravesado el potenciómetro
Este ejemplo es de dominio público
*/

// Declaración de variables
int primer_loop =1; // control del primer loop 1 = primero 2= los siguientes
int tension =0; // variable que almacena el voltaje (de 0 a 1023)
espera1 =1000; // milisegundos de espera para dar tiempo a hacer la lectura
// indicadores de estado de los Led 0=apagado 1=encendido
int encendido2 =0;
int encendido3 =0;
int encendido4 =0;
int encendido5 =0;
int encendido6 =0;
int encendido7 =0;
int encendido8 =0;
int encendido9 =0;
int encendido10 =0;
int encendido11 =0;

void setup() {
// incializa los pines 2 a 11 como OUTPUT
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
// Compara entradas analógicas con el voltaje del pin AREF
analogReference(EXTERNAL); }

void loop() {
if primera_vez =1{ // Cosas que solo se hacen la primera vez
tension = analogRead(A0);
tension = analogRead(A0);
primera_vez =2;
}
tension = analogRead(A0); // 1º) realizar la lectura por el pin A0
// 2º) Encender un led por cada 100 unidades de tension
if tension > 100 { // si es mayor que 100 (0.5v)
digitalWrite(2, HIGH);
encendido2 =1; // led del pin2 como encendido
}
if tension > 200 {
digitalWrite(3, HIGH);
encendido3 =1;
}
if tension > 300 {
digitalWrite(4, HIGH);
encendido4 =1;
}
if tension > 400 {
digitalWrite(5, HIGH);
encendido5 =1;
}
if tension > 500 {
digitalWrite(9, HIGH);
encendido9 =1;
}
if tension > 900 {
digitalWrite(10, HIGH);
encendido10 =1;
}
if tension > 1000 {
digitalWrite(11, HIGH);
encendido8 =11;
}
// Acabados de encender los led que marcan cada uno 0,5v
delay(espera1); // 3º) esperar para que se capte la lectura
// 4º) Apagar los led encendidos
if encendido2 =1; // si esta encendido el led 2, lo apagamos
digitalWrite(2, LOW);
encendido2 =0; // ponemos el indicador en apagado
}
if encendido3 =1;
digitalWrite(3, LOW);
encendido3 =0;
}
if encendido4 =1;
digitalWrite(4, LOW);
encendido4 =0;
}
if encendido5 =1;
digitalWrite(5, LOW);
encendido5 =0;
}
if encendido6 =1;
digitalWrite(6, LOW);
encendido6 =0;
}
if encendido7 =1;
digitalWrite(7, LOW);
encendido7 =0;
}
if encendido8 =1;
digitalWrite(8, LOW);
encendido8 =0;
}
if encendido9 =1;
digitalWrite(9, LOW);
encendido9 =0;
}
if encendido10 =1;
digitalWrite(10, LOW);
encendido10 =0;
}
if encendido11 =1;
digitalWrite(11, LOW);
encendido11 =0;
}
} // Fin de la funcion loop

Modificaciones en el software

Las modificaciones que he efectuado en el programa son la siguientes:

  • En la Definición de variables – He añadido la variable “primer_loop” para controlar las acciones que hay que hacer únicamente durante el primer loop que se ejecuta, algo que ocurre muy frecuentemente, tener que hacer algo la primera vez y que no hay que hacer nunca más.
  • En la Función setup – He añadido el mandato “analogReference” con el parámetro “EXTERNAL” que indica que las lecturas analógicas se comparen con el voltaje de referencia que se mide en el pin AREF
  • En la Función loop – He añadido un mandato “if” controlado por el valor de la variable “primer_loop”, que solamente durante el primer loop, hace las siguientes cosas, dos lecturas del pin AO y cambiar le valor de =primer_loop” para no volverlo a hacer. Estas lecturas perdidas se hacen porque le mandato “analogReference”, no es lo mejor que tiene Arduino y con frecuencia, quedan en el interior de Arduino corriente parásitas, que pueden hacer que la primera lectura tenga errores. Por ello se aconseja como norma, cada vez que se cambie la referencia de comparación de las enradas analógicas de Arduino, hacer dos lecturas previas cuyos valores no se toman en cuenta. A partir de la tercera lectura, el sistema ya está suficientemente estabilizado para considerar que el valor devuelto es correcto.

Observen

El “aparato” diseñado ha dejad de ser un voltímetro, puesto que ahora cada led pasa de indicar 0,5v para indicar que es el 10% de la corriente que entra en el potenciómetro. Como la corriente que llega es aproximadamente, 3,75 voltios cada luz encendida representa en este caso 0,357 voltios de modo que si antes 5 ledz encendidos indicaban un voltaje entre 2,5 y 3 voltios, ahora es un voltaje comprendido entre el 50% y el 6% del voltaje que entra al potenciómetro, es decir aproximadamente de 1,875v u 2,250v, luego tenemos una lectura más precisa.

Sintaxis de “analogReference”

El mandato se escribe analogReference(PARAMETRO); siendo PARAMETRO uno de los valores permitidos, y no emite ninguna respuesta pero internamente prepara Arduino para comparar las entradas analógicas como indique el PARAMETRO

“analogReference” admite los siguientes parámetros en Arduino.:

  • (DEFAULT) – Referencia analógica por defecto, de 5 voltios en Arduino UNO, (puede ser de 3,3v en algunos Arduino compatibles)
  • (INTERNAL) – Donde compara con 1,1 voltios la mayoría (pero no en todas las tarjetas compatibles Arduino
  • (INTERNAL1V1) – Para comparar con 1.1v en Arduino Mega solamente
  • (INTERNAL2V56) – Para comparar con 2.56v en Arduino Mega solamente
  • (EXTERNAL) – Para comparar con la tensión aplicada al pin AREF (0 a 5V solamente).

Cómo cambiar la referencia en medio de un programa

A continuación vamos a hacer un cambio en el programa escrito anteriormente de forma que observemos como podemos por programa cambiar la referencia para las lecturas analógicas. Arduino UNO puede utilizar el parámetro INTERNAL que hace la comparación con 1,1 volts, pero con el programa anterior no tengo forma de garantizar que la lectura del circuito de salida del potenciómetro, no pueda ser menor que 1,1 voltio y si es mayor estoy poniendo en peligro la placa , razón por la cual no la voy a utilizar en este ejemplo, pero se utilizaría de forma similar.

/*
Prueba de lectura entradas analogicas con cambio de referencia
Mide en las vueltas pares el porcentaje de voltaje que deja pasar el
potenciometro (un led encendido equivalente al 10% del voltaje)
y en las vueltas impares el voltaje (un led encendido eauivale a 0,5V
Este ejemplo es de dominio público
*/

// Declaración de variables
int par_impar =0; // control de vuelta par 0 = par 1 = impar
int tension =0; // variable que almacena el voltaje (de 0 a 1023)
espera1 =1000; // milisegundos de espera para dar tiempo a hacer la lectura
// indicadores de estado de los Led 0=apagado 1=encendido
int encendido2 =0;
int encendido3 =0;
int encendido4 =0;
int encendido5 =0;
int encendido6 =0;
int encendido7 =0;
int encendido8 =0;
int encendido9 =0;
int encendido10 =0;
int encendido11 =0;

void setup() {
// incializa los pines 2 a 11 como OUTPUT
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}

void loop() {
if par_impar =0{ // Loop par
analogReference(EXTERNAL); // Compara con voltaje de AREF
par_impar =1;
}
else { // Loop impar
analogReference(DEFAULT); // Compara con 5 voltios
par_impar =0;
}
tension = analogRead(A0); // hace dos lecturas perdidas
tension = analogRead(A0);
tension = analogRead(A0); // 1º) realizar la lectura por el pin A0
// 2º) Encender un led por cada 100 unidades de tension
if tension > 100 { // si es mayor que 100 (0.5v)
digitalWrite(2, HIGH);
encendido2 =1; // led del pin2 como encendido
}
if tension > 200 {
digitalWrite(3, HIGH);
encendido3 =1;
}
if tension > 300 {
digitalWrite(4, HIGH);
encendido4 =1;
}
if tension > 400 {
digitalWrite(5, HIGH);
encendido5 =1;
}
if tension > 500 {
digitalWrite(9, HIGH);
encendido9 =1;
}
if tension > 900 {
digitalWrite(10, HIGH);
encendido10 =1;
}
if tension > 1000 {
digitalWrite(11, HIGH);
encendido8 =11;
}
// Acabados de encender los led que marcan cada uno 0,5v
delay(espera1); // 3º) esperar para que se capte la lectura
// 4º) Apagar los led encendidos
if encendido2 =1; // si esta encendido el led 2, lo apagamos
digitalWrite(2, LOW);
encendido2 =0; // ponemos el indicador en apagado
}
if encendido3 =1;
digitalWrite(3, LOW);
encendido3 =0;
}
if encendido4 =1;
digitalWrite(4, LOW);
encendido4 =0;
}
if encendido5 =1;
digitalWrite(5, LOW);
encendido5 =0;
}
if encendido6 =1;
digitalWrite(6, LOW);
encendido6 =0;
}
if encendido7 =1;
digitalWrite(7, LOW);
encendido7 =0;
}
if encendido8 =1;
digitalWrite(8, LOW);
encendido8 =0;
}
if encendido9 =1;
digitalWrite(9, LOW);
encendido9 =0;
}
if encendido10 =1;
digitalWrite(10, LOW);
encendido10 =0;
}
if encendido11 =1;
digitalWrite(11, LOW);
encendido11 =0;
}
} // Fin de la funcion loop

Modificaciones en el software

Las modificaciones que he efectuado en el programa son la siguientes:

  • En la Definición de variables – He sustituido la variable “primer_loop” por la variable “par_impar” que controla los loop pares y los loop impares. Este “truco” es muy utilizado cuando queremos hacer varios tareas diferentes aparentemente al mismo tiempo, en nuestro caso medir el voltaje que sale del potenciómetro y medir el % de voltaje que deja pasar el potenciómetro. Aunque Arduino es un procesador monotarea, cuando ejecuta rápidamente los loops, puede asimilar que hace varios trabajos a la vez. Esto no es mas que hacer por programación lo que muchos PC con procesadores de un sólo núcleo, hacen internamente, podemos pensar que permiten escribir un texto y oír música simultáneamente, pero el PC internamente dedicando unos ciclos de procesador exclusivamente a atender el procesador de textos y otros a procesar música, solo que lo hace tan rápido que el efecto que nos hace es que es algo simultáneo, de ahí la importancia de la velocidad de procesado, el uso del mandato “delay” retarda el tiempo de procesado del loop y puede hacer que la ficción de simultaneidad se venga abajo, algo que tenemos que tener en cuenta cuando utilicemos este artificio.
  • En la Función setup – He eliminado el mandato “analogReference(EXTERNAL)” pues el nivel de referencia lo indicare en a función “loop”
  • En la Función loop – He cambiado el mandato “if” que controlaba el primer loop por otro que controla los loop pares e impares. En el loop par, el mando comparar los valores leídos en las entradas analógicas con el voltaje del pin AREF, en los loop impares comparo con 5v.En cualquier caso se hacen dos lecturas perdidas de AO para estabilizar el valor leído y a continuación se utiliza el valor de la ternera lectura en el programa.

Observen

Cuando pongamos en marcha la lectura sin cambiar de posición el potenciómetro veremos normalmente una lectura menor seguida de otra mayor, la menor mide voltios y la mayor el % de la electricidad que deja pasar el potenciómetro.

El mandato “analogReference” es de los pocos mandatos que se puede poner indistintamente en la función “setup” como en la función”loop” porque aunque modifica la configuración de Arduino, algo a lo que se dedica la función “setup”, lo hace de forma no permanente, sino que se puede cambiar, por lo tanto hay que poderlo ejecutar posteriormente en la función “loop”.

No he utilizado el mandato “analogReference(INTERNAL)”, pues en este ejemplo no es seguro, pero como poder, se podría utilizar con Arduino UNO, siempre que tuviéramos la seguridad que las lecturas que hacemos en las entradas analógicas, van a ser siempre por debajo de 1,1 voltios. Con Arduino UNO no se pueden ejecutar los mandatos “analogReference(INTERNAL1V1)” ni “analogReference(INTERNAL2V56). pues este modelo de Arduino no los soporta.

Volvemos a tener un ejemplo claro como primero, ligeros cambios en programa pueden dar lugar a cambios sorprendentes en el funcionamiento de un mismo hardware, segundo que es posible a un equipo ya proyectado, “actualizar el firmware” de modo que sin cambios mecánicos en el aparato su funcionamiento varié, algo muy utilizado actualmente con todos los aparatos unidos a Internet, al fin y al cabo una versión de una app, es una “actualización del firware”

Resumen sobre el uso de la comparación externa y el pin AREF.

Como norma general el uso de esta posibilidad de mejora de la lectura de sensores SÓLO DEBE UTILIZARSE cuando sea INPRESCINDIBLE, lo cual es muy raro, porque normalmente son los sensores que utilizamos los que son incapaces de discernir con tanta finura los diferentes niveles del objeto que evaluaran y de nada nos vale que por programa definamos la centésima de grado centigrado si el sensor solo es capas de darnos una aproximación de una décima de grado en el mejor de los casos.

En segundo lugar debernos tener en cuenta muy bien lo que estaos haciendo, primero ya que lo hacemos introducir como voltaje de referencia un voltaje, con seguridad es superior al más alto que vayamos a leer en las entradas analógicas y ademas muy próximo por arriba ,de la entrada mas alta, pues si no, la ganancia de calidad de lectura que tennos es muy reducida.

De hacer lecturas por varias entradas analógicas, debemos de estar seguros en cada lectura de estar haciendo una comparación con una referencia mayor que la le entrada por el pin de entrada analógica pues en otro caso podemos quemar el Arduino. Es especial hay que tener cuidado si vamos a hacer lecturas con comparación EXTERNAL o INTERMAL o con DEFOUTL pues si previamente no hemos puesto el nivel adecuado de comparación podemos dar lugar a un error que rompa la Tarjeta Arduino.

Ademas puede ocurrir que de utilizar el mandato analogReference , que la tarjeta Arduino no soporte alguno de los parámetros estándar (con Arduino UNO por ejemplo los parámetros “INTERNAL1V1” y “INTERNAL2V56” o en otras tarjetas que DEFOULT suponga 3, 3v en vez de 5v). Lo que ocasiona que el programa funcione bien con unas tarjetas pero no con otras.

Por todo ello ,salvo de ser una NECESIDAD INEVITABLE aconsejo no utilizar este mandato ni el pin AREF. Este post solo tiene la utilidad de que sepamos para que valen simplemente.

Mandatos utilizados

Resumimos las funciones y mandatos de Arduino que hemos utilizado. De no entender el funcionamiento o la sintaxis de alguna buscarla en el Manual en español en PDF

Documentación
Párrafo /* ………. */
Comentario // …………

Declaración de variables y parámetros
Declaración de numero entero int parva = valor

Ciclo de trabajo de Arduino
Función Setup que solo se ejecuta al incoo del programa void setup() { ……….}
Función Loop que se repite indefinidamente void loop() { ……………….}

Mandatos en la función setup
Definir pin como salida pinMode(salida, OUTPUT)
Ejecutar analogReference(EXTERNAL)

Mandatos en la función loop
Condicional if if variable = valor {….}
Abrir un pin digital digitalWrite(pin, HIGH);
Cerrar un pin digital digitalWrite(pin, LOW);
jecutar analogReference(EXTERNAL)
jecutar analogReference(DEFOULT)
Leer analógicamte el voltaje de un circuito Variable = analogRead(Pinanalogico);
Pausa delay(tiempo);
Operar con variables
Cambiar el valor de una variable var = valor

Félix Maocho

Anuncios

23 diciembre 2015 - Posted by | Curso de Arduino, Robotica | , , , , ,

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: