Ovladani LED pres web - nahodne zapinani
Napsal: 20 kvě 2020, 15:42
Ahoj, mam problem s ovladanim lLED lampicky pres webove rozhrani. Už to hodne dlouho zkoušim odhalit sam ale jesm na to kratky.
Je to jednoducha lampicka ktera se ovlada bud kapacitnim tlacitkem nebo pres web stranku. Jeden dotyk tlacitka lampicku rozsvítí nebo zhasne, delší přidržení nastavuje intenzitu. Ovladani tlacitkem je v poho a funguje spolehlive (otestovano tak ze jsem odstranil kod ktery řeší ovladni pres web).
Na web strance je
- tlacitko vypnout
- tlacitko zapnout
- nastaveni nekolika stupnu intenzity pomoci samostatnych tlacikek
- tlačítko pro refresh (nacteni aktualně nastavené intenzity pokud se změní manualne
- tlacitko pro stažení nové verze programu z webu
Problem je že se lampička v nahodnych intervalech sama zapina, meí se intenzita - občas se zapne, probehne par cyklu od min po max intenzitu pak sviti vypne se apod. Je to jako by ji ridil duch Delal jsem podobnych lampicek vic a vsechny trpeli stejnym neduhem - vetsinou jsem vyresil odstranenm weboveho ovladani ale zrovna u jedne se to dost hodi.
Mohl by se prosim nekdo mrknout na kod a poradit?
Diky...
Je to jednoducha lampicka ktera se ovlada bud kapacitnim tlacitkem nebo pres web stranku. Jeden dotyk tlacitka lampicku rozsvítí nebo zhasne, delší přidržení nastavuje intenzitu. Ovladani tlacitkem je v poho a funguje spolehlive (otestovano tak ze jsem odstranil kod ktery řeší ovladni pres web).
Na web strance je
- tlacitko vypnout
- tlacitko zapnout
- nastaveni nekolika stupnu intenzity pomoci samostatnych tlacikek
- tlačítko pro refresh (nacteni aktualně nastavené intenzity pokud se změní manualne
- tlacitko pro stažení nové verze programu z webu
Problem je že se lampička v nahodnych intervalech sama zapina, meí se intenzita - občas se zapne, probehne par cyklu od min po max intenzitu pak sviti vypne se apod. Je to jako by ji ridil duch Delal jsem podobnych lampicek vic a vsechny trpeli stejnym neduhem - vetsinou jsem vyresil odstranenm weboveho ovladani ale zrovna u jedne se to dost hodi.
Mohl by se prosim nekdo mrknout na kod a poradit?
Diky...
Kód: Vybrat vše
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
#include "OTAweb.h"
#include <ESP8266WiFiMulti.h>
#include <Wire.h>
ESP8266WiFiMulti wifiMulti;
// inicializace WiFi v módu klienta
WiFiClient client;
WiFiServer server(80);
int WiFiStrength = 0;
int buttonPIN = 14;
int ledPIN = 15;
int ButtonValue;
int Old_ButtonValue;
int LightOn = 0;
int Brightness = 0;
unsigned long startTime = 0;
int intenzita = 0;
void setup() {
Serial.begin(115200);
pinMode(ledPIN, OUTPUT);
pinMode(buttonPIN, INPUT);
StartWiFi();
StartSERVER();
}
void loop() {
WiFiStrength = WiFi.RSSI();
unsigned long currentLCDMillis = millis();
ledControl();
showWEB();
}
//#########################################################################################
void ledControl(){
ButtonValue = digitalRead(buttonPIN); //precteni stavu tlacitka a nastaveni stavu pinu - HIGH nebo LOW
//pokud je stisknuto stav vystupu je HIGH
if((ButtonValue == HIGH) && (Old_ButtonValue == LOW)) { //podminka která řídí že pokud je předchozí stav LOW tak se nastavi HIGH
LightOn = 1 - LightOn; // nastavení stavu svetla 1 - svetlo svítí , 0 je vypnuto)
startTime = millis(); // sledovani času jak dlouho je stisknuto tlačítko
delay(10);
}
if((ButtonValue == HIGH) && (Old_ButtonValue == HIGH)){ // sledovani jestli je tlacitko stisknuto
if(LightOn == 1 && (millis() - startTime) > 20){ //pokud je tlacitko stisknuto dele nez 20ms
// Brightness ++; //zvyseni intenzity
Brightness = Brightness + 10; //nastaveni přírustku intenzity
delay(35);
if(Brightness > 1023){ //pokud intenzita dosahne maxima 1023
Brightness = 0; // reset intenzity na 0
}
}
}
Old_ButtonValue = ButtonValue;
if(LightOn == 1) { //pokud svetlo svítí
analogWrite(ledPIN, Brightness); //nastavi se puvodní intenzita
} else {
analogWrite(ledPIN, 0); // nebo se svetlo vypne
}
intenzita = map(Brightness, 0, 1023, 0, 100);
Serial.println(Brightness);
}
//#########################################################################################
void StartWiFi(){
WiFi.mode(WIFI_STA);
wifiMulti.addAP("jmeno", "heslo");
wifiMulti.addAP("jmeno", "heslo");
wifiMulti.addAP("jmeno", "heslo");
wifiMulti.addAP("jmeno", "heslo");
Serial.println("Connecting ...");
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(WiFi.SSID());
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
//#########################################################################################
void StartSERVER(){
server.begin(); //Start server
Serial.println("HTTP server started");
delay(1500);
}
//#########################################################################################
void showWEB(){
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println("new client");
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
if (request.indexOf("/ZapnoutSvetlo") != -1) {
LightOn = 1;
analogWrite(ledPIN, Brightness);
}
if (request.indexOf("/VypnoutSvetlo") != -1) {
analogWrite(ledPIN, 0);
LightOn = 0;
}
if (request.indexOf("/10") != -1) {
Brightness = 100;
}
if (request.indexOf("/25") != -1) {
Brightness = 250;
}
if (request.indexOf("/50") != -1) {
Brightness = 500;
}
if (request.indexOf("/75") != -1) {
Brightness = 750;
}
if (request.indexOf("/100") != -1) {
Brightness = 1023;
}
if (request.indexOf("/OTAupdate") != -1) {
checkForUpdates();
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println(" <head>");
client.println(" <title>Lampicka</title>");
client.println(" </head>");
client.println(" <body>");
client.print("<h1 style=\"position: absolute; left: 275px; top: 0px\">Lampicka</h1><br>");
if(LightOn == 1) {
client.print("<div style=\"position: absolute; left: 50px; top: 70px\"><img src=\"http://coxx.4fan.cz/web/power_switch.png\" style=\"width: 250px; height: 250px\"></div>");
client.print("<a href=\"/VypnoutSvetlo\"><div style=\"position: absolute; left: 425px; top: 70px\"><img src=\"http://coxx.4fan.cz/web/power_off.png\" style=\"width: 250px; height: 250px\"></div></a>");
} else {
client.print("<a href=\"/ZapnoutSvetlo\"><div style=\"position: absolute; left: 50px; top: 70px\"><img src=\"http://coxx.4fan.cz/web/power_on.png\" style=\"width: 250px; height: 250px\"></div></a>");
client.print("<div style=\"position: absolute; left: 425px; top: 70px\"><img src=\"http://coxx.4fan.cz/web/power_switch.png\" style=\"width: 250px; height: 250px\"></div>");
}
client.print("<div style=\"position: absolute; left: 325px; top: 180px; font-size:40px; color:grey; font-weight: bold\">");
client.println(intenzita);
client.print("%");
client.print("</div>");
client.println("<a href=\"/10\"\"><div style=\"position: absolute; left: 50px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">10%</div></a>");
client.println("<a href=\"/25\"\"><div style=\"position: absolute; left: 165px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">25%</div></a>");
client.println("<a href=\"/50\"\"><div style=\"position: absolute; left: 280px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">50%</div></a>");
client.println("<a href=\"/75\"\"><div style=\"position: absolute; left: 395px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">75%</div></a>");
client.println("<a href=\"/100\"\"><div style=\"position: absolute; left: 510px; top: 375px; width: 75px; height: 15px; background-color: grey; border: red; color: white; font-weight: bold; text-align: center; padding: 5px;\">100%</div></a>");
client.print("<p>");
client.print("<div style=\"position: absolute; left: 12px; top: 700px; font-size:12px\"");
client.print("Pripojeno do WiFi: ");
client.println("<b>");
client.println(WiFi.SSID());
client.println("</b>");
client.print("<br>");
client.print("Sila WiFi signalu ");
client.println(WiFiStrength);
client.println("dBm<br>");
client.println("<p><a href=\"/REFRESH\"\"><button>Refresh</button></a></p>");
client.print("<p>Verze Firmware: 00");
client.print(FW_VERSION);
client.print("<br>Dostupna verze na serveru: ");
client.print(newOTAFW);
client.println("<p><a href=\"/OTAupdate\"\"><button>Firmware update</button></a></p>");
client.print("</p>");
client.println("</div>");
client.println("<body>");
client.println("</html>");
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}