From 3f6b18b2e2b65103f5d08592c4964ea1137add42 Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Sat, 10 Aug 2019 20:11:36 +0700 Subject: [PATCH] migate lcdcontrol.h to waterish core --- WaterishOS-core2.0/WaterishOS-core2.0.ino | 104 ++++++++++++++-------- WaterishOS-core2.0/config.h | 2 +- WaterishOS-core2.0/lcdcontrol.h | 17 +++- 3 files changed, 79 insertions(+), 44 deletions(-) diff --git a/WaterishOS-core2.0/WaterishOS-core2.0.ino b/WaterishOS-core2.0/WaterishOS-core2.0.ino index 6fd94e4..a714d71 100644 --- a/WaterishOS-core2.0/WaterishOS-core2.0.ino +++ b/WaterishOS-core2.0/WaterishOS-core2.0.ino @@ -25,74 +25,100 @@ #include #include #include -#include "lcdcontrol.h" Adafruit_MCP23017 mcp; -long tslr=0; +long tslr = 0; WiFiClient espClient; PubSubClient client("siwatsystem.com", 1883, espClient); PubSubClientTools mqtt(client); ThreadController threadControl = ThreadController(); Thread mqttupdater = Thread(); Thread datacollector = Thread(); -boolean online=true; -FlowMeter sensorA[6]= FlowMeter(1); -FlowMeter sensorB[6]= FlowMeter(3); +boolean online = true; +FlowMeter sensorA[6] = FlowMeter(1); +FlowMeter sensorB[6] = FlowMeter(3); volatile boolean awakenByInterrupt = false; -void readA(){ - uint8_t pin=mcp.getLastInterruptPin(); - uint8_t val=mcp.getLastInterruptPinValue(); - for(int sid=0;sid<=5;sid++)sensorA[sid].count(); +LiquidCrystal_I2C lcd(0x27, 16, 2); +int menu; +void drawmenu() +{ + switch (this->menu) +case: '1': + lcd.print(" Waterish OS OK "); + } -void readB(){ - uint8_t pin=mcp.getLastInterruptPin(); - uint8_t val=mcp.getLastInterruptPinValue(); - for(int sid=8;sid<13;sid++)sensorB[sid-8].count(); +}; +class disp { + public: + LiquidCrystal_I2C lcd(0x27, 16, 2); + int menu; + void setmenu(int mnp) { + this->menu = mnp; + } + void drawmenu() + { + switch (this->menu) +case: '1': + this->lcd.print(" Waterish OS OK "); + + } +}; + +void readA() { + uint8_t pin = mcp.getLastInterruptPin(); + uint8_t val = mcp.getLastInterruptPinValue(); + for (int sid = 0; sid <= 5; sid++)sensorA[sid].count(); } -void collectdata(){ - for(int sid=0;sid<=5;sid++)sensorA[sid].tick(1000); - for(int sid=8;sid<13;sid++)sensorB[sid-8].tick(1000); +void readB() { + uint8_t pin = mcp.getLastInterruptPin(); + uint8_t val = mcp.getLastInterruptPinValue(); + for (int sid = 8; sid < 13; sid++)sensorB[sid - 8].count(); } -void updatemqtt(){ - for(int counter;counter<=6;counter++)mqtt.publish("/waterishos/node"+nodename+"/flowrateA/"+counter,String(sensorA[counter].getCurrentFlowrate())); - for(int counter;counter<=6;counter++)mqtt.publish("/waterishos/node"+nodename+"/volumeA/"+counter,String(sensorA[counter].getTotalVolume())); - for(int counter;counter<=6;counter++)mqtt.publish("/waterishos/node"+nodename+"/flowrateB/"+counter,String(sensorB[counter].getCurrentFlowrate())); - for(int counter;counter<=6;counter++)mqtt.publish("/waterishos/node"+nodename+"/volumeB/"+counter,String(sensorB[counter].getTotalVolume()));} -void setup(){ +void collectdata() { + for (int sid = 0; sid <= 5; sid++)sensorA[sid].tick(1000); + for (int sid = 8; sid < 13; sid++)sensorB[sid - 8].tick(1000); +} +void updatemqtt() { + for (int counter; counter <= 6; counter++)mqtt.publish("/waterishos/node" + nodename + "/flowrateA/" + counter, String(sensorA[counter].getCurrentFlowrate())); + for (int counter; counter <= 6; counter++)mqtt.publish("/waterishos/node" + nodename + "/volumeA/" + counter, String(sensorA[counter].getTotalVolume())); + for (int counter; counter <= 6; counter++)mqtt.publish("/waterishos/node" + nodename + "/flowrateB/" + counter, String(sensorB[counter].getCurrentFlowrate())); + for (int counter; counter <= 6; counter++)mqtt.publish("/waterishos/node" + nodename + "/volumeB/" + counter, String(sensorB[counter].getTotalVolume())); +} +void setup() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); - int connectionattempt=0; - while(WiFi.status() != WL_CONNECTED) + int connectionattempt = 0; + while (WiFi.status() != WL_CONNECTED) { //wait for it ... (Wait for Wifi Connection) connectionattempt++; delay(500); - if(connectionattempt>=20){ - online=false; + if (connectionattempt >= 20) { + online = false; break; } } - attachInterrupt(digitalPinToInterrupt(1),readA,FALLING); - attachInterrupt(digitalPinToInterrupt(3),readB,FALLING); + attachInterrupt(digitalPinToInterrupt(1), readA, FALLING); + attachInterrupt(digitalPinToInterrupt(3), readB, FALLING); pinMode(1, FUNCTION_3); pinMode(3, FUNCTION_3); - pinMode(1,INPUT); - pinMode(3,INPUT); + pinMode(1, INPUT); + pinMode(3, INPUT); mcp.begin(); - mcp.setupInterrupts(true,false,LOW); - for(int i=0;i<=15;i++) + mcp.setupInterrupts(true, false, LOW); + for (int i = 0; i <= 15; i++) { mcp.pinMode(i, INPUT); - mcp.setupInterruptPin(i,RISING); - } + mcp.setupInterruptPin(i, RISING); + } datacollector.onRun(collectdata); datacollector.setInterval(1000); mqttupdater.onRun(updatemqtt); mqttupdater.setInterval(1000); threadControl.add(&datacollector); threadControl.add(&mqttupdater); - } - -void loop(){ - client.loop(); - threadControl.run(); +} + +void loop() { + client.loop(); + threadControl.run(); } diff --git a/WaterishOS-core2.0/config.h b/WaterishOS-core2.0/config.h index 7f7b3dc..4e23a85 100644 --- a/WaterishOS-core2.0/config.h +++ b/WaterishOS-core2.0/config.h @@ -3,5 +3,5 @@ const String password = ""; const byte InteruptPinA=1; const byte InteruptPinB=3; const byte arduinoInterrupt=1; +const byte buttonPin = 0; const String nodename="devkit"; -#define LCD_I2C '0x27' diff --git a/WaterishOS-core2.0/lcdcontrol.h b/WaterishOS-core2.0/lcdcontrol.h index f58cde5..ca16735 100644 --- a/WaterishOS-core2.0/lcdcontrol.h +++ b/WaterishOS-core2.0/lcdcontrol.h @@ -1,6 +1,15 @@ class disp { public: - LiquidCrystal_I2C lcd(LCD_I2C, 16, 2); - int menu(); - -} + LiquidCrystal_I2C lcd(0x27, 16, 2); + int menu; + void setmenu(int mnp){ + this->menu = mnp; + } + void drawmenu() + { + switch(this->menu) + case: '1': + this->lcd.print(" Waterish OS OK "); + + } +};