#define RED_LED_PIN 27
#define YELLOW_LED_PIN 26
#define GREEN_LED_PIN 25
#define BUTTON_PIN 14
#define SEGMENT_A_PIN 23
#define SEGMENT_B_PIN 22
#define SEGMENT_C_PIN 21
#define SEGMENT_D_PIN 19
#define SEGMENT_E_PIN 18
#define SEGMENT_F_PIN 5
#define SEGMENT_G_PIN 4
int segmentPins[] = {
SEGMENT_A_PIN,
SEGMENT_B_PIN,
SEGMENT_C_PIN,
SEGMENT_D_PIN,
SEGMENT_E_PIN,
SEGMENT_F_PIN,
SEGMENT_G_PIN
};
int segmentOnValues[] = {
B0000001, // 0 = a
B1001111, // 1 = b
B0010010, // 2 = c
B0000110, // 3 = d
B1001100, // 4 = e
B0100100, // 5 = f
B0100000, // 6 = g
B0000000, // 7 = desligado
};
int segmentState[] = {0, 0, 0, 0}; // Estado atual de cada dígito do display
unsigned long segmentLastUpdateTime = 0;
int state = 0; // 0 = vermelho, 1 = verde, 2 = amarelo
bool buttonPressed = false;
unsigned long buttonPressTime = 0;
unsigned long counterStartTime = 0;
unsigned long lastTickTime = 0;
void setup() {
pinMode(RED_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
updateDisplay();
}
void loop() {
// Verifica se o botão foi pressionado
if (!buttonPressed && digitalRead(BUTTON_PIN) == LOW) {
buttonPressed = true;
buttonPressTime = millis();
}
// Verifica se o botão foi solto
if (buttonPressed && digitalRead(BUTTON_PIN) == HIGH) {
buttonPressed = false;
if (state == 0) { // Botão pressionado quando o sinal está vermelho
counterStartTime = millis(); // Inicia a contagem de 10 segundos
}
}
// Verifica se o tempo de contagem de 10 segundos acabou
if (state == 0 && counterStartTime != 0 && millis() - counterStartTime >= 10000) {
counterStartTime = 0;
state = 1; // Troca o sinal para verde
updateDisplay();
}
// Verifica se é necessário trocar o estado do sinal
if (state == 0 && millis() - lastTickTime >= 1000) {
lastTickTime = millis();
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, HIGH);
delay(500);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
state = 2;
updateDisplay();
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
sevseg1:COM.1
sevseg1:COM.2
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led4:A
led4:C
led5:A
led5:C