mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 11:46:31 +00:00
Merge pull request #6939 from kristi5/dev2
JSN-SR04T add support for Mode 2 and Mode 3
This commit is contained in:
commit
70b3fc6e0b
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -552,8 +552,8 @@
|
||||
#define D_SENSOR_HPMA_TX "HPMA Tx"
|
||||
#define D_SENSOR_SBR_RX "SerBr Rx"
|
||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech"
|
||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||
|
@ -97,8 +97,8 @@ enum UserSelectablePins {
|
||||
GPIO_SDS0X1_RX, // Nova Fitness SDS011 Serial interface
|
||||
GPIO_SBR_TX, // Serial Bridge Serial interface
|
||||
GPIO_SBR_RX, // Serial Bridge Serial interface
|
||||
GPIO_SR04_TRIG, // SR04 Trigger pin
|
||||
GPIO_SR04_ECHO, // SR04 Echo pin
|
||||
GPIO_SR04_TRIG, // SR04 Trigger/TX pin
|
||||
GPIO_SR04_ECHO, // SR04 Echo/RX pin
|
||||
GPIO_SDM120_TX, // SDM120 Serial interface
|
||||
GPIO_SDM120_RX, // SDM120 Serial interface
|
||||
GPIO_SDM630_TX, // SDM630 Serial interface
|
||||
@ -603,8 +603,8 @@ const uint8_t kGpioNiceList[] PROGMEM = {
|
||||
GPIO_RF_SENSOR, // Rf receiver with sensor decoding
|
||||
#endif
|
||||
#ifdef USE_SR04
|
||||
GPIO_SR04_TRIG, // SR04 Trigger pin
|
||||
GPIO_SR04_ECHO, // SR04 Echo pin
|
||||
GPIO_SR04_TRIG, // SR04 Tri/TXgger pin
|
||||
GPIO_SR04_ECHO, // SR04 Ech/RXo pin
|
||||
#endif
|
||||
#ifdef USE_TM1638
|
||||
GPIO_TM16CLK, // TM1638 Clock
|
||||
|
@ -20,6 +20,7 @@
|
||||
#ifdef USE_SR04
|
||||
|
||||
#include <NewPing.h>
|
||||
#include <TasmotaSerial.h>
|
||||
/*********************************************************************************************\
|
||||
* HC-SR04, HC-SR04+, JSN-SR04T - Ultrasonic distance sensor
|
||||
*
|
||||
@ -30,17 +31,129 @@
|
||||
|
||||
#define XSNS_22 22
|
||||
|
||||
uint8_t sr04_echo_pin = 0;
|
||||
uint8_t sr04_trig_pin = 0;
|
||||
uint8_t sr04_type = 1;
|
||||
int sr04_echo_pin = 0;
|
||||
int sr04_trig_pin = 0;
|
||||
real64_t distance;
|
||||
|
||||
NewPing* sonar = nullptr;
|
||||
TasmotaSerial* sonar_serial = nullptr;
|
||||
|
||||
|
||||
|
||||
uint8_t Sr04TModeDetect(void)
|
||||
{
|
||||
sr04_type = 0;
|
||||
if (pin[GPIO_SR04_ECHO]>=99) return sr04_type;
|
||||
|
||||
void Sr04Init(void)
|
||||
{
|
||||
sr04_echo_pin = pin[GPIO_SR04_ECHO];
|
||||
sr04_trig_pin = pin[GPIO_SR04_TRIG];
|
||||
sonar = new NewPing(sr04_trig_pin, sr04_echo_pin, 300);
|
||||
sr04_trig_pin = (pin[GPIO_SR04_TRIG] < 99) ? pin[GPIO_SR04_TRIG] : -1;
|
||||
sonar_serial = new TasmotaSerial(sr04_echo_pin, sr04_trig_pin, 1);
|
||||
|
||||
if (sonar_serial->begin(9600,1)) {
|
||||
DEBUG_SENSOR_LOG(PSTR("SR04: Detect mode"));
|
||||
|
||||
if (sr04_trig_pin!=-1) {
|
||||
sr04_type = (Sr04TMiddleValue(Sr04TMode3Distance(),Sr04TMode3Distance(),Sr04TMode3Distance())!=NO_ECHO)?3:1;
|
||||
} else {
|
||||
sr04_type = 2;
|
||||
}
|
||||
} else {
|
||||
sr04_type = 1;
|
||||
}
|
||||
|
||||
if (sr04_type < 2) {
|
||||
delete sonar_serial;
|
||||
sonar_serial = nullptr;
|
||||
sonar = new NewPing(sr04_trig_pin, sr04_echo_pin, 300);
|
||||
} else {
|
||||
if (sonar_serial->hardwareSerial()) {
|
||||
ClaimSerial();
|
||||
}
|
||||
}
|
||||
|
||||
AddLog_P2(LOG_LEVEL_INFO,PSTR("SR04: Mode %d"), sr04_type);
|
||||
return sr04_type;
|
||||
}
|
||||
|
||||
uint16_t Sr04TMiddleValue(uint16_t first, uint16_t second, uint16_t third)
|
||||
{
|
||||
uint16_t ret = first;
|
||||
if (first > second) {
|
||||
first = second;
|
||||
second = ret;
|
||||
}
|
||||
|
||||
if (third < first) {
|
||||
return first;
|
||||
} else if (third > second) {
|
||||
return second;
|
||||
} else {
|
||||
return third;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t Sr04TMode3Distance() {
|
||||
|
||||
sonar_serial->write(0x55);
|
||||
sonar_serial->flush();
|
||||
|
||||
return Sr04TMode2Distance();
|
||||
}
|
||||
|
||||
uint16_t Sr04TMode2Distance(void)
|
||||
{
|
||||
sonar_serial->setTimeout(300);
|
||||
const char startByte = 0xff;
|
||||
|
||||
if (!sonar_serial->find(startByte)) {
|
||||
//DEBUG_SENSOR_LOG(PSTR("SR04: No start byte"));
|
||||
return NO_ECHO;
|
||||
}
|
||||
|
||||
delay(5);
|
||||
|
||||
uint8_t crc = sonar_serial->read();
|
||||
//read high byte
|
||||
uint16_t distance = ((uint16_t)crc) << 8;
|
||||
|
||||
//read low byte
|
||||
distance += sonar_serial->read();
|
||||
crc += distance & 0x00ff;
|
||||
crc += 0x00FF;
|
||||
|
||||
//check crc sum
|
||||
if (crc != sonar_serial->read()) {
|
||||
AddLog_P2(LOG_LEVEL_ERROR,PSTR("SR04: Reading CRC error."));
|
||||
return NO_ECHO;
|
||||
}
|
||||
//DEBUG_SENSOR_LOG(PSTR("SR04: Distance: %d"), distance);
|
||||
return distance;
|
||||
}
|
||||
|
||||
void Sr04TReading(void) {
|
||||
|
||||
if (sonar_serial==nullptr && sonar==nullptr) {
|
||||
Sr04TModeDetect();
|
||||
}
|
||||
|
||||
switch (sr04_type) {
|
||||
case 3:
|
||||
distance = (real64_t)(Sr04TMiddleValue(Sr04TMode3Distance(),Sr04TMode3Distance(),Sr04TMode3Distance()))/ 10; //convert to cm
|
||||
break;
|
||||
case 2:
|
||||
//empty input buffer first
|
||||
while(sonar_serial->available()) sonar_serial->read();
|
||||
distance = (real64_t)(Sr04TMiddleValue(Sr04TMode2Distance(),Sr04TMode2Distance(),Sr04TMode2Distance()))/10;
|
||||
break;
|
||||
case 1:
|
||||
distance = (real64_t)(sonar->ping_median(5))/ US_ROUNDTRIP_CM;
|
||||
break;
|
||||
default:
|
||||
distance = NO_ECHO;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef USE_WEBSERVER
|
||||
@ -49,8 +162,7 @@ const char HTTP_SNS_DISTANCE[] PROGMEM =
|
||||
#endif // USE_WEBSERVER
|
||||
|
||||
void Sr04Show(bool json)
|
||||
{
|
||||
distance = (real64_t)(sonar->ping_median(5))/ US_ROUNDTRIP_CM;
|
||||
{
|
||||
|
||||
if (distance != 0) { // Check if read failed
|
||||
char distance_chr[33];
|
||||
@ -79,10 +191,14 @@ bool Xsns22(uint8_t function)
|
||||
{
|
||||
bool result = false;
|
||||
|
||||
if ((pin[GPIO_SR04_ECHO] < 99) && (pin[GPIO_SR04_TRIG] < 99)) {
|
||||
if (sr04_type) {
|
||||
switch (function) {
|
||||
case FUNC_INIT:
|
||||
Sr04Init();
|
||||
result = (pin[GPIO_SR04_ECHO]<99);
|
||||
break;
|
||||
case FUNC_EVERY_SECOND:
|
||||
Sr04TReading();
|
||||
result = true;
|
||||
break;
|
||||
case FUNC_JSON_APPEND:
|
||||
Sr04Show(1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user