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("");
}