Buttons done

This commit is contained in:
Dmitry Borisenko
2020-07-31 00:56:10 +02:00
parent b0fe94ddd4
commit 217cdfc080
5 changed files with 117 additions and 143 deletions

View File

@@ -1,38 +1,39 @@
#pragma once #pragma once
#include <Arduino.h> #include <Arduino.h>
#include "Class/Button.h"
#include "Global.h" #include "Global.h"
class Item { class LineParsing {
protected: protected:
String type; String _type;
String key; String _key;
String file; String _file;
String page; String _page;
String descr; String _descr;
String order; String _order;
String addr; String _addr;
String pin; String _pin;
String map; String _map;
String c; String _c;
String inv; String _inv;
String state; String _state;
public: public:
Item() : type{""}, LineParsing() :
key{""},
file{""}, _type{""},
page{""}, _key{""},
descr{""}, _file{""},
order{""}, _page{""},
addr{""}, _descr{""},
pin{""}, _order{""},
map{""}, _addr{""},
c{""}, _pin{""},
inv{""}, _map{""},
state{""} _c{""},
_inv{""},
_state{""}
{}; {};
@@ -40,72 +41,72 @@ class Item {
//String order = sCmd.order(); //String order = sCmd.order();
//pm.info("create '" + order + "'"); //pm.info("create '" + order + "'");
for (int i = 1; i < 12; i++) { for (int i = 1; i < 12; i++) {
if (i == 1) type = sCmd.next(); if (i == 1) _type = sCmd.next();
if (i == 2) key = sCmd.next(); if (i == 2) _key = sCmd.next();
if (i == 3) file = sCmd.next(); if (i == 3) _file = sCmd.next();
if (i == 4) page = sCmd.next(); if (i == 4) _page = sCmd.next();
if (i == 5) descr = sCmd.next(); if (i == 5) _descr = sCmd.next();
if (i == 6) order = sCmd.next(); if (i == 6) _order = sCmd.next();
} }
for (int i = 1; i < 6; i++) { for (int i = 1; i < 6; i++) {
String arg = sCmd.next(); String arg = sCmd.next();
if (arg != "") { if (arg != "") {
if (arg.indexOf("pin[") != -1) { if (arg.indexOf("pin[") != -1) {
pin = extractInner(arg); _pin = extractInner(arg);
} }
if (arg.indexOf("inv[") != -1) { if (arg.indexOf("inv[") != -1) {
inv = extractInner(arg); _inv = extractInner(arg);
} }
if (arg.indexOf("st[") != -1) { if (arg.indexOf("st[") != -1) {
state = extractInner(arg); _state = extractInner(arg);
} }
} }
} }
createWidgetClass(descr, page, order, file, key); createWidgetClass(_descr, _page, _order, _file, _key);
} }
String gtype() { String gtype() {
return type; return _type;
} }
String gkey() { String gkey() {
return key; return _key;
} }
String gfile() { String gfile() {
return file; return _file;
} }
String gpage() { String gpage() {
return page; return _page;
} }
String gdescr() { String gdescr() {
return descr; return _descr;
} }
String gorder() { String gorder() {
return order; return _order;
} }
String gpin() { String gpin() {
return pin; return _pin;
} }
String ginv() { String ginv() {
return inv; return _inv;
} }
String gstate() { String gstate() {
return state; return _state;
} }
void clear() { void clear() {
type = ""; _type = "";
key = ""; _key = "";
file = ""; _file = "";
page = ""; _page = "";
descr = ""; _descr = "";
order = ""; _order = "";
addr = ""; _addr = "";
pin = ""; _pin = "";
map = ""; _map = "";
c = ""; _c = "";
inv = ""; _inv = "";
state = ""; _state = "";
} }
String extractInnerDigit(String str) { String extractInnerDigit(String str) {
@@ -147,5 +148,3 @@ class Item {
return "/widgets/" + name + ".json"; return "/widgets/" + name + ".json";
} }
}; };
extern Item* myItem;

View File

@@ -1,35 +1,44 @@
#pragma once #pragma once
#include <Arduino.h> #include <Arduino.h>
#include "Class/LineParsing.h"
#include "Class/Item.h"
#include "Global.h" #include "Global.h"
class Button : public Item { class Button : public LineParsing {
public: public:
Button() : Item() {}; Button() : LineParsing(){};
void pinModeSet(int pinf) { void pinModeSet() {
if (pin != "") { if (_pin != "") {
pinMode(pinf, OUTPUT); Serial.println(_pin);
pinMode(_pin.toInt(), OUTPUT);
} }
} }
void pinStateSet(int pinf, int statef) { void pinStateSetDefault() {
if (state != "") { if (_inv == "" && _state != "") {
digitalWrite(pinf, statef); pinChange(_key, _pin, _state, true);
jsonWriteInt(configLiveJson, key, statef);
MqttClient::publishStatus(key, String(statef));
} }
} }
void pinStateSetInv(int pinf, int statef) { void pinStateSetInvDefault() {
if (inv != "" && state != "") { if (_inv != "" && _state != "") {
digitalWrite(pinf, !statef); pinChange(_key, _pin, _state, false);
jsonWriteInt(configLiveJson, key, !statef);
MqttClient::publishStatus(key, String(!statef));
} }
} }
void pinChange(String key, String pin, String state, bool rev) {
int pinInt = pin.toInt();
int stateInt;
if (rev) {
digitalWrite(pinInt, state.toInt());
} else {
digitalWrite(pinInt, !state.toInt());
}
eventGen(key, "");
jsonWriteInt(configLiveJson, key, state.toInt());
MqttClient::publishStatus(key, state);
}
}; };
extern Button* myClass; extern Button* myButton;

