test led battery — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by dave.

Components

Sketch code

// Semáforo con LEDs y display 7 segmentos (2 dígitos)
// Pines LEDs: Rojo=8, Amarillo=9, Verde=10
// Pines 7 segmentos UNIDADES: A=2, B=3, C=4, D=5, E=6, F=7, G=11
// Pines 7 segmentos DECENAS: A=A0, B=A1, C=A2, D=A3, E=A4, F=A5, G=13

// Definición de pines para segmentos UNIDADES
#define SEG_A  2
#define SEG_B  3
#define SEG_C  4
#define SEG_D  5
#define SEG_E  6
#define SEG_F  7
#define SEG_G  11

// Definición de pines para segmentos DECENAS
#define SEG_A2 A0
#define SEG_B2 A1
#define SEG_C2 A2
#define SEG_D2 A3
#define SEG_E2 A4
#define SEG_F2 A5
#define SEG_G2 13

// Pines de LEDs del semáforo
#define LED_ROJO    8
#define LED_AMARILLO 9
#define LED_VERDE   10

// Pin del botón de parada
#define BOTON_PARADA 12

// Variable para controlar si el semáforo está detenido
bool detenido = false;

// Tiempos por fase (en milisegundos)
const unsigned long TIEMPO_ROJO = 5000;
const unsigned long TIEMPO_ROJO_AMARILLO = 1000;
const unsigned long TIEMPO_VERDE = 5000;
const unsigned long TIEMPO_AMARILLO = 1000;

// Variables para el cronómetro
unsigned long tiempoInicio = 0;
unsigned long tiempoActual = 0;
unsigned long tiempoRestante = 0;
int estadoActual = 0; // 0=Rojo, 1=Rojo+Amarillo, 2=Verde, 3=Amarillo
unsigned long duracionEstado[] = {TIEMPO_ROJO, TIEMPO_ROJO_AMARILLO, TIEMPO_VERDE, TIEMPO_AMARILLO};

// Función para mostrar un dígito en un display específico
void mostrarDigitoEnDisplay(int digito, bool esDecenas) {
  // Patrón para mostrar dígitos 0-9 (segmentos A-G)
  // Formato: {A, B, C, D, E, F, G}
  const bool digitos[10][7] = {
    {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW},  // 0
    {LOW, HIGH, HIGH, LOW, LOW, LOW, LOW},      // 1
    {HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH},   // 2
    {HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH},   // 3
    {LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH},    // 4
    {HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH},   // 5
    {HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH},  // 6
    {HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW},     // 7
    {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH}, // 8
    {HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH}   // 9
  };

  if (esDecenas) {
    // Segundo display (decenas)
    digitalWrite(SEG_A2, digitos[digito][0]);
    digitalWrite(SEG_B2, digitos[digito][1]);
    digitalWrite(SEG_C2, digitos[digito][2]);
    digitalWrite(SEG_D2, digitos[digito][3]);
    digitalWrite(SEG_E2, digitos[digito][4]);
    digitalWrite(SEG_F2, digitos[digito][5]);
    digitalWrite(SEG_G2, digitos[digito][6]);
  } else {
    // Primer display (unidades)
    digitalWrite(SEG_A, digitos[digito][0]);
    digitalWrite(SEG_B, digitos[digito][1]);
    digitalWrite(SEG_C, digitos[digito][2]);
    digitalWrite(SEG_D, digitos[digito][3]);
    digitalWrite(SEG_E, digitos[digito][4]);
    digitalWrite(SEG_F, digitos[digito][5]);
    digitalWrite(SEG_G, digitos[digito][6]);
  }
}

// Función para mostrar un número de 2 dígitos (0-15)
void mostrarNumero(int numero) {
  if (numero > 15) numero = 15;  // Limitar a 15
  if (numero < 0) numero =

More projects by dave