1.
Estructura Básica del Sketch
Para qué
Concepto Cómo funciona Casos de uso Sintaxis Ejemplo de código
sirve
Configurar
Se ejecuta una sola Configurar LED,
pines, iniciar void void setup() {<br> pinMode(13, OUTPUT);
setup() vez al encender o sensor,
Serial, setup() { } <br> [Link](9600);<br>}
resetear la placa Bluetooth, LCD
librerías
Código
Se ejecuta Leer sensores, void loop() {<br> digitalWrite(13, HIGH);
principal que void loop()
loop() infinitamente controlar LEDs, <br> delay(500);<br> digitalWrite(13,
se repite { }
después del setup enviar datos LOW);<br> delay(500);<br>}
siempre
//
comentario
El compilador los Explicar Documentar
Comentarios o /* // Este es un comentario de una línea
ignora código proyectos
comentario
*/
2. Variables y Tipos de Datos (lo más importante)
Tipo Cómo funciona Para qué sirve Casos de uso Sintaxis Ejemplo
Botón presionado, boolean estado = if (estado) digitalWrite(13,
boolean Guarda true o false Estados sí/no
LED encendido true; HIGH);
Mostrar letras en char letra =
char Un solo carácter Letras o símbolos [Link](letra);
LCD 'A';
Número entero (- Contar pulsaciones, int contador =
int Contadores, pines contador++;
32.768 a 32.767) pines digitales 0;
unsigned Solo positivo (0 a Números que Contadores de unsigned int
tiempo = millis()/1000;
int 65.535) nunca bajan de 0 tiempo tiempo = 0;
Números muy millis(), cálculos Tiempo en
long long tiempo = 0; tiempo = millis();
grandes grandes milisegundos
unsigned Solo positivo muy millis(), contadores unsigned long
Tiempo sin signo if (millis() - tiempo > 1000)
long grande largos tiempo = 0;
Números con Temperatura, Sensores (DHT11, float temp =
float temp = analogRead(A0) * 0.488;
decimales (7 dígitos) distancia, voltaje ultrasonido) 25.5;
Mostrar
Mensajes, String mensaje =
String Cadena de texto "Temperatura: [Link](mensaje);
nombres "Hola";
25.5°C"
Lista de valores del Múltiples pines o 8 LEDs, múltiples int pines[5] = for(int i=0; i<5; i++)
array
mismo tipo valores sensores {2,3,4,5,6}; pinMode(pines[i], OUTPUT);
3. Constantes y Modificadores
Concepto Cómo funciona Para qué sirve Casos de uso Sintaxis Ejemplo
Valor nunca cambia LED, botón, const int LED =
const Pines y valores fijos pinMode(LED, OUTPUT);
(ahorra memoria) velocidad 13;
Pines
Reemplaza texto antes Ahorro de memoria
#define (recomendado #define LED 13 digitalWrite(LED, HIGH);
de compilar (estilo antiguo)
const)
Puede cambiar en Contador en volatile int attachInterrupt(0,
volatile Interrupciones
cualquier momento attachInterrupt contador = 0; contar, FALLING);
4. Operadores
Tipo Operadores Para qué sirve Ejemplo de código
Cálculos
Aritméticos + - * / % int suma = 5 + 3;
matemáticos
Comparación == != > < >= <= Comparar valores if (temperatura > 30)
Lógicos `&& !`
Asignación = += -= *= /= Asignar y modificar contador += 1;
Control de bits
Bitwise `& ^ ~ << >>`
(avanzado)
5. Estructuras de Control
Estructura Cómo funciona Casos de uso Sintaxis Ejemplo
Ejecuta código según if (condición) { } else { if (digitalRead(2) == HIGH) {
if / else Botones, sensores
condición } digitalWrite(13, HIGH); }
Múltiples casos según switch(variable) { case
switch Menús, estados switch(estado) { case 0: ... }
valor 1: ... break; }
Repite un número exacto Barridos de LEDs, for(inicio; condición; for(int i=0; i<10; i++) {
for
de veces bucles incremento) digitalWrite(pines[i], HIGH); }
Repite mientras
while Esperar botón while(condición) { } while(digitalRead(2) == LOW);
condición sea verdadera
Menús que deben do { leerSensor(); }
do-while Ejecuta al menos una vez do { } while(condición);
mostrarse una vez while(temperatura < 30);
6. Funciones Arduino (I/O y Tiempo)
Función Para qué sirve Casos de uso Sintaxis Ejemplo completo
Configura pin como pinMode(pin,
pinMode Todos los proyectos pinMode(13, OUTPUT);
entrada o salida INPUT/OUTPUT)
Enciende o apaga pin digitalWrite(pin,
digitalWrite LEDs, relés, motores digitalWrite(13, HIGH);
digital HIGH/LOW)
int valor =
digitalRead Lee estado de pin digital Botones, sensores if(digitalRead(2) == HIGH)
digitalRead(pin);
Control de brillo, analogWrite(pin, 0-
analogWrite PWM (0-255) analogWrite(9, 128); // 50% brillo
velocidad motor 255)
Sensores int valor = float voltaje = analogRead(A0) *
analogRead Lee valor 0-1023 (0-5V) (potenciómetro, LDR,
analogRead(A0); (5.0/1023.0);
temp)
delay(1000); // 1
delay Pausa en milisegundos Parpadeos simples delay(500);
segundo
Tiempo transcurrido desde Timing sin bloquear unsigned long tiempo if (millis() - tiempoAnterior >=
millis
encendido (ms) (mejor que delay) = millis(); 1000)
int porcentaje =
Sensor 0-1023 → 0- map(valor, 0, 1023,
map Convierte un rango a otro map(analogRead(A0), 0, 1023, 0,
100% 0, 100)
100);
7. Comunicación Serial
Función Para qué sirve Casos de uso Sintaxis Ejemplo
Inicia comunicación
[Link] Monitor Serial [Link](velocidad); [Link](9600);
con PC
Envía texto sin salto
[Link] Depuración [Link]("Texto"); [Link]("Temp: ");
de línea
Envía texto + salto de
[Link] Mostrar datos [Link](valor); [Link](temperatura);
línea
¿Hay datos Recibir desde PC o while([Link]()) { char c =
[Link] if([Link]())
esperando? Bluetooth [Link](); }
8. Funciones Personalizadas e Interrupciones
Concepto Cómo funciona Casos de uso Sintaxis Ejemplo
void parpadear() {
Encender LEDs,
Funciones Código digitalWrite(13,HIGH);
calcular tipo nombre() { }
propias reutilizable delay(200);
distancia
digitalWrite(13,LOW); }
Ejecuta función Botones sin
attachInterrupt(digitalPinToInterrupt(pin), attachInterrupt(0, contar,
attachInterrupt al detectar debounce,
funcion, modo); RISING);
cambio encoders
Consejos finales para usar todo esto:
Usa siempre const int para pines.
Usa unsigned long con millis() para evitar bloqueos.
Evita delay() en proyectos avanzados.
Todos los pines digitales se pueden usar como INPUT/OUTPUT.
,,
,, ,
, ,,
GUÍA COMPLETA IMPRIMIBLE
Fundamentos de Programación en Arduino + Componentes
(Versión 2026 - Todo lo esencial para principiantes y avanzados)
Sección 1: Estructura Básica del Sketch
Para qué
Concepto Cómo funciona Casos de uso Sintaxis Ejemplo de código
sirve
Se ejecuta 1 sola Configurar Pines, Serial, void setup() { pinMode(13, OUTPUT);
setup() void setup() { }
vez al encender todo librerías [Link](9600); }
Se repite Código Leer sensores, void loop() { digitalWrite(13,
loop() void loop() { }
infinitamente principal controlar salidas HIGH); delay(500); ... }
Ignorados por el Explicar tu Documentar // comentario o
Comentarios // Este LED parpadea
compilador código proyectos /* bloque */
Sección 2: Variables y Tipos de Datos
Tipo Tamaño Rango Para qué sirve Casos de uso Sintaxis Ejemplo
Botones, LED boolean estado =
boolean 1 byte true / false Estados sí/no if(estado)
encendido true;
Tipo Tamaño Rango Para qué sirve
Números enteros Casos de uso
Contadores, Sintaxis Ejemplo
int 2 bytes -32.768 a 32.767 int contador = 0; contador++;
más usados pines
unsigned Contadores unsigned int
2 bytes 0 a 65.535 Solo positivos -
int de tiempo tiempo = 0;
long /
±2 mil millones / 0 millis(), números Tiempo sin unsigned long if(millis()-tiempo >
unsigned 4 bytes
a 4 mil millones grandes bloquear tiempo = millis(); 1000)
long
Números con Temperatura, Sensores temp =
float 4 bytes float temp = 25.5;
decimales distancia, voltaje analógicos analogRead(A0)*0.488;
Mensajes en LCD, String mensaje =
String variable Texto completo [Link](mensaje);
pantalla/Serial Bluetooth "Hola";
Lista del mismo Múltiples pines o 8 LEDs, varios int pines[5] =
array variable for(int i=0;i<5;i++)
tipo valores sensores {2,3,4,5,6};
Sección 3: Constantes y Modificadores
Modificador Para qué sirve Cuándo usarlo Sintaxis
const Valor nunca cambia (ahorra RAM) Pines, velocidades fijas const int LED = 13;
Reemplazo de texto (estilo Pines (menos recomendado que
#define #define LED 13
antiguo) const)
volatile Puede cambiar en interrupciones attachInterrupt volatile int contador = 0;
Sección 4: Estructuras de Control + Operadores (resumen rápido)
if / else, switch, for, while, do-while → ya viste en la tabla anterior.
Operadores: + - * / % == != > < && || ! += -=
Sección 5: Funciones Arduino Esenciales (I/O y Tiempo)
Función Para qué sirve Sintaxis Ejemplo práctico
Configura
pinMode pinMode(pin, INPUT/OUTPUT) pinMode(13, OUTPUT);
entrada/salida
digitalWrite Enciende/apaga digitalWrite(pin, HIGH/LOW) digitalWrite(13, HIGH);
digitalRead Lee botón/sensor int val = digitalRead(pin); if(digitalRead(2)==HIGH)
analogWrite PWM (0-255) analogWrite(pin, 128); Brillo LED / velocidad motor
analogRead Lee 0-1023 int val = analogRead(A0); Sensores
millis() Tiempo sin bloquear unsigned long t = millis(); MEJOR QUE delay()
delay() Pausa (bloquea todo) delay(1000); Solo pruebas rápidas
map() Convierte rangos map(valor, 0, 1023, 0, 100); Porcentaje
Sección 6: Comunicación Serial
[Link](9600);
[Link]("Texto"); / [Link](valor);
if([Link]())
Sección 7: Sensores Comunes (NUEVA TABLA)
Qué mide /
Pines Librería Cómo Casos de Consejos
Sensor Tipo Arduino recomendada Código ejemplo básico uso importantes
funciona
Presión Botones, Usa
Pulsador Digital Pin + GND Ninguna if(digitalRead(2)==HIGH)
(HIGH/LOW) menús INPUT_PULLUP
LDR A0 + 5V + Cantidad de int luz = Luces Calibra
Analógico Ninguna
(Fotoresistor) resistencia luz analogRead(A0); automáticas valores
Control
A0 + 5V + Posición int val = Centro al pin
Potenciómetro Analógico Ninguna velocidad /
GND giratoria analogRead(A0); analógico
brillo
duration = pulseIn(echo, Evitar Alimentación
HC-SR04 Trig + NewPing Distancia en
Digital HIGH); dist = obstáculos, externa si es
Ultrasonido Echo + 5V (opcional) cm
duration*0.034/2; tanques posible
Espera
DHT11 / Digital 1- DHT sensor Temperatura [Link](); Estación del
Pin + 5V mínimo 2
DHT22 wire library + Humedad [Link](); clima
segundos
Alarmas, Ajusta
PIR OUT + 5V Movimiento
Digital Ninguna if(digitalRead(3)==HIGH) luces tiempo y
(Movimiento) + GND infrarrojo
automáticas sensibilidad
SDA(A4), Usa I2C
MPU6050 Aceleración [Link](&ax, Robots,
MPU6050 I2C SCL(A5) + Scanner
library + Giroscopio &ay, &az); inclinación
3.3V primero
Sección 8: Pantallas LCD (NUEVA TABLA)
Tipo Casos de Consejos
Pines necesarios Librería Inicialización Código ejemplo básico
LCD uso importantes
16x2 LiquidCrystal Resistencia
16 pines (RS, EN, [Link]("Hola"); Mensajes
sin LiquidCrystal lcd(12,11,5,4,3,2); 10k en VO
D4-D7…) [Link](0,1); simples
I2C [Link](16,2); (contraste)
Proyectos
16x2 Solo 4 pines Dirección 0x27
[Link](); [Link]("Temperatura: con
con (SDA, SCL, VCC, LiquidCrystal_I2C o 0x3F (usa I2C
[Link](); "); pocos
I2C GND) scanner)
pines
Sección 9: Motores (NUEVA TABLA)
Driver Pines de Control Código ejemplo Consejos
Tipo de Motor Librería Casos de uso
recomendado control básico básico importantes
1 pin Alimenta por
Servo Ninguno Ángulo 0- Brazos, puertas,
PWM + Servo.h [Link](90); separado si
(SG90/MG996) (directo) 180° cámaras
5V/GND >1 servo
analogWrite(EN, Nunca
2 pines
L298N o Velocidad y 200); Carritos, alimentes
Motor DC dirección Ninguna
TB6612 sentido digitalWrite(IN1, ventiladores desde
+ PWM
HIGH); Arduino
Usa
Pasos
Motor Paso a AccelStepper
ULN2003 o Stepper.h o precisos CNC,
Paso 28BYJ- 4 pines [Link](2048); para
A4988 AccelStepper (2048 por posicionamiento
48 movimientos
vuelta)
suaves
Sección Extra: INFORMACIÓN IMPORTANTE PARA TENER EN CUENTA (¡Lee esto siempre!)
1. Usa siempre const int para pines → ahorra memoria y evita errores.
2. Nunca uses delay() en proyectos serios → usa millis() (evita que todo se “congele”).
3. Alimenta motores y sensores potentes desde fuente externa (no desde el Arduino 5V).
4. GND común : todos los componentes deben compartir el mismo GND.
5. Resistencias pull-up: para botones usa pinMode(pin, INPUT_PULLUP);
6. Librerías: ve a Sketch → Include Library → Manage Libraries… (busca por nombre).
7. I2C: pines A4 (SDA) y A5 (SCL) en Arduino UNO/Nano.
8. Nivel de voltaje: sensores 3.3V necesitan conversor de nivel lógico.
9. Depuración: usa mucho [Link]() para ver valores en tiempo real.
10. Memoria : si te dice “Sketch uses too much memory” → cambia int por byte o usa const.
11. Protección : pon diodo flyback en motores y relés.
12. Prueba primero con el Monitor Serial antes de conectar componentes caros.