Arduino


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

     }

   }

   ```


Explicación  

   - 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