Fixed Ultrasonic, Start uart

This commit is contained in:
Dmitry Borisenko
2020-12-06 00:34:30 +03:00
parent 7043855e3d
commit d15cf619f1
13 changed files with 258 additions and 76 deletions

View File

@@ -3,8 +3,8 @@
"chipID": "", "chipID": "",
"apssid": "IoTmanager", "apssid": "IoTmanager",
"appass": "", "appass": "",
"routerssid": "rise", "routerssid": "VOLODYA",
"routerpass": "hostel3333", "routerpass": "BELCHENKO",
"timezone": 1, "timezone": 1,
"ntp": "pool.ntp.org", "ntp": "pool.ntp.org",
"mqttServer": "wqtt.ru", "mqttServer": "wqtt.ru",

View File

@@ -1 +1 @@
0;ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;cin;map[0,500,0,100];c[1] 0;ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;cin;map[0,500,0,100];c[1];int[10]

View File

@@ -15,8 +15,8 @@ extern void buttonInSet();
extern void analogAdc(); extern void analogAdc();
extern void analogReading(); extern void analogReading();
extern void ultrasonicCm(); //extern void ultrasonicCm();
extern void ultrasonicReading(); //extern void ultrasonicReading();
extern void dallasTemp(); extern void dallasTemp();
extern void dallasReading(); extern void dallasReading();

7
include/SoftUART.h Normal file
View File

@@ -0,0 +1,7 @@
#pragma once
#include "SoftwareSerial.h"
extern void uartInit();
extern void uartHandle();
extern void parse(String& incStr);

View File

@@ -1,49 +1,49 @@
#pragma once //#pragma once
#include <Arduino.h> //#include <Arduino.h>
//
#include "Class/LineParsing.h" //#include "Class/LineParsing.h"
#include "Global.h" //#include "Global.h"
#include "items/SensorConvertingClass.h" //#include "items/SensorConvertingClass.h"
#include "GyverFilters.h" //#include "GyverFilters.h"
//
GMedian<6, int> testFilter; //GMedian<6, int> testFilter;
//
class SensorUltrasonic : public SensorConvertingClass { //class SensorUltrasonic : public SensorConvertingClass {
public: // public:
SensorUltrasonic() : SensorConvertingClass(){}; // SensorUltrasonic() : SensorConvertingClass(){};
void init() { // void init() {
sensorReadingMap10sec += _key + ","; // sensorReadingMap10sec += _key + ",";
String trig = selectFromMarkerToMarker(_pin, ",", 0); // String trig = selectFromMarkerToMarker(_pin, ",", 0);
String echo = selectFromMarkerToMarker(_pin, ",", 1); // String echo = selectFromMarkerToMarker(_pin, ",", 1);
pinMode(trig.toInt(), OUTPUT); // pinMode(trig.toInt(), OUTPUT);
pinMode(echo.toInt(), INPUT); // pinMode(echo.toInt(), INPUT);
jsonWriteStr(configOptionJson, _key + "_trig", trig); // jsonWriteStr(configOptionJson, _key + "_trig", trig);
jsonWriteStr(configOptionJson, _key + "_echo", echo); // jsonWriteStr(configOptionJson, _key + "_echo", echo);
jsonWriteStr(configOptionJson, _key + "_map", _map); // jsonWriteStr(configOptionJson, _key + "_map", _map);
jsonWriteStr(configOptionJson, _key + "_с", _c); // jsonWriteStr(configOptionJson, _key + "_с", _c);
} // }
//
void SensorUltrasonicRead(String key) { // void SensorUltrasonicRead(String key) {
int trig = jsonReadStr(configOptionJson, key + "_trig").toInt(); // int trig = jsonReadStr(configOptionJson, key + "_trig").toInt();
int echo = jsonReadStr(configOptionJson, key + "_echo").toInt(); // int echo = jsonReadStr(configOptionJson, key + "_echo").toInt();
int value; // int value;
//
digitalWrite(trig, LOW); // digitalWrite(trig, LOW);
delayMicroseconds(2); // delayMicroseconds(2);
digitalWrite(trig, HIGH); // digitalWrite(trig, HIGH);
delayMicroseconds(10); // delayMicroseconds(10);
digitalWrite(trig, LOW); // digitalWrite(trig, LOW);
long duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m // long duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m
value = duration_ / 29 / 2; // value = duration_ / 29 / 2;
//
value = testFilter.filtered(value); // value = testFilter.filtered(value);
//
value = this->mapping(key, value); // value = this->mapping(key, value);
float valueFl = this->correction(key, value); // float valueFl = this->correction(key, value);
eventGen2(key, String(valueFl)); // eventGen2(key, String(valueFl));
jsonWriteStr(configLiveJson, key, String(valueFl)); // jsonWriteStr(configLiveJson, key, String(valueFl));
publishStatus(key, String(valueFl)); // publishStatus(key, String(valueFl));
SerialPrint("I", "Sensor", "'" + key + "' data: " + String(valueFl)); // SerialPrint("I", "Sensor", "'" + key + "' data: " + String(valueFl));
} // }
}; //};
extern SensorUltrasonic mySensorUltrasonic; //extern SensorUltrasonic mySensorUltrasonic;

View File

