Quien me ayuda a mejorar esto ya que no me se ajustarlo para probar en Tinkercad

Lógica del programa

  1. Estado Reposo:
  • Led Rojo apagado
  • Led Verde apagado
  1. Si sensor detecta vehículo:
  • Rojo encendido
  1. Si se pulsa el botón (vehículo autorizado):
  • Verde encendido 5 segundos
  • Rojo apagado
  1. Durante esos 5 segundos:
  • Si entra otro vehículo → Verde se apaga inmediatamente y vuelve a rojo
  1. Al terminar:
  • Todo vuelve a reposo

Componentes

  • Arduino UNO
  • Sensor ultrasónico HC-SR04
  • 2 LEDs (rojo y verde) con resistencias de 220 Ω
  • Pulsador
  • Cables de conexión

Conexiones

1. Sensor ultrasónico HC-SR04

  • VCC → 5V
  • GND → GND
  • Trig → pin 5
  • Echo → pin 6

2. Botón pulsador

  • Un lado → pin 7
  • Otro lado → GND
  • En código: pinMode(7, INPUT_PULLUP)

3. LEDs

  • LED Rojo: ánodo → pin 8, cátodo → GND (resistencia 220 Ω)
  • LED Verde: ánodo → pin 9, cátodo → GND (resistencia 220 Ω)

codigo ejemplo para probar en Tinkercad

const int trigPin = 5;
const int echoPin = 6;
const int botonPin = 7;
const int ledRojo = 8;
const int ledVerde = 9;

long duracion;
int distancia;
bool enVerde = false;
unsigned long tiempoVerde = 0;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(botonPin, INPUT_PULLUP);
  pinMode(ledRojo, OUTPUT);
  pinMode(ledVerde, OUTPUT);

  digitalWrite(ledRojo, LOW);
  digitalWrite(ledVerde, LOW);
}

void loop() {
  // Medir distancia
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duracion = pulseIn(echoPin, HIGH);
  distancia = duracion * 0.034 / 2; // cm

  bool vehiculoDetectado = (distancia > 0 && distancia < 20); // Ajusta según distancia

  // Si está en verde y entra otro vehículo
  if(enVerde && vehiculoDetectado){
    enVerde = false;
    digitalWrite(ledVerde, LOW);
    digitalWrite(ledRojo, HIGH);
  }

  // Estado reposo
  if(!vehiculoDetectado && !enVerde){
    digitalWrite(ledRojo, LOW);
    digitalWrite(ledVerde, LOW);
  }

  // Vehículo detectado, rojo encendido
  if(vehiculoDetectado && !enVerde){
    digitalWrite(ledRojo, HIGH);
  }

  // Botón pulsado → verde
  if(digitalRead(botonPin) == LOW && vehiculoDetectado){
    enVerde = true;
    tiempoVerde = millis();
    digitalWrite(ledVerde, HIGH);
    digitalWrite(ledRojo, LOW);
  }

  // Mantener verde 5s
  if(enVerde && millis() - tiempoVerde >= 5000){
    enVerde = false;
    digitalWrite(ledVerde, LOW);
    digitalWrite(ledRojo, LOW);
  }

  delay(50);
}

Moderador
Coloca un titulo adecuado y lo que has puesto de título que forme parte del cuerpo del mensaje, intenta poner también la tarea que te han encomendado y se honesto, si te lo hizo ChatGPT u otra IA dilo, no pasa nada.