// SPDX-License-Identifier: MIT // Desafio de criação: dois toques, um aviso. // Dois fins de curso (botões) param o "motor" (módulo relé). Sem debounce: o trinco espera soltar. // Esquerda no pino 2, direita no pino 4, ambos INPUT_PULLUP; relé no pino 5, ativo em LOW. // Mistura o que você aprendeu: Serial, entrada digital com pull-up e saída digital. const int BUMPER_ESQ = 2; const int BUMPER_DIR = 4; const int PINO_MOTOR = 5; // módulo relé, ativo em LOW const int PINO_LED = 13; void setup() { // No Uno, pré-carregar HIGH antes de OUTPUT evita uma passagem por saída LOW nesta configuração. // Reset deixa o pino em alta impedância; esta ordem não prova o estado da carga durante todo o boot. digitalWrite(PINO_MOTOR, HIGH); // pede o nível desligado do módulo ativo em LOW identificado pinMode(PINO_MOTOR, OUTPUT); Serial.begin(9600); pinMode(BUMPER_ESQ, INPUT_PULLUP); pinMode(BUMPER_DIR, INPUT_PULLUP); pinMode(PINO_LED, OUTPUT); Serial.println("Pronto. Motor ligando em 2 s..."); delay(2000); digitalWrite(PINO_MOTOR, LOW); // liga o motor (relé ativo em LOW) } void loop() { bool bateuEsq = (digitalRead(BUMPER_ESQ) == LOW); bool bateuDir = (digitalRead(BUMPER_DIR) == LOW); if (bateuEsq || bateuDir) { digitalWrite(PINO_MOTOR, HIGH); // corta o motor imediatamente Serial.print("Colisao: "); if (bateuEsq && bateuDir) { Serial.println("os dois"); } else if (bateuEsq) { Serial.println("esquerda"); } else { Serial.println("direita"); } for (int i = 0; i < 3; i++) { // pisca 3 vezes digitalWrite(PINO_LED, HIGH); delay(150); digitalWrite(PINO_LED, LOW); delay(150); } while (digitalRead(BUMPER_ESQ) == LOW || digitalRead(BUMPER_DIR) == LOW) { // espera soltar os dois botões (sem debounce: pode repetir ao soltar) } Serial.println("Livre. Motor religando."); digitalWrite(PINO_MOTOR, LOW); } } // Variações para você criar: // 1. Trocar o relé por um LED "motor" se ainda não tiver o módulo. // 2. Contar as colisões e imprimir o total na Serial. // 3. No ESP32-S3: GPIO4/GPIO6 nos botões, GPIO5 só após verificar a interface do relé e neopixelWrite() em vermelho. // Siga a sequência e os limites de ex5_rele_esp32s3.ino; o pré-carregamento do Uno não se transfere ao ESP32-S3.