// SPDX-License-Identifier: MIT // Saída digital: acionar um módulo relé (Arduino Uno) // Módulo relé na porta digital 5, acionado pelo botão da entrada 4. // O botão da entrada 2 continua ligando o LED 13, como no experimento anterior. // // Ligações: // Botão A: pino 2 <-> GND Botão B: pino 4 <-> GND // Módulo relé: VCC -> 5V, GND -> GND, IN1 -> pino 5 // Carga do relé: use uma lâmpada/LED de BAIXA TENSÃO para aprender. // Rede 110/220 V só com supervisão e isolamento adequado: é perigoso de verdade. // // Um módulo pode ser ativo em LOW ou em HIGH. Identifique o modelo e teste com carga de baixa tensão. const int PINO_BOTAO_LED = 2; const int PINO_BOTAO_RELE = 4; const int PINO_RELE = 5; const int PINO_LED = 13; const bool RELE_ATIVO_EM_LOW = true; // troque para false se o seu módulo ligar com HIGH void setup() { // No ATmega328P, reset deixa o pino em alta impedância. Pré-carregamos PORT antes de habilitar a saída. // Para configurar saída HIGH, isso evita a passagem por saída LOW nessa transição; não prova todo o boot. digitalWrite(PINO_RELE, RELE_ATIVO_EM_LOW ? HIGH : LOW); // pede o nível desligado deste módulo identificado pinMode(PINO_RELE, OUTPUT); pinMode(PINO_BOTAO_LED, INPUT_PULLUP); pinMode(PINO_BOTAO_RELE, INPUT_PULLUP); pinMode(PINO_LED, OUTPUT); } void loop() { bool botaoLed = (digitalRead(PINO_BOTAO_LED) == LOW); // LOW = apertado bool botaoRele = (digitalRead(PINO_BOTAO_RELE) == LOW); digitalWrite(PINO_LED, botaoLed ? HIGH : LOW); bool nivelParaLigar = RELE_ATIVO_EM_LOW ? LOW : HIGH; digitalWrite(PINO_RELE, botaoRele ? nivelParaLigar : !nivelParaLigar); } // Curiosidade útil: com pull-up (apertado = LOW) e módulo ativo em LOW, as duas inversões se cancelam, // então "digitalWrite(PINO_RELE, digitalRead(PINO_BOTAO_RELE));" também funciona. Mas o código acima // deixa a intenção explícita, o que vale mais quando o projeto crescer.