Paso 3: Código
El código es bastante directo. Queremos cada vez se presione el botón, una variable interna la vamos a llamar "botonState" cambie de valor. del estado 0 al 1, al 2 y nuevamente al 0. Para lograr eso, vamos a utilizar un operador matemática bastante utilizado programación del at, es el operador módulo '%'
La operación módulo en una computadora lo hace es retornar el residuo de la división de enteros. Mortajas dos operandos en dividendo y el divisor n , División de la n %, es el resíduo, llamada euclidiana por ser división de dos números enteros, de una entre n. ASí por ejemplo 0% 3 = 0, y 1% 3 = 1, 2 %3 = 2, 3 3% = 0, 4 %3 = 1, y así sucesivamente, vean como el resultado va circulando entre 0,1 y 2, para luz-Paris al 0 nuevamente. Este operador es muy útil en el código, donde se quieran comportamientos circulares de variables. En Wikipedia hay una buena explicación de esto.
En la línea 1, creamos una variable global, de tipo entero, la llamamos "botonState". En esta variable almacenaremos el cambio de estado, cada vez se aprieta el botón. At las líneas de 4 que a 7 simplemente inicializamos los pinos. Noten como el pin 8 indicamos es INPUT_PULLUP. Acá pueden ver más sobre los pinos en Arduino.
El código en las líneas 10 a la 14:
if (digitalRead(8) == 0) { // el operador % significa modulo botonState = (botonState + 1) % 3; delay(200); }
Acá es donde cuántos la operación módulo. Noten como le agregamos un retardo para el cambio no sea tan rápido. Primero vive si el botón está presionado, es decir cuando la lectura del pin es igual a 0. Si es así, entonces actualizamos el estado de la variable "botonState", con la expresión:
botonState = (botonState + 1) % 3;
Lo de ubicandose 1 de hace esta expresión es lo ya estaba en "botonState" y luego aplicar la función módulo, de esa forma la variable puede tener los varlores 0,1,2 y da vueltas en esos números. Ahora para indicar cual llevó Fuchi, cuántos el "estado" en el está "botonState", en la siguiente línea de código (líneas 15 a 31):
switch (botonState) { case 0: digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); break; case 1: digitalWrite(2, LOW); digitalWrite(3, HIGH); digitalWrite(4, LOW); break; case 2: digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); break; }
Como ven, si "botonState" es igual a 1, entonces prende el led conectado al pin2, si es igual a 0, y el resto los apaga. Si es igual a 1, etonces prende el led del pin 3 y el resto los apaga, y así sucesivamente. Listo!