En este trabajo, deberás controlar 8 LEDs utilizando 3 botones en una placa Arduino. Cada botón tiene una función específica:
- Botón 1: Al presionarlo, los LEDs deben encenderse de izquierda a derecha, uno a la vez.
- Botón 2: Al presionarlo, la secuencia de LEDs debe detenerse y todos los LEDs deben apagarse.
- Botón 3: Al presionarlo, los LEDs deben encenderse de derecha a izquierda, uno a la vez.
El sistema debe ser capaz de detener la secuencia en cualquier momento con el botón 2 y continuar con la secuencia correspondiente cuando se presione el botón 1 o el botón 3 nuevamente.
### **Ejemplo de cómo hacer un `if`, `for`, e `input_pullup` en Arduino:**
1. **`if` (Condicional):**
El bloque `if` se usa para ejecutar un conjunto de instrucciones si se cumple una condición. En Arduino, por ejemplo, podrías verificar si un botón ha sido presionado y realizar una acción en consecuencia.
**Ejemplo:**
int buttonPin = 7; // Pin donde está conectado el botón
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Configuramos el pin como entrada con resistencia pull-up
pinMode(LED_BUILTIN, OUTPUT); // Configuramos el LED de la placa como salida
}
void loop() {
if (digitalRead(buttonPin) == LOW) { // Si el botón está presionado (bajo)
digitalWrite(LED_BUILTIN, HIGH); // Encender el LED
} else {
digitalWrite(LED_BUILTIN, LOW); // Apagar el LED
}
}
**Explicación**:
- Se verifica si el botón está presionado (lectura baja). Si lo está, el LED se enciende, de lo contrario, se apaga.
2. `for` (Bucle):
Un bucle `for` permite repetir un conjunto de instrucciones varias veces. Es útil cuando necesitas hacer algo repetidamente, como encender varios LEDs uno por uno.
**Ejemplo:**
int ledPins[] = {2, 3, 4, 5}; // Pines donde están conectados los LEDs
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT); // Configurar cada pin como salida
}
}
void loop() {
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], HIGH); // Encender el LED
delay(500); // Esperar medio segundo
digitalWrite(ledPins[i], LOW); // Apagar el LED
}
}
```
**Explicación**:
- Se configura un bucle que recorre los 4 pines donde están conectados los LEDs. En cada iteración, se enciende un LED, se espera 500 ms, y luego se apaga.
3. `INPUT_PULLUP` (Resistencia pull-up interna):
En lugar de usar resistencias externas para los botones, Arduino tiene resistencias pull-up internas. Cuando usas `INPUT_PULLUP`, el pin se conecta a 5V de manera predeterminada, y al presionar el botón, el pin se conecta a tierra (LOW).
**Ejemplo:**
int buttonPin = 6; // Pin donde está conectado el botón
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Configuramos el pin como entrada con resistencia pull-up
pinMode(LED_BUILTIN, OUTPUT); // LED integrado como salida
}
void loop() {
if (digitalRead(buttonPin) == LOW) { // Si el botón está presionado (bajo)
digitalWrite(LED_BUILTIN, HIGH); // Encender el LED
} else {
digitalWrite(LED_BUILTIN, LOW); // Apagar el LED
}
}
```
- Usamos la resistencia pull-up interna, lo que significa que el botón no necesita una resistencia externa. El pin estará en estado `HIGH` cuando no esté presionado y en `LOW` cuando se presione.
Código Base
// Pines de LEDs
const int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
// Pines de botones
int buttonLeftToRight = 10; // Botón 1: Izquierda a derecha
int buttonStop = 11; // Botón 2: Detener
int buttonRightToLeft = 12; // Botón 3: Derecha a izquierda
bool running = false; // Para controlar si la secuencia está en ejecución
int direction = 0; // 0: parado, 1: izquierda a derecha, 2: derecha a izquierda
void setup() {
// Configurar los pines de LEDs como salida
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Configurar los pines de botones como entrada con resistencias pull-up
pinMode(buttonLeftToRight, INPUT_PULLUP);
pinMode(buttonStop, INPUT_PULLUP);
pinMode(buttonRightToLeft, INPUT_PULLUP);
}
void loop() {
// Verificar si se presiona algún botón
//HAY QUE HACER UN IF PARA CADA BOTON
if (digitalRead(buttonLeftToRight) == LOW) {
direction = 1; // Iniciar la secuencia de izquierda a derecha
running = true; // Empezar a correr la secuencia
}
if (running) {
if (direction == 1) {
encenderDeIzquierdaADerecha();
} else if (direction == 2) {
encenderDeDerechaAIzquierda();
}
}
//HACER UN MÉTODO PARA ENCEDER DERECHA A IZQUIERDA Y OTRO PARA APAGAR
void encenderDeIzquierdaADerecha() {
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], HIGH); // Encender LED
delay(200); // Esperar un poco
digitalWrite(ledPins[i], LOW); // Apagar LED
if (!running) return; // Si se detiene, salir del bucle
}
}
Comentarios
Publicar un comentario