#include <LiquidCrystal.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <stdio.h>
#include <stdlib.h>
LiquidCrystal lcd(12,13,17,16,27,14);
bool entrada_anterior = 0;
unsigned long t = 0,t_pantalla = 0, t_mqtt=100;
int porcentaje = 0, porcentaje_ant = 0;;
const char* mqttServer = "instrumentacion-uji.dynv6.net";
const int mqttPort = 1883;
const char* client_name = "iluminacion_mesa01";
WiFiClient espClient;
PubSubClient client(espClient);
void PubMQTT(float potencia)
{
char str[10];
int len = snprintf(str,10, "%.2f",potencia);
client.publish("mesa01/luz/read_power",(uint8_t*) str,len,true);
Serial.print("Publicacion->");
Serial.print("mesa01/luz/read_power :");
Serial.println(str);
}
void setup() {
Serial.begin(115200);
pinMode(26, INPUT);
pinMode(25, OUTPUT);
pinMode(39, INPUT_PULLUP);
pinMode(39, INPUT_PULLUP);
lcd.begin(16, 2);
attachInterrupt(39, readEncoder, RISING);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "",6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
client.setServer(mqttServer, mqttPort);
client.setCallback(lectura);
while (!client.connected())
{ Serial.print("Connecting to MQTT...");
if (client.connect(client_name))
Serial.println("connected");
else
{ Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
client.subscribe("mesa01/luz/set_power");
PubMQTT(porcentaje);
}
void readEncoder() {
int dtValue = digitalRead(36);
if (dtValue == HIGH) {
porcentaje += 5; // Clockwise
}
if (dtValue == LOW) {
porcentaje -= 5; // Counterclockwise
}
if (porcentaje <0) porcentaje = 0;
if (porcentaje>100) porcentaje = 100;
}
void PubMQTT(float potencia)
{
char str[10];
int len = snprintf(str,10, "%.2f",potencia);
client.publish("mesa01/luz/read_power",(uint8_t*) str,len,true);
Serial.print("Publicacion->");
Serial.print("mesa01/luz/read_power :");
Serial.println(str);
}
void lectura(char* topic, byte* payload, unsigned int length)
{
Serial.print("lectura->");
Serial.print(topic);
Serial.print(" : ");
char message[length+1]={0x00};
for(int i=0;i<length;i++)
message[i]=(char)payload[i];
message[length]=0x00;
porcentaje = atoi(message);
Serial.println(porcentaje);
if (porcentaje <0) porcentaje = 0;
if (porcentaje>100) porcentaje = 100;
}
void loop() {
bool entrada = digitalRead(26);
if (entrada_anterior != entrada) {
t = 8000 - porcentaje *80;
delayMicroseconds(t); // 135º
if (porcentaje > 0)
digitalWrite(25,1);
delayMicroseconds(100);
digitalWrite(25,0);
//Serial.println(porcentaje*100);
}
if (millis()>t_pantalla){
t_pantalla += 200;
lcd.setCursor(0,0);
lcd.print(porcentaje);
lcd.print(" ");
}
if (millis()>t_mqtt) {
t_mqtt += 200;
if (porcentaje != porcentaje_ant)
PubMQTT(porcentaje);
porcentaje_ant = porcentaje;
if (!client.loop()) {
Serial.println("Desconnectado");
while (!client.connected())
{ Serial.print("Connecting to MQTT...");
if (client.connect(client_name ))
Serial.println("connected");
else
{ Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
client.subscribe("mesa01/luz/set_power");
}
}
entrada_anterior = entrada;
}
/* APARTADO DISPARO
bool entrada_anterior = 0;
void setup() {
Serial.begin(115200);
pinMode(26, INPUT);
pinMode(25, OUTPUT);
pinMode(39, INPUT_PULLUP);
pinMode(39, INPUT_PULLUP);
}
void loop() {
bool entrada = digitalRead(26);
if (entrada_anterior != entrada) {
// delayMicroseconds(2500); // 45º
//delayMicroseconds(5000); // 90º
delayMicroseconds(7500); // 135º
digitalWrite(25,1);
delayMicroseconds(100);
digitalWrite(25,0);
//Serial.println(porcentaje*100);
}
entrada_anterior = entrada;
}*/
/* APARTADO TIEMPO
bool entrada_anterior = 0;
unsigned long t = 0;
void setup() {
Serial.begin(115200);
pinMode(26, INPUT);
pinMode(25, OUTPUT);
pinMode(39, INPUT_PULLUP);
pinMode(39, INPUT_PULLUP);
}
void loop() {
bool entrada = digitalRead(26);
if (entrada_anterior != entrada) {
// delayMicroseconds(2500); // 45º
//delayMicroseconds(5000); // 90º
t = 8000 - (millis()% 4000) * 2;
delayMicroseconds(t); // 135º
digitalWrite(25,1);
delayMicroseconds(100);
digitalWrite(25,0);
//Serial.println(porcentaje*100);
}
entrada_anterior = entrada;
}*/
/* APARTADO PANTALLA
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,13,17,16,27,14);
bool entrada_anterior = 0;
unsigned long t = 0,t_pantalla = 0;
void setup() {
Serial.begin(115200);
pinMode(26, INPUT);
pinMode(25, OUTPUT);
pinMode(39, INPUT_PULLUP);
pinMode(39, INPUT_PULLUP);
lcd.begin(16, 2);
}
void loop() {
bool entrada = digitalRead(26);
if (entrada_anterior != entrada) {
// delayMicroseconds(2500); // 45º
//delayMicroseconds(5000); // 90º
t = 8000 - (millis()% 4000) * 2;
delayMicroseconds(t); // 135º
digitalWrite(25,1);
delayMicroseconds(100);
digitalWrite(25,0);
//Serial.println(porcentaje*100);
}
if (millis()>t_pantalla){
t_pantalla += 200;
lcd.setCursor(0,0);
lcd.print(100 - t / 80);
lcd.print(" ");
}
entrada_anterior = entrada;
}
*/
/* APARTADO ENCODER
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,13,17,16,27,14);
bool entrada_anterior = 0;
unsigned long t = 0,t_pantalla = 0;
int porcentaje = 0;
void setup() {
Serial.begin(115200);
pinMode(26, INPUT);
pinMode(25, OUTPUT);
pinMode(39, INPUT_PULLUP);
pinMode(39, INPUT_PULLUP);
lcd.begin(16, 2);
attachInterrupt(39, readEncoder, RISING);
}
void readEncoder() {
int dtValue = digitalRead(36);
if (dtValue == HIGH) {
porcentaje += 5; // Clockwise
}
if (dtValue == LOW) {
porcentaje -= 5; // Counterclockwise
}
if (porcentaje <0) porcentaje = 0;
if (porcentaje>100) porcentaje = 100;
}
void loop() {
bool entrada = digitalRead(26);
if (entrada_anterior != entrada) {
// delayMicroseconds(2500); // 45º
//delayMicroseconds(5000); // 90º
t = 8000 - porcentaje *80;
delayMicroseconds(t); // 135º
if (porcentaje > 0)
digitalWrite(25,1);
delayMicroseconds(100);
digitalWrite(25,0);
//Serial.println(porcentaje*100);
}
if (millis()>t_pantalla){
t_pantalla += 200;
lcd.setCursor(0,0);
lcd.print(porcentaje);
lcd.print(" ");
}
entrada_anterior = entrada;
}*/
/*
unsigned long t = 0;
bool entrada_anterior = 0;
int porcentaje = 5;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(26, INPUT);
pinMode(25, OUTPUT);
pinMode(39, INPUT_PULLUP);
pinMode(39, INPUT_PULLUP);
attachInterrupt(39, readEncoder, RISING);
}
void readEncoder() {
int dtValue = digitalRead(36);
if (dtValue == HIGH) {
porcentaje += 5; // Clockwise
}
if (dtValue == LOW) {
porcentaje -= 5; // Counterclockwise
}
if (porcentaje <10) porcentaje = 5;
if (porcentaje>100) porcentaje = 100;
}
void loop() {
bool entrada = digitalRead(26);
if (entrada_anterior != entrada) {
delayMicroseconds(100*(100-porcentaje));
digitalWrite(25,1);
delayMicroseconds(100);
digitalWrite(25,0);
//Serial.println(porcentaje*100);
}
entrada_anterior = entrada;
}*/