From d15cf619f130c03dc0b80d5726aad0716a1e5ba0 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Sun, 6 Dec 2020 00:34:30 +0300 Subject: [PATCH] Fixed Ultrasonic, Start uart --- data/config.json | 4 +- data/items/ultrasonic-cm.txt | 2 +- include/BufferExecute.h | 4 +- include/SoftUART.h | 7 ++ include/items/SensorConvertingClass.h | 2 +- include/items/SensorUltrasonicClass.h | 98 +++++++++++++-------------- include/items/vSensorUltrasonic.h | 47 +++++++++++++ src/BufferExecute.cpp | 3 +- src/Init.cpp | 5 ++ src/SoftUART.cpp | 27 ++++++++ src/items/SensorUltrasonicClass.cpp | 40 +++++------ src/items/vSensorUltrasonic.cpp | 89 ++++++++++++++++++++++++ src/main.cpp | 6 ++ 13 files changed, 258 insertions(+), 76 deletions(-) create mode 100644 include/SoftUART.h create mode 100644 include/items/vSensorUltrasonic.h create mode 100644 src/SoftUART.cpp create mode 100644 src/items/vSensorUltrasonic.cpp diff --git a/data/config.json b/data/config.json index 20cb7760..eec796ae 100644 --- a/data/config.json +++ b/data/config.json @@ -3,8 +3,8 @@ "chipID": "", "apssid": "IoTmanager", "appass": "", - "routerssid": "rise", - "routerpass": "hostel3333", + "routerssid": "VOLODYA", + "routerpass": "BELCHENKO", "timezone": 1, "ntp": "pool.ntp.org", "mqttServer": "wqtt.ru", diff --git a/data/items/ultrasonic-cm.txt b/data/items/ultrasonic-cm.txt index cca50890..c5d518c3 100644 --- a/data/items/ultrasonic-cm.txt +++ b/data/items/ultrasonic-cm.txt @@ -1 +1 @@ -0;ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;cin;map[0,500,0,100];c[1] \ No newline at end of file +0;ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;cin;map[0,500,0,100];c[1];int[10] \ No newline at end of file diff --git a/include/BufferExecute.h b/include/BufferExecute.h index a23ba5c5..a236e57d 100644 --- a/include/BufferExecute.h +++ b/include/BufferExecute.h @@ -15,8 +15,8 @@ extern void buttonInSet(); extern void analogAdc(); extern void analogReading(); -extern void ultrasonicCm(); -extern void ultrasonicReading(); +//extern void ultrasonicCm(); +//extern void ultrasonicReading(); extern void dallasTemp(); extern void dallasReading(); diff --git a/include/SoftUART.h b/include/SoftUART.h new file mode 100644 index 00000000..1955616f --- /dev/null +++ b/include/SoftUART.h @@ -0,0 +1,7 @@ +#pragma once + +#include "SoftwareSerial.h" + +extern void uartInit(); +extern void uartHandle(); +extern void parse(String& incStr); \ No newline at end of file diff --git a/include/items/SensorConvertingClass.h b/include/items/SensorConvertingClass.h index 5ddf59c8..f7e1e5cd 100644 --- a/include/items/SensorConvertingClass.h +++ b/include/items/SensorConvertingClass.h @@ -29,4 +29,4 @@ class SensorConvertingClass : public LineParsing { } return input; } -}; \ No newline at end of file +}; diff --git a/include/items/SensorUltrasonicClass.h b/include/items/SensorUltrasonicClass.h index 6adce30d..96d6883c 100644 --- a/include/items/SensorUltrasonicClass.h +++ b/include/items/SensorUltrasonicClass.h @@ -1,49 +1,49 @@ -#pragma once -#include - -#include "Class/LineParsing.h" -#include "Global.h" -#include "items/SensorConvertingClass.h" -#include "GyverFilters.h" - -GMedian<6, int> testFilter; - -class SensorUltrasonic : public SensorConvertingClass { - public: - SensorUltrasonic() : SensorConvertingClass(){}; - void init() { - sensorReadingMap10sec += _key + ","; - String trig = selectFromMarkerToMarker(_pin, ",", 0); - String echo = selectFromMarkerToMarker(_pin, ",", 1); - pinMode(trig.toInt(), OUTPUT); - pinMode(echo.toInt(), INPUT); - jsonWriteStr(configOptionJson, _key + "_trig", trig); - jsonWriteStr(configOptionJson, _key + "_echo", echo); - jsonWriteStr(configOptionJson, _key + "_map", _map); - jsonWriteStr(configOptionJson, _key + "_с", _c); - } - - void SensorUltrasonicRead(String key) { - int trig = jsonReadStr(configOptionJson, key + "_trig").toInt(); - int echo = jsonReadStr(configOptionJson, key + "_echo").toInt(); - int value; - - digitalWrite(trig, LOW); - delayMicroseconds(2); - digitalWrite(trig, HIGH); - delayMicroseconds(10); - digitalWrite(trig, LOW); - long duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m - value = duration_ / 29 / 2; - - value = testFilter.filtered(value); - - value = this->mapping(key, value); - float valueFl = this->correction(key, value); - eventGen2(key, String(valueFl)); - jsonWriteStr(configLiveJson, key, String(valueFl)); - publishStatus(key, String(valueFl)); - SerialPrint("I", "Sensor", "'" + key + "' data: " + String(valueFl)); - } -}; -extern SensorUltrasonic mySensorUltrasonic; \ No newline at end of file +//#pragma once +//#include +// +//#include "Class/LineParsing.h" +//#include "Global.h" +//#include "items/SensorConvertingClass.h" +//#include "GyverFilters.h" +// +//GMedian<6, int> testFilter; +// +//class SensorUltrasonic : public SensorConvertingClass { +// public: +// SensorUltrasonic() : SensorConvertingClass(){}; +// void init() { +// sensorReadingMap10sec += _key + ","; +// String trig = selectFromMarkerToMarker(_pin, ",", 0); +// String echo = selectFromMarkerToMarker(_pin, ",", 1); +// pinMode(trig.toInt(), OUTPUT); +// pinMode(echo.toInt(), INPUT); +// jsonWriteStr(configOptionJson, _key + "_trig", trig); +// jsonWriteStr(configOptionJson, _key + "_echo", echo); +// jsonWriteStr(configOptionJson, _key + "_map", _map); +// jsonWriteStr(configOptionJson, _key + "_с", _c); +// } +// +// void SensorUltrasonicRead(String key) { +// int trig = jsonReadStr(configOptionJson, key + "_trig").toInt(); +// int echo = jsonReadStr(configOptionJson, key + "_echo").toInt(); +// int value; +// +// digitalWrite(trig, LOW); +// delayMicroseconds(2); +// digitalWrite(trig, HIGH); +// delayMicroseconds(10); +// digitalWrite(trig, LOW); +// long duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m +// value = duration_ / 29 / 2; +// +// value = testFilter.filtered(value); +// +// value = this->mapping(key, value); +// float valueFl = this->correction(key, value); +// eventGen2(key, String(valueFl)); +// jsonWriteStr(configLiveJson, key, String(valueFl)); +// publishStatus(key, String(valueFl)); +// SerialPrint("I", "Sensor", "'" + key + "' data: " + String(valueFl)); +// } +//}; +//extern SensorUltrasonic mySensorUltrasonic; \ No newline at end of file diff --git a/include/items/vSensorUltrasonic.h b/include/items/vSensorUltrasonic.h new file mode 100644 index 00000000..a0c6311c --- /dev/null +++ b/include/items/vSensorUltrasonic.h @@ -0,0 +1,47 @@ +#pragma once +#include "Global.h" +#include +#include "items/SensorConvertingClass.h" +#include "GyverFilters.h" + +class SensorUltrasonic; + +typedef std::vector MySensorUltrasonicVector; + + + +class SensorUltrasonic : public SensorConvertingClass { +public: + + SensorUltrasonic(String key, unsigned long interval, unsigned int trig, unsigned int echo, int map1, int map2, int map3, int map4, float c); + ~SensorUltrasonic(); + + void loop(); + void readUltrasonic(); + +private: + + unsigned long currentMillis; + unsigned long prevMillis; + unsigned long difference; + + unsigned long _interval; + + String _key; + unsigned int _echo; + unsigned int _trig; + + int _map1; + int _map2; + int _map3; + int _map4; + + float _c; + +}; + +extern MySensorUltrasonicVector* mySensorUltrasonic; + +extern void ultrasonic(); + + diff --git a/src/BufferExecute.cpp b/src/BufferExecute.cpp index 5a36c915..ad33b79c 100644 --- a/src/BufferExecute.cpp +++ b/src/BufferExecute.cpp @@ -2,6 +2,7 @@ #include "Global.h" // #include "items/vSensorDallas.h" +#include "items/vSensorUltrasonic.h" #include "items/vButtonOut.h" #include "items/vPwmOut.h" #include "items/vInOutput.h" @@ -53,7 +54,7 @@ void csvCmdExecute(String& cmdStr) { sCmd.addCommand(order.c_str(), analogAdc); } else if (order == F("ultrasonic-cm")) { - sCmd.addCommand(order.c_str(), ultrasonicCm); + sCmd.addCommand(order.c_str(), ultrasonic); } else if (order == F("dallas-temp")) { sCmd.addCommand(order.c_str(), dallas); diff --git a/src/Init.cpp b/src/Init.cpp index afd5af33..6f3db433 100644 --- a/src/Init.cpp +++ b/src/Init.cpp @@ -6,6 +6,7 @@ #include "items/vImpulsOut.h" #include "items/vButtonOut.h" #include "items/vSensorDallas.h" +#include "items/vSensorUltrasonic.h" #include "items/vInOutput.h" #include "items/vPwmOut.h" #include "items/vCountDown.h" @@ -43,6 +44,10 @@ void Device_init() { if (mySensorDallas2 != nullptr) { mySensorDallas2->clear(); } + //======clear ultrasonic params====== + if (mySensorUltrasonic != nullptr) { + mySensorUltrasonic->clear(); + } //======clear logging params====== if (myLogging != nullptr) { myLogging->clear(); diff --git a/src/SoftUART.cpp b/src/SoftUART.cpp new file mode 100644 index 00000000..10c9a3e1 --- /dev/null +++ b/src/SoftUART.cpp @@ -0,0 +1,27 @@ +#include "SoftUART.h" + +SoftwareSerial* myUART{ nullptr }; + +void uartInit() { + if (!myUART) { + myUART = new SoftwareSerial(4, 5); + } +} + +void uartHandle() { + static String incStr; + if (myUART->available()) { + char inc; + inc = myUART->read(); + incStr += inc; + if (inc == 0x0A) { + parse(incStr); + incStr = ""; + } + } +} + +void parse(String& incStr) { + + +} \ No newline at end of file diff --git a/src/items/SensorUltrasonicClass.cpp b/src/items/SensorUltrasonicClass.cpp index cd72a470..1d2fb965 100644 --- a/src/items/SensorUltrasonicClass.cpp +++ b/src/items/SensorUltrasonicClass.cpp @@ -1,20 +1,20 @@ -#include "BufferExecute.h" -#include "items/SensorUltrasonicClass.h" -//#ifdef SensorUltrasonicEnabled -//=========================================Модуль ультрозвукового дальномера================================================================== -//ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;pin[12,13];map[1,100,1,100];c[1] -//========================================================================================================================================= -SensorUltrasonic mySensorUltrasonic; -void ultrasonicCm() { - mySensorUltrasonic.update(); - String key = mySensorUltrasonic.gkey(); - sCmd.addCommand(key.c_str(), ultrasonicReading); - mySensorUltrasonic.init(); - mySensorUltrasonic.clear(); -} - -void ultrasonicReading() { - String key = sCmd.order(); - mySensorUltrasonic.SensorUltrasonicRead(key); -} -//#endif \ No newline at end of file +//#include "BufferExecute.h" +//#include "items/SensorUltrasonicClass.h" +////#ifdef SensorUltrasonicEnabled +////=========================================Модуль ультрозвукового дальномера================================================================== +////ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;pin[12,13];map[1,100,1,100];c[1] +////========================================================================================================================================= +//SensorUltrasonic mySensorUltrasonic; +//void ultrasonicCm() { +// mySensorUltrasonic.update(); +// String key = mySensorUltrasonic.gkey(); +// sCmd.addCommand(key.c_str(), ultrasonicReading); +// mySensorUltrasonic.init(); +// mySensorUltrasonic.clear(); +//} +// +//void ultrasonicReading() { +// String key = sCmd.order(); +// mySensorUltrasonic.SensorUltrasonicRead(key); +//} +////#endif \ No newline at end of file diff --git a/src/items/vSensorUltrasonic.cpp b/src/items/vSensorUltrasonic.cpp new file mode 100644 index 00000000..273424cf --- /dev/null +++ b/src/items/vSensorUltrasonic.cpp @@ -0,0 +1,89 @@ +#include "items/vSensorUltrasonic.h" +#include "Class/LineParsing.h" +#include "Global.h" +#include "BufferExecute.h" +#include + +GMedian<5, int> testFilter; + +SensorUltrasonic::SensorUltrasonic(String key, unsigned long interval, unsigned int trig, unsigned int echo, int map1, int map2, int map3, int map4, float c) { + _interval = interval * 1000; + _key = key; + _trig = trig; + _echo = echo; + + _map1 = map1; + _map2 = map2; + _map3 = map3; + _map4 = map4; + + _c = c; + + pinMode(_trig, OUTPUT); + pinMode(_echo, INPUT); +} + +SensorUltrasonic::~SensorUltrasonic() {} + +void SensorUltrasonic::loop() { + currentMillis = millis(); + difference = currentMillis - prevMillis; + if (difference >= _interval) { + prevMillis = millis(); + readUltrasonic(); + } +} + +void SensorUltrasonic::readUltrasonic() { + + static unsigned int counter; + counter++; + + int value; + + digitalWrite(_trig, LOW); + delayMicroseconds(2); + digitalWrite(_trig, HIGH); + delayMicroseconds(10); + digitalWrite(_trig, LOW); + long duration_ = pulseIn(_echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m + value = duration_ / 29 / 2; + + value = testFilter.filtered(value); + + value = map(value, _map1, _map2, _map3, _map4); + float valueFloat = value * _c; + + if (counter > 10) { + eventGen2(_key, String(valueFloat)); + jsonWriteStr(configLiveJson, _key, String(valueFloat)); + publishStatus(_key, String(valueFloat)); + SerialPrint("I", "Sensor", "'" + _key + "' data: " + String(valueFloat)); + } +} + +MySensorUltrasonicVector* mySensorUltrasonic = nullptr; + +void ultrasonic() { + myLineParsing.update(); + String interval = myLineParsing.gint(); + String pin = myLineParsing.gpin(); + String key = myLineParsing.gkey(); + String map = myLineParsing.gmap(); + String c = myLineParsing.gc(); + myLineParsing.clear(); + + unsigned int trig = selectFromMarkerToMarker(pin, ",", 0).toInt(); + unsigned int echo = selectFromMarkerToMarker(pin, ",", 1).toInt(); + + int map1 = selectFromMarkerToMarker(map, ",", 0).toInt(); + int map2 = selectFromMarkerToMarker(map, ",", 1).toInt(); + int map3 = selectFromMarkerToMarker(map, ",", 2).toInt(); + int map4 = selectFromMarkerToMarker(map, ",", 3).toInt(); + + static bool firstTime = true; + if (firstTime) mySensorUltrasonic = new MySensorUltrasonicVector(); + firstTime = false; + mySensorUltrasonic->push_back(SensorUltrasonic(key, interval.toInt(), trig, echo, map1, map2, map3, map4, c.toFloat())); +} + diff --git a/src/main.cpp b/src/main.cpp index 6acb6bba..1b146fce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,6 +19,7 @@ #include "items/vImpulsOut.h" #include "items/vSensorDallas.h" #include "items/vCountDown.h" +#include "items/vSensorUltrasonic.h" #include "Telegram.h" void not_async_actions(); @@ -169,6 +170,11 @@ void loop() { mySensorDallas2->at(i).loop(); } } + if (mySensorUltrasonic != nullptr) { + for (unsigned int i = 0; i < mySensorUltrasonic->size(); i++) { + mySensorUltrasonic->at(i).loop(); + } + } if (myCountDown != nullptr) { for (unsigned int i = 0; i < myCountDown->size(); i++) { myCountDown->at(i).loop();