Curso C para Arduino
🧵 Uso de Cadenas de Texto (string) en C con Arduino
En C (y por extensión en Arduino), no existe un tipo de dato llamado string como en otros lenguajes modernos. En su lugar, las cadenas de texto se representan como arreglos de caracteres (char[]) terminados en \\0, y en Arduino también puedes usar la clase String, aunque con precauciones.
🔹 Opción 1: Usar char[] (más eficiente)
Una cadena de texto es simplemente un array de caracteres:
1char saludo[] = "Hola";
Esto es equivalente a:
1char saludo[] = {'H', 'o', 'l', 'a', '\\0'};
El carácter especial \\0 (nulo) indica el final de la cadena.
➕ Ventajas:
- Menor consumo de memoria.
- No produce fragmentación de memoria.
- Compatible con funciones estándar de C.
➖ Desventajas:
- Más difícil de manipular (no tan intuitivo como
String).
📦 Funciones útiles con char[] (incluidas en <string.h>):
| Función | Descripción |
|---|---|
strlen() | Devuelve la longitud de una cadena (sin contar \\0) |
strcpy() | Copia una cadena en otra |
strcat() | Concatena dos cadenas |
strcmp() | Compara dos cadenas |
Ejemplo:
1#include <string.h> 2 3void setup() { 4 Serial.begin(9600); 5 char nombre[20] = "Juan"; 6 char saludo[40] = "Hola "; 7 8 strcat(saludo, nombre); // concatena "Hola Juan" 9 Serial.println(saludo); // Muestra: Hola Juan 10} 11 12void loop() {}
🔹 Opción 2: Usar la clase String (más cómoda pero más pesada)
Arduino implementa una clase llamada String (con mayúscula), mucho más fácil de usar pero puede causar problemas en placas con poca SRAM (como Arduino Uno).
➕ Ventajas:
- Fácil concatenación, comparación, búsqueda.
- Sintaxis más amigable, similar a otros lenguajes como Java o Python.
➖ Desventajas:
- Uso intensivo de memoria dinámica (puede provocar fragmentación).
- No recomendable en proyectos grandes o con muchos datos.
📘 Ejemplo básico con String:
1String nombre = "Ana"; 2String mensaje = "Hola, " + nombre; 3 4void setup() { 5 Serial.begin(9600); 6 Serial.println(mensaje); // Muestra: Hola, Ana 7} 8 9void loop() {}
🔍 Funciones comunes de String en Arduino:
| Función | Ejemplo |
|---|---|
length() | s.length() devuelve longitud |
charAt(i) | Accede al carácter en posición i |
substring(i, j) | Devuelve una subcadena |
indexOf() | Busca un carácter o palabra |
equals() | Compara dos strings |
toInt(), toFloat() | Convierte a número |
Ejemplo avanzado:
1String entrada = "25.5"; 2float valor = entrada.toFloat(); 3 4void setup() { 5 Serial.begin(9600); 6 Serial.print("Valor leído: "); 7 Serial.println(valor); // Imprime: 25.50 8}
🛡️ Buenas prácticas
- Usa
char[]si trabajas en proyectos con memoria limitada. - Usa
Stringsolo si necesitas manipulación compleja y tu proyecto es pequeño. - Si usas
String, evita concatenaciones dentro delloop()repetidamente, ya que crean nuevos objetos constantemente y fragmentan la memoria.
🧪 Ejemplo combinado: leer un comando serial y responder
1String comando = ""; 2 3void setup() { 4 Serial.begin(9600); 5 Serial.println("Escribe 'encender' o 'apagar':"); 6 pinMode(13, OUTPUT); 7} 8 9void loop() { 10 if (Serial.available()) { 11 comando = Serial.readStringUntil('\\n'); 12 comando.trim(); // elimina espacios o saltos 13 14 if (comando.equals("encender")) { 15 digitalWrite(13, HIGH); 16 Serial.println("LED encendido"); 17 } else if (comando.equals("apagar")) { 18 digitalWrite(13, LOW); 19 Serial.println("LED apagado"); 20 } else { 21 Serial.println("Comando desconocido"); 22 } 23 } 24}