Vamos a continuar con las funciones de Arduino UNO, haciendo especial referencia a las funciones internas de ARDUINO. En la tabla anterior te muestro una tabla de funciones para que directamente vayas a la función específica.
📚 Referencia rápida de funciones para programación en Arduino UNO
| 📂 Categoría | 🔤 Función | 🔗 Enlace |
|---|---|---|
| 📥 Analógica | analogRead() | 📖 Ir → |
| 📤 Analógica | analogWrite() | 📖 Ir → |
| ⏱️ Tiempo | delay() | 📖 Ir → |
| ⏱️ Tiempo | millis() | 📖 Ir → |
| ➕ Matemáticas | min() | 📖 Ir → |
| ➖ Matemáticas | max() | 📖 Ir → |
| 🎲 Aleatorios | randomSeed() | 📖 Ir → |
| 🎲 Aleatorios | random() | 📖 Ir → |
| 📡 Serie | Serial.begin() | 📖 Ir → |
| 📡 Serie | Serial.print() | 📖 Ir → |
| 📡 Serie | Serial.println() | 📖 Ir → |
| 📡 Serie | Serial.available() | 📖 Ir → |
| 📡 Serie | Serial.read() | 📖 Ir → |
analogRead(PIN).
Lee el valor de un determinado PIN definido como entrada analógica con una resolución de 10 bits. Esta instrucción sólo funciona en los pines (0-5). El rango de valor que podemos leer oscila de 0 a 1023.