@@ -0,0 +1,47 @@
#pragma once
#include "Global.h"
#include <Arduino.h>
#include "items/SensorConvertingClass.h"
#include "GyverFilters.h"
class SensorUltrasonic;
typedef std::vector<SensorUltrasonic> 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();

View File

@@ -2,6 +2,7 @@
#include "Global.h" #include "Global.h"
// //
#include "items/vSensorDallas.h" #include "items/vSensorDallas.h"
#include "items/vSensorUltrasonic.h"
#include "items/vButtonOut.h" #include "items/vButtonOut.h"
#include "items/vPwmOut.h" #include "items/vPwmOut.h"
#include "items/vInOutput.h" #include "items/vInOutput.h"
@@ -53,7 +54,7 @@ void csvCmdExecute(String& cmdStr) {
sCmd.addCommand(order.c_str(), analogAdc); sCmd.addCommand(order.c_str(), analogAdc);
} }
else if (order == F("ultrasonic-cm")) { else if (order == F("ultrasonic-cm")) {
sCmd.addCommand(order.c_str(), ultrasonicCm); sCmd.addCommand(order.c_str(), ultrasonic);
} }
else if (order == F("dallas-temp")) { else if (order == F("dallas-temp")) {
sCmd.addCommand(order.c_str(), dallas); sCmd.addCommand(order.c_str(), dallas);

View File

@@ -6,6 +6,7 @@
#include "items/vImpulsOut.h" #include "items/vImpulsOut.h"
#include "items/vButtonOut.h" #include "items/vButtonOut.h"
#include "items/vSensorDallas.h" #include "items/vSensorDallas.h"
#include "items/vSensorUltrasonic.h"
#include "items/vInOutput.h" #include "items/vInOutput.h"
#include "items/vPwmOut.h" #include "items/vPwmOut.h"
#include "items/vCountDown.h" #include "items/vCountDown.h"
@@ -43,6 +44,10 @@ void Device_init() {
if (mySensorDallas2 != nullptr) { if (mySensorDallas2 != nullptr) {
mySensorDallas2->clear(); mySensorDallas2->clear();
} }
//======clear ultrasonic params======
if (mySensorUltrasonic != nullptr) {
mySensorUltrasonic->clear();
}
//======clear logging params====== //======clear logging params======
if (myLogging != nullptr) { if (myLogging != nullptr) {
myLogging->clear(); myLogging->clear();

27
src/SoftUART.cpp Normal file
View File

@@ -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) {
}

View File

@@ -1,20 +1,20 @@
#include "BufferExecute.h" //#include "BufferExecute.h"
#include "items/SensorUltrasonicClass.h" //#include "items/SensorUltrasonicClass.h"
//#ifdef SensorUltrasonicEnabled ////#ifdef SensorUltrasonicEnabled
//=========================================Модуль ультрозвукового дальномера================================================================== ////=========================================Модуль ультрозвукового дальномера==================================================================
//ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;pin[12,13];map[1,100,1,100];c[1] ////ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;pin[12,13];map[1,100,1,100];c[1]
//========================================================================================================================================= ////=========================================================================================================================================
SensorUltrasonic mySensorUltrasonic; //SensorUltrasonic mySensorUltrasonic;
void ultrasonicCm() { //void ultrasonicCm() {
mySensorUltrasonic.update(); // mySensorUltrasonic.update();
String key = mySensorUltrasonic.gkey(); // String key = mySensorUltrasonic.gkey();
sCmd.addCommand(key.c_str(), ultrasonicReading); // sCmd.addCommand(key.c_str(), ultrasonicReading);
mySensorUltrasonic.init(); // mySensorUltrasonic.init();
mySensorUltrasonic.clear(); // mySensorUltrasonic.clear();
} //}
//
void ultrasonicReading() { //void ultrasonicReading() {
String key = sCmd.order(); // String key = sCmd.order();
mySensorUltrasonic.SensorUltrasonicRead(key); // mySensorUltrasonic.SensorUltrasonicRead(key);
} //}
//#endif ////#endif

View File

@@ -0,0 +1,89 @@
#include "items/vSensorUltrasonic.h"
#include "Class/LineParsing.h"
#include "Global.h"
#include "BufferExecute.h"
#include <Arduino.h>
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()));
}

View File

@@ -19,6 +19,7 @@
#include "items/vImpulsOut.h" #include "items/vImpulsOut.h"
#include "items/vSensorDallas.h" #include "items/vSensorDallas.h"
#include "items/vCountDown.h" #include "items/vCountDown.h"
#include "items/vSensorUltrasonic.h"
#include "Telegram.h" #include "Telegram.h"
void not_async_actions(); void not_async_actions();
@@ -169,6 +170,11 @@ void loop() {
mySensorDallas2->at(i).loop(); mySensorDallas2->at(i).loop();
} }
} }
if (mySensorUltrasonic != nullptr) {
for (unsigned int i = 0; i < mySensorUltrasonic->size(); i++) {
mySensorUltrasonic->at(i).loop();
}
}
if (myCountDown != nullptr) { if (myCountDown != nullptr) {
for (unsigned int i = 0; i < myCountDown->size(); i++) { for (unsigned int i = 0; i < myCountDown->size(); i++) {
myCountDown->at(i).loop(); myCountDown->at(i).loop();