Ya sabemos guardar datos en variables. Pero guardar datos sirve de poco si no hacemos nada con ellos.
La potencia de un ordenador (y tu Arduino es uno pequeñito) reside en su capacidad para calcular cosas muy muy rápido.
Calcular no es solo sumar números; también es comparar cosas (“¿Es esto mayor que aquello?”) y tomar decisiones lógicas (“Si pasa esto Y lo otro”).
Para ello usamos los operadores. Vamos a enseñar a nuestro Arduino a sumar, restar y pensar.
La asignación (=)
En programación, el signo = se llama Operador de Asignación. Significa “meter este valor dentro de esta variable”.
int numero = 5;
Significa: Coge el valor 5 y guárdalo dentro de la caja llamada numero.
Aritmética básica
Arduino sabe hacer cuentas básicas con las variables int y float. Los símbolos son casi los que esperáis, con un par de cambios:
| Operación | Símbolo | Ejemplo | Resultado si a=10, b=2 |
|---|---|---|---|
| Suma | + | int suma = a + b; | 12 |
| Resta | - | int resta = a - b; | 8 |
| Multiplicación | * | int mult = a * b; | 20 |
| División | / | int div = a / b; | 5 |
| Resto (Módulo) | % | int resto = a % b; | 0 |
El peligro de la División
Cuidado con la división. Si estáis usando números enteros (int), Arduino no puede usar decimales (porque estáis usando enteros, claro).
int a = 5;
int b = 2;
int resultado = a / b; // ¿Cuánto da?
En la vida real da 2.5. En Arduino, como la caja resultado es entera, corta los decimales y los tira. El resultado será 2.
Si necesitáis decimales, recordad usar variables de tipo float para todo.
Los atajos ++, +=
Existen algunos “atajos” para las operaciones más comunes. Por ejemplo imaginad que queréis contar vueltas. Lo normal sería: vueltas = vueltas + 1; (Coge lo que valía vueltas, súmale 1 y guárdalo otra vez).
En Arduino veréis esto escrito así:
vueltas++;Suma 1 a la variable. (Incremento).vueltas--;Resta 1 a la variable. (Decremento).vueltas += 5;Suma 5 a lo que ya hubiera. (Es igual avueltas = vueltas + 5).
Estos símbolos los veréis hasta en la sopa, especialmente en los bucles for.
Operadores de comparación
Ahora que sabemos calcular, queremos preguntar. Estas operaciones no devuelven un número, devuelven una respuesta de Verdadero (true) o Falso (false). Son la base de la sentencia if.
| Pregunta | Símbolo | Ejemplo | Significado |
|---|---|---|---|
| Igualdad | == | a == 5 | ¿Vale ‘a’ exactamente 5? |
| Desigualdad | != | a != 5 | ¿Es ‘a’ distinto de 5? |
| Menor | < | a < 10 | ¿Es ‘a’ más pequeño que 10? |
| Mayor | > | a > 10 | ¿Es ‘a’ más grande que 10? |
| Menor o igual | <= | a <= 10 | ¿Es 10 o menos? |
| Mayor o igual | >= | a >= 10 | ¿Es 10 o más? |
Fijaos en el primero. Para preguntar si es igual usamos DOBLE IGUAL (==).
if (a = 5)MAL. Estás guardando un 5 en ‘a’ y Arduino se lía.if (a == 5)BIEN. Estás comparando.
Operadores lógicos
A veces una sola pregunta no basta. Queremos preguntar cosas como
¿Es de día Y tengo sueño?
Para eso unimos comparaciones con la lógica.
&& significa “Y”. Para que sea verdad, ambas cosas deben cumplirse.
(A && B)
Ejemplo: “Encender alarma si el sensor detecta movimiento
&&la alarma está armada”.
|| significa “O”. Para que sea verdad, basta con que una de las dos se cumpla. (La barra vertical | suele estar en la tecla del 1 o bajo la tecla Esc).
(A || B)
Ejemplo: “Encender luz si pulso el interruptor 1
||pulso el interruptor 2”.
! significa “NO”. Invierte el resultado. Lo que era verdad se vuelve mentira, y viceversa.
(!A)
Ejemplo:
!trueesfalse. Muy útil para interruptores:estado = !estado;(Invierte la luz: si estaba ON pasa a OFF).
Ejemplo práctico: Un contador con límite
Vamos a juntarlo todo en un ejemplo real. Queremos una variable que cuente del 0 al 10. Cuando llegue a 10, que vuelva a 0.
int contador = 0; // Usamos Asignación (=)
void setup() {
Serial.begin(9600);
}
void loop() {
// 1. Aritmética: Sumamos 1
contador++;
// 2. Comparación: ¿Nos hemos pasado?
if (contador > 10) {
// 3. Asignación: Reiniciamos
contador = 0;
Serial.println("¡Vuelta a empezar!");
}
// 4. Lógica compuesta: Solo imprimimos si es par Y mayor que 5
// (El operador % 2 == 0 nos dice si es par)
if (contador > 5 && (contador % 2 == 0)) {
Serial.print("Numero par alto: ");
Serial.println(contador);
}
delay(500);
}