View File

@@ -1,4 +1,3 @@
#include "Class/Button.h" #include "Class/Button.h"
Button* myButton;
Button* myClass;

View File

@@ -1,4 +0,0 @@
#include "Class/Item.h"
Item* myItem;

View File

@@ -1,7 +1,7 @@
#include "Cmd.h" #include "Cmd.h"
#include "Class/Item.h"
#include "Class/Button.h" #include "Class/Button.h"
#include "Class/LineParsing.h"
#include "Global.h" #include "Global.h"
#include "Module/Terminal.h" #include "Module/Terminal.h"
#include "Servo/Servos.h" #include "Servo/Servos.h"
@@ -101,63 +101,35 @@ void cmd_init() {
handle_time_init(); handle_time_init();
myItem = new Item(); myButton = new Button();
myClass = new Button();
} }
//==========================================Модуль кнопок=================================================== //==========================================Модуль кнопок===================================================
//button out light toggle Кнопки Свет 1 pin[12] inv[1] st[1] //button out light toggle Кнопки Свет 1 pin[12] inv[1] st[1]
//========================================================================================================== //==========================================================================================================
void button() { void button() {
myItem->update(); myButton->update();
String key = myItem->gkey(); String key = myButton->gkey();
String pin = myItem->gpin(); String pin = myButton->gpin();
String inv = myItem->ginv(); String inv = myButton->ginv();
String state = myItem->gstate();
sCmd.addCommand(key.c_str(), buttonSet); sCmd.addCommand(key.c_str(), buttonSet);
jsonWriteStr(configOptionJson, key + "_pin", pin);
jsonWriteStr(configOptionJson, key + "_inv", inv);
myClass->pinModeSet(pin.toInt()); myButton->pinModeSet();
myButton->pinStateSetDefault();
if (pin != "") { myButton->pinStateSetInvDefault();
pinMode(pin.toInt(), OUTPUT); myButton->clear();
jsonWriteInt(configOptionJson, key + "_pin", pin.toInt());
}
if (inv != "") {
digitalWrite(pin.toInt(), !state.toInt());
jsonWriteStr(configLiveJson, key, state);
MqttClient::publishStatus(key, state);
}
if (state != "") {
digitalWrite(pin.toInt(), state.toInt());
jsonWriteStr(configLiveJson, key, state);
MqttClient::publishStatus(key, state);
}
myItem->clear();
} }
void buttonSet() { void buttonSet() {
String key = sCmd.order(); String key = sCmd.order();
String state = sCmd.next(); String state = sCmd.next();
int pin = jsonReadInt(configOptionJson, key + "_pin"); String pin = jsonReadStr(configOptionJson, key + "_pin");
String inv = jsonReadStr(configOptionJson, key + "_inv");
if (state == "change") { if (inv == "") {
int newState = !digitalRead(pin); myButton->pinChange(key, pin, state, true);
digitalWrite(pin, newState); } else {
eventGen(key, ""); myButton->pinChange(key, pin, state, false);
jsonWriteStr(configLiveJson, key, String(newState));
MqttClient::publishStatus(key, String(newState));
}
if (state == "0" || state == "1") {
digitalWrite(pin, state.toInt());
eventGen(key, "");
jsonWriteStr(configLiveJson, key, state);
MqttClient::publishStatus(key, state);
} }
} }
@@ -165,20 +137,20 @@ void buttonSet() {
//pwm out volume range Кнопки Свет 1 pin[12] st[500] //pwm out volume range Кнопки Свет 1 pin[12] st[500]
//================================================================================================================== //==================================================================================================================
void pwm() { void pwm() {
myItem->update(); //line->update();
String key = myItem->gkey(); //String key = line->gkey();
String pin = myItem->gpin(); //String pin = line->gpin();
String state = myItem->gstate(); //String state = line->gstate();
myItem->clear(); //line->clear();
sCmd.addCommand(key.c_str(), pwmSet); //sCmd.addCommand(key.c_str(), pwmSet);
//
if (pin != "") { //if (pin != "") {
jsonWriteInt(configOptionJson, key + "_pin", pin.toInt()); // jsonWriteInt(configOptionJson, key + "_pin", pin.toInt());
analogWrite(pin.toInt(), state.toInt()); // analogWrite(pin.toInt(), state.toInt());
jsonWriteInt(configLiveJson, key, state.toInt()); // jsonWriteInt(configLiveJson, key, state.toInt());
MqttClient::publishStatus(key, String(state)); // MqttClient::publishStatus(key, String(state));
} //}
} }
void pwmSet() { void pwmSet() {
@@ -192,7 +164,6 @@ void pwmSet() {
MqttClient::publishStatus(key, state); MqttClient::publishStatus(key, state);
} }
//================================================================================================================== //==================================================================================================================
//==========================================Модуль физической кнопки================================================ //==========================================Модуль физической кнопки================================================
void switch_() { void switch_() {