// ======================================================
// PRACTICA 5.2 - STM NUCLEO F446RE
// Tabla de multiplicar no bloqueante
// ======================================================
// Pines de entrada
const int PIN_B0 = D2; // LSB
const int PIN_B1 = D3;
const int PIN_B2 = D4;
const int PIN_B3 = D5; // MSB
// Variables de tiempo
unsigned long tiempoAnterior = 0;
const unsigned long intervalo = 500; // 500 ms
// Variables de control
int contador = 1;
int numero = 0;
void setup() {
// Configuracion de botones pull-up
pinMode(PIN_B0, INPUT_PULLUP);
pinMode(PIN_B1, INPUT_PULLUP);
pinMode(PIN_B2, INPUT_PULLUP);
pinMode(PIN_B3, INPUT_PULLUP);
// Puerto serial
Serial.begin(9600);
Serial.println("TABLA DE MULTIPLICAR");
}
void loop() {
// Leer numero binario desde los botones
numero =
(!digitalRead(PIN_B0) << 0) |
(!digitalRead(PIN_B1) << 1) |
(!digitalRead(PIN_B2) << 2) |
(!digitalRead(PIN_B3) << 3);
// Tiempo actual
unsigned long tiempoActual = millis();
// Funcion no bloqueante
if (tiempoActual - tiempoAnterior >= intervalo) {
tiempoAnterior = tiempoActual;
// Mostrar operacion
Serial.print(numero);
Serial.print(" x ");
Serial.print(contador);
Serial.print(" = ");
Serial.println(numero * contador);
contador++;
// Reiniciar tabla despues del 10
if (contador > 10) {
contador = 1;
// Separador visual
Serial.println("-------------------");
}
}
}