#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL2-ZWAH_qw"
#define BLYNK_TEMPLATE_NAME "IoT Esp32"
#define BLYNK_AUTH_TOKEN "7rDNZ51KF-J56qANqXQ5jJwixRq3cf9s"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Definição dos pinos
#define S1 2
#define S2 19
#define S3 18
#define S4 5
#define S5 17
#define S6 16
#define F1 34
#define F2 35
#define F3 32
#define R 0
int piecesDelivered = 0; // Contador de peças entregues
bool lastS4State = LOW; // Armazena o estado anterior de S4
bool lastRState = LOW; // Armazena o estado anterior do botão de reset físico
// Armazena o estado anterior dos botões
int lastS1State = LOW, lastS2State = LOW, lastS3State = LOW;
int lastS5State = LOW, lastS6State = LOW;
int lastF1State = LOW, lastF2State = LOW, lastF3State = LOW;
void setup() {
Serial.begin(115200);
// Inicializa os pinos como entradas
pinMode(S1, INPUT);
pinMode(S2, INPUT);
pinMode(S3, INPUT);
pinMode(S4, INPUT);
pinMode(S5, INPUT);
pinMode(S6, INPUT);
pinMode(F1, INPUT);
pinMode(F2, INPUT);
pinMode(F3, INPUT);
pinMode(R, INPUT);
// Conecta ao Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run();
// Leitura das entradas digitais
int s1_state = digitalRead(S1);
int s2_state = digitalRead(S2);
int s3_state = digitalRead(S3);
int s4_state = digitalRead(S4);
int s5_state = digitalRead(S5);
int s6_state = digitalRead(S6);
int f1_state = digitalRead(F1);
int f2_state = digitalRead(F2);
int f3_state = digitalRead(F3);
int r_state = digitalRead(R); // Leitura do botão de reset físico
// Verifica se o sinal S4 (Peça Entregue) mudou de LOW para HIGH
if (s4_state == HIGH && lastS4State == LOW) {
piecesDelivered++; // Incrementa o contador de peças entregues
Serial.print("Peças entregues: ");
Serial.println(piecesDelivered);
Blynk.virtualWrite(V10, piecesDelivered); // Envia a contagem para o Blynk (V10)
}
// Atualiza o estado anterior de S4
lastS4State = s4_state;
// Verifica se o botão de reset físico foi acionado
if (r_state == HIGH && lastRState == LOW) {
piecesDelivered = 0; // Zera a contagem de peças
Serial.println("Sistema resetado pelo botão físico.");
Blynk.virtualWrite(V10, piecesDelivered); // Atualiza o valor no Blynk
}
lastRState = r_state; // Atualiza o estado anterior do botão físico
// Envia dados para o Blynk apenas se o estado mudar
if (s1_state != lastS1State) {
Blynk.virtualWrite(V0, s1_state); // S1: Comando ligado
lastS1State = s1_state;
}
if (s2_state != lastS2State) {
Blynk.virtualWrite(V1, s2_state); // S2: Presença peça
lastS2State = s2_state;
}
if (s3_state != lastS3State) {
Blynk.virtualWrite(V2, s3_state); // S3: Peça posição
lastS3State = s3_state;
}
if (s5_state != lastS5State) {
Blynk.virtualWrite(V4, s5_state); // S5: Reinicia ciclo
lastS5State = s5_state;
}
if (s6_state != lastS6State) {
Blynk.virtualWrite(V5, s6_state); // S6: Sinal de caixa cheia
lastS6State = s6_state;
}
if (f1_state != lastF1State) {
Blynk.virtualWrite(V6, f1_state); // F1: Falha esteira
lastF1State = f1_state;
}
if (f2_state != lastF2State) {
Blynk.virtualWrite(V7, f2_state); // F2: Falha cilindro posição
lastF2State = f2_state;
}
if (f3_state != lastF3State) {
Blynk.virtualWrite(V8, f3_state); // F3: Falha robô
lastF3State = f3_state;
}
delay(50); // Pequena pausa entre as leituras
}
// Callback para o botão de reset virtual no Blynk (V11)
BLYNK_WRITE(V11) {
int buttonState = param.asInt();
if (buttonState == 1) {
piecesDelivered = 0; // Zera a contagem de peças
Serial.println("Sistema resetado pelo Blynk.");
Blynk.virtualWrite(V10, piecesDelivered); // Atualiza o valor no Blynk
}
}
BLYNK_WRITE(V12) {
int buttonState = param.asInt();
if (buttonState == 1) {
digitalWrite(S1, HIGH);
Serial.println("Comando ligado");
} else {
digitalWrite(S1, LOW);
Serial.println("Comando desligado");
}
}