0% acharam este documento útil (0 voto)
4 visualizações5 páginas

Programa Arduino

O documento é um código para um sistema de semáforos controlado por Bluetooth usando um microcontrolador ESP32. Ele permite alternar entre modos automático e manual, controlando os sinais de três semáforos com LEDs. O sistema possui funções para acender e apagar os LEDs de cada semáforo em diferentes estados (verde, amarelo e vermelho) com temporizações definidas.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações5 páginas

Programa Arduino

O documento é um código para um sistema de semáforos controlado por Bluetooth usando um microcontrolador ESP32. Ele permite alternar entre modos automático e manual, controlando os sinais de três semáforos com LEDs. O sistema possui funções para acender e apagar os LEDs de cada semáforo em diferentes estados (verde, amarelo e vermelho) com temporizações definidas.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

#include <BluetoothSerial.

h>

BluetoothSerial BT;

// Pines para SEMAFOROS

// Semáforo 1
int R1 = 2;
int AM1 = 4;
int V1 = 5;

// Semáforo 2
int R2 = 12;
int AM2 = 13;
int V2 = 14;

// Semáforo 3
int R3 = 25;
int AM3 = 26;
int V3 = 27;

// Variables del sistema


String cmd = "";
bool modoAuto = false;

unsigned long lastChange = 0;


int estadoSemaforo = 0; // 0=Verde, 1=Amarillo, 2=Rojo

unsigned long tVerde = 5000;


unsigned long tAmarillo = 2000;
unsigned long tRojo = 5000;

// ======================================
// SETUP
// ======================================
void setup() {

pinMode(R1, OUTPUT); pinMode(AM1, OUTPUT); pinMode(V1, OUTPUT);


pinMode(R2, OUTPUT); pinMode(AM2, OUTPUT); pinMode(V2, OUTPUT);
pinMode(R3, OUTPUT); pinMode(AM3, OUTPUT); pinMode(V3, OUTPUT);

apagarTodo();
[Link](115200);

if (![Link]("ESP32_SEMAFORO")) {
[Link]("Error iniciando Bluetooth");
} else {
[Link]("Bluetooth iniciado como ESP32_SEMAFORO");
}
}

// ======================================
// LOOP
// ======================================
void loop() {

// -------- LECTURA DE BLUETOOTH --------


if ([Link]()) {
char c = [Link]();

if (c == '\n') {
procesarComando(cmd);
cmd = "";
} else {
cmd += c;
}
}

// -------- MODO AUTOMÁTICO --------


if (modoAuto) {
cicloAutomatico();
}
}

// ======================================
// MANEJO DE COMANDOS
// ======================================
void procesarComando(String c) {
[Link]();

// ----- activar ciclo automático -----


if (c == "AUTO") {
modoAuto = true;
estadoSemaforo = 0;
lastChange = millis();
[Link]("Modo automatico activado");
return;
}

// ----- volver a modo manual -----


if (c == "MAN") {
modoAuto = false;
apagarTodo();
[Link]("Modo manual activado");
return;
}

// Si está en automático, ignoramos comandos manuales


if (modoAuto) return;

// ============ SEMÁFORO 1 ============


if (c == "A") digitalWrite(R1, HIGH);
if (c == "a") digitalWrite(R1, LOW);

if (c == "B") digitalWrite(AM1, HIGH);


if (c == "b") digitalWrite(AM1, LOW);

if (c == "C") digitalWrite(V1, HIGH);


if (c == "c") digitalWrite(V1, LOW);

// ============ SEMÁFORO 2 ============


if (c == "D") digitalWrite(R2, HIGH);
if (c == "d") digitalWrite(R2, LOW);

if (c == "E") digitalWrite(AM2, HIGH);


if (c == "e") digitalWrite(AM2, LOW);

if (c == "F") digitalWrite(V2, HIGH);


if (c == "f") digitalWrite(V2, LOW);

// ============ SEMÁFORO 3 ============


if (c == "G") digitalWrite(R3, HIGH);
if (c == "g") digitalWrite(R3, LOW);

if (c == "H") digitalWrite(AM3, HIGH);


if (c == "h") digitalWrite(AM3, LOW);

if (c == "I") digitalWrite(V3, HIGH);


if (c == "i") digitalWrite(V3, LOW);
[Link]("OK: ");
[Link](c);
}

// ======================================
// CICLO AUTOMÁTICO
// ======================================
void cicloAutomatico() {
unsigned long tiempo = millis();

switch (estadoSemaforo) {

case 0: // VERDE
if (tiempo - lastChange == 0) encenderVerde();
if (tiempo - lastChange >= tVerde) {
estadoSemaforo = 1;
lastChange = tiempo;
}
break;

case 1: // AMARILLO
if (tiempo - lastChange == 0) encenderAmarillo();
if (tiempo - lastChange >= tAmarillo) {
estadoSemaforo = 2;
lastChange = tiempo;
}
break;

case 2: // ROJO
if (tiempo - lastChange == 0) encenderRojo();
if (tiempo - lastChange >= tRojo) {
estadoSemaforo = 0;
lastChange = tiempo;
}
break;
}
}

// ======================================
// FUNCIONES DE SEMÁFORO
// ======================================
void encenderVerde() {
apagarTodo();
digitalWrite(V1, HIGH);
digitalWrite(V2, HIGH);
digitalWrite(V3, HIGH);
}

void encenderAmarillo() {
apagarTodo();
digitalWrite(AM1, HIGH);
digitalWrite(AM2, HIGH);
digitalWrite(AM3, HIGH);
}

void encenderRojo() {
apagarTodo();
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(R3, HIGH);
}

void apagarTodo() {
digitalWrite(R1, LOW); digitalWrite(AM1, LOW); digitalWrite(V1,
LOW);
digitalWrite(R2, LOW); digitalWrite(AM2, LOW); digitalWrite(V2,
LOW);
digitalWrite(R3, LOW); digitalWrite(AM3, LOW); digitalWrite(V3,
LOW);
}

Você também pode gostar