Pines analógicos en Arduino UNO Q.
Nota: Los pines analógicos (A0-A5) a diferencia de los pines digitales, no necesitan ser declarados como INPUT u OUPUT ya que son siempre INPUT.
Además, la tensión de referencia de estos pines por defecto es de 0 a 5V, a no ser que se cambie con analogReference(). Por lo que la tensión de salida de estos pines por defecto será de 0 a 5V y su equivalente en decimal será para 5V, 1023. Así podemos establecer un factor de conversión de:
Entre las aplicaciones para los que se usan estos pines están, por ejemplo:
● Lectura de potenciómetros.
● Sensores de luz (LDR).
● Sensores de temperatura (LM35).
● Sensores de distancia (HC-SR04 - echo).
● Sensores de humedad.
analogWrite(PIN).
Esta instrucción sirve para escribir un pseudo-valor analógico utilizando el procedimiento de modulación por ancho de pulso (PWM) a uno de los pin de Arduino marcados como pin PWM.
El valor que se puede enviar a estos pines (resolución) de salida analógica, es de 8 bits y puede darse en forma de variable o constante, pero siempre con un margen de 0 a 255, siendo el 0 el 0V y el 255 los 5V (analogReference es 5V, por defecto).
El ciclo de trabajo de estos pines PWM dependen del voltaje de salida de los mismos. Así un valor de 0, implica los 0V. Un valor de 64, implica un 25% (aproximadamente 1.25V); un valor de 127, un 50%; y 255 implica 5V.
Así, si ponemos un LED a la salida de uno de estos pines PWM, podremos controlar su luminosidad aplicando un valor a su salida.
int ledPin = 9; // Pin PWM
// the setup routine runs once when you press reset:
void setup() {
pinMode(ledPin, OUTPUT); //Establece el pin de origen y su configuración.
}
// the loop routine runs over and over again forever:
void loop() {
// Aumenta brillo
for (int brillo = 0; brillo <= 255; brillo++) {
analogWrite(ledPin, brillo);
delay(10);
}
// Disminuye brillo
for (int brillo = 255; brillo >= 0; brillo--) {
analogWrite(ledPin, brillo);
delay(10);
}
}
Arduino
Función delay().
Detiene la ejecución del programa la cantidad de tiempo en mili segundos que se indica en la propia instrucción. De tal manera que 1000 ms equivale a 1 segundo:
Función millis().
Devuelve el número de milisegundos transcurrido desde el inicio del programa en Arduino hasta el momento actual. Normalmente será un valor grande (dependiendo del tiempo que esté en marcha la aplicación después de cargada o después de la última vez que se pulsó el botón RESET de la tarjeta).
Este número se desbordará (overflow), si no se resetea de nuevo a cero después de aproximadamente 9 horas.
Función min(x,y).
Calcula el mínimo de dos números para cualquier tipo de datos devolviendo el número más pequeño.
Si 'valor' es menor que 100, recogerá su propio valor.
Si ´valor´ es mayor que 100 pasara a valer 100.
Función max(x,y).
Calcula el máximo de dos números para cualquier tipo de datos devolviendo el número más grande.
// De esta manera nos aseguramos de que valor será como mínimo 100.
Función randomSeed(seed).
Establece un valor, o semilla, como punto de partida para la función random().
Debido a que Arduino es incapaz de crear un verdadero número aleatorio, randomSeed le permite colocar una variable, constante, u otra función de control dentro de la función random, lo que permite generar números aleatorios "al azar". Hay una variedad de semillas, o funciones, que pueden ser utilizados en esta función, incluido millis() o incluso analogRead() que permite leer ruido eléctrico a través de un pin analógico.
random(min); random(min, max).
La función random devuelve un número aleatorio entero de un intervalo de valores especificado entre los valores min y max.
Usa esta función después de usar el randomSeed(). El siguiente ejemplo genera un valor aleatorio entre 0 y 255 y lo envía a una salida analógica PWM:
int randNumber; // Variable que almacena el número aleatorio
int ledPin = 9; // Pin PWM de Arduino
void setup() {
// No es necesario configurar el setup
}
// Vamos a utilizar el loop para generar un semilla:
void loop() {
// Utilizamos el randomSeed
randomSeed(millis());
randNumber = random(255);// generamos un número aleatorio de 0 a 255
analogWrite(ledPin, randNumber);// produce una salida aleatoria
delay(500);// Una pausa de 0.5 segundos
}
Arduino
Serial.begin(rate)).
Abre el puerto serie y fija la velocidad en baudios para la transmisión de datos en serie. El valor típico de velocidad para comunicarse con el ordenador es con la Arduino UNO rev3 suele ser de 9600, aunque en las placas Q, pueden soportar velocidades muy superiores.
Serial.print(data)).
Imprime los datos en el puerto serie, seguido por un retorno de carro automático y salto de línea. Este comando toma la misma forma que Serial.print(), pero es más fácil para la lectura de los datos en el Monitor Serie del software.
Serial.println(data, data type)).
Vuelca o envía un número o una cadena de caracteres al puerto serie, seguido de un carácter de retorno de carro CR (ASCII 13, o '\r')y un carácter de salto de línea LF (ASCII 10, or '\n'). Toma la misma forma que el comando Serial.print().
Además:
● Serial.println(b) vuelca o envía el valor de b como un número decimal en caracteres ASCII seguido de CRLF.
● Serial.println(b, DEC) vuelca o envía el valor de b como un número decimal en caracteres ASCII seguido de CRLF.
● Serial.println(b, HEX) vuelca o envía el valor de b como un número hexadecimal en caracteres ASCII seguido de CRLF.
● Serial.println(b, OCT) vuelca o envía el valor de b como un número Octal en caracteres ASCII seguido de CRLF.
>● Serial.println(b, BIN) vuelca o envía el valor de b como un número binario en caracteres ASCII seguido de CRLF.
● Serial.print(b, BYTE) vuelca o envía el valor de b como un byte seguido de CRLF.
● Serial.println(str) vuelca o envía la cadena de caracteres como una cadena ASCII seguido de CRLF.
● Serial.println() sólo vuelca o envía CRLF. Equivaldría a printNewline().
Serial.avaible.
Obtiene un número entero con el número de bytes (caracteres) disponibles para leer o capturar desde el puerto serie. Equivaldría a la función serialAvailable().
Devuelve Un entero con el número de bytes disponibles para leer desde el buffer serie, o 0 si no hay ninguno. Si hay algún dato disponible, SerialAvailable() será mayor que 0. El buffer serie puede almacenar como máximo 64 bytes.
int incomingByte = 0; // almacena el dato Serie
void setup() {
Serial.begin(9600); // establecemos la comunicación con el Serial
}
// Vamos a utilizar el loop para generar un semilla:
void loop() {
if (Serial.available() > 0) { //lee el byte de entrada
incomingByte = Serial.read(); //lo vuelca a pantalla
Serial.print("He recibido el dato :");// Muestra mensaje
Serial.println(incomingByte, DEC);
}
}
Arduino
Serial.read().
int Serial.Read(). Lee o captura un byte (un carácter) desde el puerto serie. Equivaldría a la función serialRead(). Devuelve el siguiente byte (carácter) desde el puerto serie, o -1 si no hay ninguno.