Hello good morning, I have been developing a user call system that calls me when there is a problem with a machine.
I have developed a software that when you press a button it sends a signal to blynk iot
and it sends a notification.
I also record several temperature signals and activation of several points of the machine. I would like to know what you think of this code if you need more information I will provide it to you, the fact is that I am immersed in the project and I have several distributed devices. Sometimes the problem is that the call signal remains active and I am not able to deactivate it with the end call button until I activate and deactivate it again, then it acts.
I think one of the problems may come from the program.
I would like you to help me since I am a little overwhelmed with the failures and the thing is that I do not know where to go, I have already tried to put a restart every 4 hours but it does not work either and I think it may be counterproductive.
Another fault sometimes is that the call signal is activated alone, I have some 4k7 resistors in each of the inputs because I do not trust much the resistors of esp 32 by the way the esp is a wroom 32u I also have a capacitor in the input from 3.3v to gnd of 100uf 16v and the thing is that it does not always fail only every time and it is not cyclical,
since I do not know where it can be, what I am most urgent about is the problem that the call is not deactivated when pressing end of call and that is a software problem, let’s see what you see, thanks for your help.
greetings I hope I have not made it too thick, sorry.
//14 aceite bajo
//35 analogica entrada temperatura 10k a ,masa y potenciometro de 100k puesto a 21k
//4 baliza roja
//12 llamada operario
//32 conteo caja
//33 final de averia
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define BLYNK_TEMPLATE_ID "cgxbhgdbhg"
#define BLYNK_DEVICE_NAME "rodadura"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
#include <Preferences.h>
//#define BLYNK_DEBUG
#define APP_DEBUG
#define USE_ESP32_DEV_MODULE
#include "BlynkEdgent.h"
#include <Arduino.h>
#include <WiFi.h>
#define OLED_RESET -1 // Reset pin
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
char ssidi[] = "gfhfsdgdfg";
char passa[] = "dghdghg";
unsigned long h;//-----------------------
int j = 0;//
int l = 0;//variables desde pantalla
int n = 0;//-----------------------------
int r = 0;//variable baliza roja para que no sea pulsado mas de uan vez
int k = 0;// asegura de que no se llame a final de averia si esta en llamada operario
int o = 0;// asegura de que no se llame a final de averia si esta en llamada operario
int q = 0;//nivel minimo de aceite variable para que no sea activado continuamente
int w ;//variable contador de cajas parcial V1
int x = 0;
int z ;//variable contador de cajas total V8
int luzboton = 23;
int aceitedepo = 14;
int cero=13;
unsigned long tiempo_guardado ;
unsigned long tiempo_guardado1 ;
int llamadaoperario;
int finalaveria;
int bl ;// BALIZA ROJA
float temp = 35; //etiqueta para lectura anal�gica PARA SENSOR DE TEMPERAURA
int y = 0;
long rssi;
Preferences preference;
BLYNK_WRITE(V6) { //SENSOR MINIMO ACEITE DEL DEPOSITO esta asociada a la aplicacion atraves de V0 y V0 es correo
int pinValue = param.asInt();//asocia pinValue a un entero en este caso es V0 que es pin 5 de wemos que D1
digitalWrite(aceitedepo, pinValue);//V0 es correo
}
//-------------------------------------boleanos para los leds de la aplicacion.
BlynkTimer timer;
WidgetLED led3(V2);//ESTE ES EL LED DE LA BALIZA ROJA ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO
boolean btnState = false;
void ledblynk()
{
boolean isPressed = (digitalRead(4) == HIGH);
if (isPressed != btnState) {
if (isPressed) {
led3.on();
r = 1;
} else {
led3.off();
r = 0;
}
btnState = isPressed;
}
}
WidgetLED led4(V3);//ESTE ES EL LED DE LLAMADA DE OPERARIO ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO
boolean btnState1 = false;
void ledblynk1()
{
boolean isPressed = (digitalRead(12) == HIGH);
if (isPressed != btnState1) {
if (isPressed) {
led4.on();
k = 1;
}
btnState1 = isPressed;
}
}
WidgetLED led5(V6);//ESTE ES EL LED DE NIVEL MINIMO DE DEPOSITO ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO
boolean btnState2 = false;
void ledblynk2()
{
boolean isPressed = (digitalRead(14) == HIGH);
if (isPressed != btnState2) {
if (isPressed) {
led5.off();
unsigned long tiempo = millis();
tiempo_guardado = tiempo;
} else {
led5.on();
q = 0;
}
btnState2 = isPressed;
}
}
WidgetLED led6(V5);//ESTE ES EL LED de conteo de las cajas rodadas
boolean btnState3 = false;
void ledblynk3()
{
unsigned long tiempo = millis();
boolean isPressed = (digitalRead(32) == LOW);
if (isPressed != btnState3) {
if (isPressed) {
led6.off();
} else {
led6.on();
tiempo_guardado1 = tiempo;
x = 1;
delay(100);
}
btnState3 = isPressed;
}
}
void temperatura()
{
//++++++++++++++++++++++++++++++++++analogica de temperatura
int pot;
pot = analogRead(temp);
y = map(pot, 0, 4095, 0, 100); //funci�n map para escalado
Blynk.virtualWrite(V0, y);
Serial.println(y);
if ( y >= 80)
{
Serial.println("temperatura alta");
Blynk.logEvent("tempalta");
}
}
///-------------------------------llamada operario
void operario()
{
unsigned long tiempo = millis();
llamadaoperario = digitalRead(12);// 12 LLAMADA OPERARIO ES U positivo LA SEÑAL ES DE ENTRADA
if ( (llamadaoperario == HIGH) && ( k == 1) && (o == 0))
{
digitalWrite(luzboton, HIGH);
Serial.println("se ha pulsado boton de llamada");
Blynk.logEvent("llamaope");
ledblynk1();
o = 1;
}
}
//---------------funcion final de averia
void finalave()
{
finalaveria = digitalRead(33);
if ((finalaveria == HIGH) && (o == 1))
{
led4.off();
Blynk.virtualWrite(V7, 33);
Serial.println("se ha terminado la averia");
Blynk.logEvent("finalaveria");
o = 0;
digitalWrite(luzboton, LOW);
}
}
//----------------BALIZA ROJA
void baliza()
{
bl = digitalRead(4);
if ( (bl == HIGH) && (r == 0))
{
Serial.println("baliza roja encendida");
Blynk.logEvent("balizaroja");
ledblynk();
}
}
//-------------------resear contador parcial pin 13
void contadorcero()
{
int ceroo= digitalRead(cero);
if (ceroo==HIGH ) {
w = 0;
preference.remove("parcial");
Blynk.virtualWrite(V1, w);
Serial.println("parcial a cero");
}
}
void conteo()
{
//----------cuenta caja cada vez que se rueda 5 minutos seguidos para llevar preventivos en cuenta
unsigned long tiempo = millis();
int cuenta = digitalRead(32);//conteo cajas
if ((cuenta == 1) && (tiempo - tiempo_guardado1 >= 300000) && (btnState3 == LOW) && (x == 1)) {
preference.putUInt("parcial", w);
w++;
Blynk.virtualWrite(V1, w);
preference.putUInt("fijo", z);
z++;
Blynk.virtualWrite(V8, z);
x = 0;
Serial.println("caja rodada ");
}
}
//----------------------señal minimo de aceite
void aceite()
{
unsigned long tiempo = millis();
if ((tiempo - tiempo_guardado >= 10000) && (btnState2 == 1) && (q == 0)) //envia a los 10 segundos de falta de aceite
{
q = 1;
Serial.println("bajo nivel de aceite");
Blynk.logEvent("minimoaceite");
ledblynk2();
}
}
void rssimi()
{
rssi = WiFi.RSSI();
Blynk.virtualWrite(V9, rssi);
Serial.println(rssi);
}
void setup()
{
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
preference.begin("my-app", false);
w = preference.getUInt("parcial", 0);
z = preference.getUInt("fijo", 0);
WiFi.begin(ssidi, passa);
timer.setInterval(8209L, temperatura);
timer.setInterval(8783L, ledblynk);//baliza roja
timer.setInterval(7529L, aceite);
timer.setInterval(5839L, ledblynk2);//nivel aceite
timer.setInterval(6367L, contadorcero);
timer.setInterval(3037L, conteo);
timer.setInterval(2477L, ledblynk3);//conteo de cajas
timer.setInterval(2111L, pantalla);
timer.setInterval(1597L, baliza);
timer.setInterval(919L, ledblynk1);//led lamada operario cada 900ms
timer.setInterval(619L, operario);
timer.setInterval(439L, finalave);// se vigila cada 439ms
timer.setInterval(5209L, rssimi);
BlynkEdgent.begin();
pinMode(luzboton, OUTPUT);
pinMode(14, INPUT);
pinMode(12, INPUT);
pinMode(32, INPUT);
pinMode(33, INPUT);
pinMode(4, INPUT);
pinMode(cero, INPUT);
pinMode(2, OUTPUT);
}
void loop() {
BlynkEdgent.run();
timer.run();
unsigned long reinicio=millis();
if(reinicio == 3600000){
Serial.println("restaurando");
ESP.restart();
}
}
//-----------------------señales de pantalla
void pantalla()
{
h = digitalRead(14); // SENSOR DE ACEITE ES POSITIVO LA SEÑAL DE ENTRADA
j = digitalRead(12); // LLAMADA OPERARIO ES un positivo LA SEÑAL ES DE ENTRADA
l = digitalRead(4); // BALIZA ROJA ACTIVA LA SEÑAL DE ENTRADA ES positivo
n = digitalRead(33); // final averia ES positivo LA SEÑAL DE ENTRADA
//-----------------------------------DIBIJO DE CUADROS Y SEÑALES DE ENTRADA Y SALIDA
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,6);
display.println("LLAMADA OPERARIO");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("NUMERO RODAJES");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,36);
display.println("BALIZA ROJA");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,46);
display.println("FINAL AVERIA");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,26);
display.println("SENSOR ACEITE");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,56);
display.println("TEMPERATURA ACIT");
if (h == 0) {
display.setCursor(120, 26);
display.println("1");
}
if (h != 0) {
display.setCursor(120, 26);
display.println("0");
}
display.setCursor(114, 16);
display.println(w);
if (j == 0) { //llamada operario
display.setCursor(120, 6);
display.println("0");
}
if (j != 0) {
display.setCursor(120, 6);
display.println("1");
}
if (l != 0) {
display.setCursor(120, 36);
display.println("1");
}
if (l == 0) {
display.setCursor(120, 36);
display.println("0");
}
if (n != 0) {
display.setCursor(120, 46);
display.println("1");
}
if (n == 0) {
display.setCursor(120, 46);
display.println("0");
}
display.setCursor(114, 56);
display.println(y);
display.display();
}```