3er Parcial; Práctica 4: Uso de While en lenguaje C con arduino

Práctica para aprender el bucle While en Arduino (con display de 7 segmentos)

Este código de Arduino enciende LEDs, activa un buzzer y un motor en una secuencia específica mientras muestra números del 0 al 9 en un display de 7 segmentos. El ciclo while juega un papel fundamental en este proceso.

Objetivos

Desglose del código

Definición de Pines:

Se definen pines para LEDs (LED1, LED2, LED3), buzzer y motor.

También se definen los pines conectados a cada segmento del display (A-G) y un arreglo SEGMENTOS para agruparlos.

Se define otro arreglo DIGITOS que contiene la configuración para encender los segmentos necesarios para mostrar cada número del 0 al 9.

Finalmente, se define una constante OFF equivalente a LOW para apagar segmentos.

Dentro del ciclo while:

  1. Se recorre el arreglo DIGITOS del 0 al 9 (ciclo for).
  2. Para cada dígito, se llama a la función print(i) para mostrar el número en el display.
  3. Se introduce un retardo de 1 segundo con delay(1000).
  4. Se incrementa el contador count.
  5. Dependiendo del valor de count, se encienden diferentes elementos:
  6. count == 4: reinicia el ciclo

Esquema de Conexiones:

Conexión arduino

Código:






const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;

const int LED1 = 13;
const int LED2 = 12;
const int LED3 = 11;
const int BUZZER = 10;
const int MOTOR = 9;

const int N = 7;
const int SEGMENTOS[N] = {A, B, C, D, E, F, G};

/*CÁTODO COMÚN*/
const int DIGITOS[10][N] = {
    /*0*/ {1, 1, 1, 1, 1, 1, 0},
    /*1*/ {0, 1, 1, 0, 0, 0, 0},
    /*2*/ {1, 1, 0, 1, 1, 0, 1},
    /*3*/ {1, 1, 1, 1, 0, 0, 1},
    /*4*/ {0, 1, 1, 0, 0, 1, 1},
    /*5*/ {1, 0, 1, 1, 0, 1, 1},
    /*6*/ {1, 0, 1, 1, 1, 1, 1},
    /*7*/ {1, 1, 1, 0, 0, 0, 0},
    /*8*/ {1, 1, 1, 1, 1, 1, 1},
    /*9*/ {1, 1, 1, 1, 0, 1, 1}};

const int OFF = LOW;

void setup()
{
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    pinMode(LED3, OUTPUT);
    pinMode(BUZZER, OUTPUT);
    pinMode(MOTOR, OUTPUT);
    for (int i = 0; i < N; i++)
    {
        pinMode(SEGMENTOS[i], OUTPUT);
        digitalWrite(SEGMENTOS[i], OFF); //apagar
    }
}

void print(int d)
{
    for (int i = 0; i < N; i++)
    {
        digitalWrite(SEGMENTOS[i], DIGITOS[d][i]);
    }
}

void loop()
{
    int count = 0;
    while (true)
    {
        for (int i = 0; i < 10; i++)
        {
            print(i);
            delay(1000); // esperar 1000 milisegundos
        }
        count++;
        if (count == 1)
        {
            digitalWrite(LED1, HIGH);
        }
        else if (count == 2)
        {
            digitalWrite(LED2, HIGH);
        }
        else if (count == 3)
        {
            digitalWrite(LED3, HIGH);
            digitalWrite(BUZZER, HIGH);
            digitalWrite(MOTOR, HIGH);
        }
        else if (count == 4)
        {
            // Reiniciar a estado inicial
            digitalWrite(LED1, LOW);
            digitalWrite(LED2, LOW);
            digitalWrite(LED3, LOW);
            digitalWrite(BUZZER, LOW);
            digitalWrite(MOTOR, LOW);
            for (int i = 0; i < N; i++)
            {
                digitalWrite(SEGMENTOS[i], OFF); // apagar segmentos
            }
            count = 0;
        }
    }
}



        

Aprendiendo del ciclo while

Este código Arduino ejemplifica el funcionamiento del ciclo `while` y su aplicación para crear rutinas repetitivas.

Descripción del código

El ciclo `while(true)` ejecuta continuamente el código dentro del bucle. Dentro del ciclo, un contador (`count`) controla la secuencia de encendido de LEDs, un buzzer y un motor. Al llegar a `count == 4`, se reinician todas las salidas y el contador para volver a iniciar la secuencia.

Modificaciones