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ónDescripció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ónEjemplo
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 String solo si necesitas manipulación compleja y tu proyecto es pequeño.
  • Si usas String, evita concatenaciones dentro del loop() 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}