Arduino set Knx uart bugfix (#32)

* bugfix, print not allowed in constructor

* Update tpuart_data_link_layer.cpp

- start confirm timout only after last byte was sent
- increase BYTE_TIMEOUT

* -bugfix Arduino set knxUart

* Update knx-bme680.ino

* Update knx-demo.ino

* Update knx-hdc1008.ino

* Update knx-sonoffS20.ino

* Update knx-bme680.ino

* Update knx-demo.ino

* Update arduino_platform.cpp

* Update dpt.h

* Update esp32_platform.h

* Update esp_platform.h
This commit is contained in:
Bernator 2019-09-09 18:19:09 +02:00 committed by thelsing
parent f2d45b233a
commit 68b0002490
13 changed files with 76 additions and 78 deletions

View File

@ -42,10 +42,10 @@ bool trigger = false;
// Entry point for the example
void setup(void)
{
SerialDBG.begin(115200);
ArduinoPlatform::SerialDebug = SerialDBG;
Serial.begin(115200);
ArduinoPlatform::SerialDebug = Serial;
delay(5000);
SerialDBG.println("start");
Serial.println("start");
#ifdef ARDUINO_ARCH_ESP8266
WiFiManager wifiManager;
@ -92,8 +92,8 @@ void setup(void)
if (knx.configured())
{
cyclSend = knx.paramInt(0);
SerialDBG.print("Zykl. send:");
SerialDBG.println(cyclSend);
Serial.print("Zykl. send:");
Serial.println(cyclSend);
goRawTemperature.dataPointType(Dpt(9, 1));
goPressure.dataPointType(Dpt(9, 1));
goRawHumidity.dataPointType(Dpt(9, 1));
@ -112,7 +112,7 @@ void setup(void)
iaqSensor.updateSubscription(sensorList, sizeof(sensorList)/sizeof(bsec_virtual_sensor_t), BSEC_SAMPLE_RATE_LP);
checkIaqSensorStatus();
String output = "Timestamp [ms], raw temperature [°C], pressure [hPa], raw relative humidity [%], gas [Ohm], IAQ, IAQ accuracy, temperature [°C], relative humidity [%], CO2";
SerialDBG.println(output);
Serial.println(output);
}
// Function that is looped forever
@ -150,7 +150,7 @@ void loop(void)
output += ", " + String(iaqSensor.runInStatus);
output += ", " + String(iaqSensor.stabStatus);
SerialDBG.println(output);
Serial.println(output);
updateState();
if (sendCounter++ == cyclSend || trigger)
@ -180,26 +180,26 @@ void checkIaqSensorStatus(void)
if (iaqSensor.status != BSEC_OK) {
if (iaqSensor.status < BSEC_OK) {
String output = "BSEC error code : " + String(iaqSensor.status);
SerialDBG.println(output);
Serial.println(output);
for (;;)
errLeds(); /* Halt in case of failure */
}
else {
String output = "BSEC warning code : " + String(iaqSensor.status);
SerialDBG.println(output);
Serial.println(output);
}
}
if (iaqSensor.bme680Status != BME680_OK) {
if (iaqSensor.bme680Status < BME680_OK) {
String output = "BME680 error code : " + String(iaqSensor.bme680Status);
SerialDBG.println(output);
Serial.println(output);
for (;;)
errLeds(); /* Halt in case of failure */
}
else {
String output = "BME680 warning code : " + String(iaqSensor.bme680Status);
SerialDBG.println(output);
Serial.println(output);
}
}
}
@ -216,10 +216,10 @@ void errLeds(void)
uint8_t* loadBme680State(uint8_t* buffer)
{
// Existing state in EEPROM
SerialDBG.println("Reading state from EEPROM");
Serial.println("Reading state from EEPROM");
for (uint8_t i = 0; i < BSEC_MAX_STATE_BLOB_SIZE; i++) {
SerialDBG.println(buffer[i], HEX);
Serial.println(buffer[i], HEX);
}
iaqSensor.setState(buffer);
@ -232,10 +232,10 @@ uint8_t* saveBme680State(uint8_t* buffer)
iaqSensor.getState(buffer);
checkIaqSensorStatus();
SerialDBG.println("Writing state to EEPROM");
Serial.println("Writing state to EEPROM");
for (uint8_t i = 0; i < BSEC_MAX_STATE_BLOB_SIZE; i++) {
SerialDBG.println(buffer[i], HEX);
Serial.println(buffer[i], HEX);
}
return buffer + BSEC_MAX_STATE_BLOB_SIZE;
}
@ -266,8 +266,8 @@ void updateState(void)
// callback from trigger-GO
void triggerCallback(GroupObject& go)
{
SerialDBG.println("trigger");
SerialDBG.println((bool)go.value());
Serial.println("trigger");
Serial.println((bool)go.value());
if (!go.value())
return;
@ -275,11 +275,11 @@ void triggerCallback(GroupObject& go)
/* We call bsec_update_subscription() in order to instruct BSEC to perform an extra measurement at the next
possible time slot
*/
SerialDBG.println("Triggering ULP plus.");
Serial.println("Triggering ULP plus.");
bsec_virtual_sensor_t sensorList[] = {
BSEC_OUTPUT_IAQ, BSEC_OUTPUT_CO2_EQUIVALENT
};
iaqSensor.updateSubscription(sensorList, 1, BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND);
checkIaqSensorStatus();
}
}

View File

@ -54,8 +54,8 @@ void resetCallback(GroupObject& go)
void setup()
{
SerialDBG.begin(115200);
ArduinoPlatform::SerialDebug = SerialDBG;
Serial.begin(115200);
ArduinoPlatform::SerialDebug = Serial;
randomSeed(millis());
@ -77,16 +77,16 @@ void setup()
goMin.dataPointType(DPT_Value_Temp);
goMax.dataPointType(DPT_Value_Temp);
SerialDBG.print("Timeout: ");
SerialDBG.println(knx.paramByte(0));
SerialDBG.print("Zykl. senden: ");
SerialDBG.println(knx.paramByte(1));
SerialDBG.print("Min/Max senden: ");
SerialDBG.println(knx.paramByte(2));
SerialDBG.print("Aenderung senden: ");
SerialDBG.println(knx.paramByte(3));
SerialDBG.print("Abgleich: ");
SerialDBG.println(knx.paramByte(4));
Serial.print("Timeout: ");
Serial.println(knx.paramByte(0));
Serial.print("Zykl. senden: ");
Serial.println(knx.paramByte(1));
Serial.print("Min/Max senden: ");
Serial.println(knx.paramByte(2));
Serial.print("Aenderung senden: ");
Serial.println(knx.paramByte(3));
Serial.print("Abgleich: ");
Serial.println(knx.paramByte(4));
}
// pin or GPIO the programming led is connected to. Default is LED_BUILTIN
@ -110,4 +110,4 @@ void loop()
return;
measureTemp();
}
}

View File

@ -21,10 +21,10 @@ uint32_t cyclSend = 0;
// Entry point for the example
void setup(void)
{
SerialDBG.begin(115200);
ArduinoPlatform::SerialDebug = SerialDBG;
Serial.begin(115200);
ArduinoPlatform::SerialDebug = Serial;
delay(5000);
SerialDBG.println("start");
Serial.println("start");
#ifdef ARDUINO_ARCH_ESP8266
WiFiManager wifiManager;
@ -45,15 +45,15 @@ void setup(void)
{
cyclSend = knx.paramInt(0);
SerialDBG.print("Zykl. send:");
SerialDBG.println(cyclSend);
Serial.print("Zykl. send:");
Serial.println(cyclSend);
}
// start the framework.
knx.start();
String output = "Timestamp [ms], temperature [°C], relative humidity [%]";
SerialDBG.println(output);
Serial.println(output);
}
@ -78,7 +78,7 @@ void loop(void)
String output = String(millis());
output += ", " + String(temp);
output += ", " + String(humi);
SerialDBG.println(output);
Serial.println(output);
if (sendCounter++ == cyclSend)
{

View File

@ -24,8 +24,8 @@ void switchCallback(GroupObject& go)
void setup()
{
SerialDBG.begin(115200);
ArduinoPlatform::SerialDebug = SerialDBG;
Serial.begin(115200);
ArduinoPlatform::SerialDebug = Serial;
#ifdef ARDUINO_ARCH_ESP8266
WiFiManager wifiManager;

View File

@ -5,7 +5,7 @@
Stream& ArduinoPlatform::SerialDebug = Serial;
ArduinoPlatform::ArduinoPlatform(HardwareSerial& knxSerial) : _knxSerial(knxSerial)
ArduinoPlatform::ArduinoPlatform(HardwareSerial* knxSerial) : _knxSerial(knxSerial)
{
}
@ -68,19 +68,21 @@ int ArduinoPlatform::readBytes(uint8_t * buffer, uint16_t maxLen)
return 0;
}
void ArduinoPlatform::knxUart( HardwareSerial& serial )
void ArduinoPlatform::knxUart( HardwareSerial* serial )
{
closeUart();
_knxSerial = serial;
setupUart();
}
HardwareSerial& ArduinoPlatform::knxUart()
HardwareSerial* ArduinoPlatform::knxUart()
{
return _knxSerial;
}
void ArduinoPlatform::setupUart()
{
_knxSerial.begin(19200, SERIAL_8E1);
_knxSerial->begin(19200, SERIAL_8E1);
while (!_knxSerial)
;
}
@ -88,33 +90,33 @@ void ArduinoPlatform::setupUart()
void ArduinoPlatform::closeUart()
{
_knxSerial.end();
_knxSerial->end();
}
int ArduinoPlatform::uartAvailable()
{
return _knxSerial.available();
return _knxSerial->available();
}
size_t ArduinoPlatform::writeUart(const uint8_t data)
{
//printHex("<p", &data, 1);
return _knxSerial.write(data);
return _knxSerial->write(data);
}
size_t ArduinoPlatform::writeUart(const uint8_t *buffer, size_t size)
{
//printHex("<p", buffer, size);
return _knxSerial.write(buffer, size);
return _knxSerial->write(buffer, size);
}
int ArduinoPlatform::readUart()
{
int val = _knxSerial.read();
int val = _knxSerial->read();
//if(val > 0)
// printHex("p>", (uint8_t*)&val, 1);
return val;
@ -127,7 +129,7 @@ size_t ArduinoPlatform::readBytesUart(uint8_t *buffer, size_t length)
uint8_t* pos = buffer;
while (toRead > 0)
{
size_t val = _knxSerial.readBytes(pos, toRead);
size_t val = _knxSerial->readBytes(pos, toRead);
pos += val;
toRead -= val;
}
@ -267,4 +269,4 @@ void println(double num)
void println(void)
{
ArduinoPlatform::SerialDebug.println();
}
}

View File

@ -7,7 +7,7 @@ extern Stream& _serialDBG;
class ArduinoPlatform : public Platform
{
public:
ArduinoPlatform(HardwareSerial& knxSerial);
ArduinoPlatform(HardwareSerial* knxSerial);
// ip stuff
uint32_t currentIpAddress();
@ -25,8 +25,8 @@ class ArduinoPlatform : public Platform
int readBytes(uint8_t* buffer, uint16_t maxLen);
//uart
virtual void knxUart( HardwareSerial& serial );
virtual HardwareSerial& knxUart();
virtual void knxUart( HardwareSerial* serial);
virtual HardwareSerial* knxUart();
virtual void setupUart();
virtual void closeUart();
virtual int uartAvailable();
@ -40,5 +40,5 @@ class ArduinoPlatform : public Platform
protected:
uint32_t _mulitcastAddr;
uint16_t _mulitcastPort;
HardwareSerial& _knxSerial;
HardwareSerial* _knxSerial;
};

View File

@ -6,11 +6,11 @@
#include "knx/bits.h"
Esp32Platform::Esp32Platform() : ArduinoPlatform(Serial1)
Esp32Platform::Esp32Platform() : ArduinoPlatform(&Serial1)
{
}
Esp32Platform::Esp32Platform( HardwareSerial& s) : ArduinoPlatform(s)
Esp32Platform::Esp32Platform( HardwareSerial* s) : ArduinoPlatform(s)
{
}
@ -36,7 +36,7 @@ void Esp32Platform::macAddress(uint8_t * addr)
void Esp32Platform::restart()
{
Serial.println("restart");
ArduinoPlatform::SerialDebug.println("restart");
ESP.restart();
}
@ -95,4 +95,4 @@ void Esp32Platform::commitToEeprom()
EEPROM.commit();
}
#endif
#endif

View File

@ -3,7 +3,6 @@
#include <WiFi.h>
#include <WiFiUdp.h>
#define SerialDBG Serial
class Esp32Platform : public ArduinoPlatform
{
@ -11,7 +10,7 @@ class Esp32Platform : public ArduinoPlatform
using ArduinoPlatform::_mulitcastPort;
public:
Esp32Platform();
Esp32Platform( HardwareSerial& s);
Esp32Platform( HardwareSerial* s);
// ip stuff
uint32_t currentIpAddress() override;
@ -35,4 +34,4 @@ private:
WiFiUDP _udp;
};
#endif
#endif

View File

@ -7,11 +7,11 @@
#include "knx/bits.h"
EspPlatform::EspPlatform() : ArduinoPlatform(Serial)
EspPlatform::EspPlatform() : ArduinoPlatform(&Serial)
{
}
EspPlatform::EspPlatform( HardwareSerial& s) : ArduinoPlatform(s)
EspPlatform::EspPlatform( HardwareSerial* s) : ArduinoPlatform(s)
{
}
@ -37,7 +37,7 @@ void EspPlatform::macAddress(uint8_t * addr)
void EspPlatform::restart()
{
Serial.println("restart");
ArduinoPlatform::SerialDebug.println("restart");
ESP.reset();
}

View File

@ -3,7 +3,6 @@
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define SerialDBG Serial
class EspPlatform : public ArduinoPlatform
{
@ -12,7 +11,7 @@ class EspPlatform : public ArduinoPlatform
public:
EspPlatform();
EspPlatform( HardwareSerial& s);
EspPlatform( HardwareSerial* s);
// ip stuff
uint32_t currentIpAddress() override;
@ -36,4 +35,4 @@ private:
WiFiUDP _udp;
};
#endif
#endif

View File

@ -285,7 +285,7 @@
#define DPT_TimePeriodHrs_Z Dpt(203, 7)
#define DPT_UFlowRateLiter_per_h_Z Dpt(203, 11)
#define DPT_UCountValue16_Z Dpt(203, 12)
#define DPT_UElCurrent?A_Z Dpt(203, 13)
#define DPT_UElCurrent_Z Dpt(203, 13)
#define DPT_PowerKW_Z Dpt(203, 14)
#define DPT_AtmPressureAbs_Z Dpt(203, 15)
#define DPT_PercentU16_Z Dpt(203, 17)
@ -368,4 +368,4 @@ class Dpt
unsigned short index;
bool operator==(const Dpt& other) const;
bool operator!=(const Dpt& other) const;
};
};

View File

@ -6,17 +6,17 @@
#include <Arduino.h>
#include <FlashAsEEPROM.h>
SamdPlatform::SamdPlatform() : ArduinoPlatform(Serial1)
SamdPlatform::SamdPlatform() : ArduinoPlatform(&Serial1)
{
}
SamdPlatform::SamdPlatform( HardwareSerial& s) : ArduinoPlatform(s)
SamdPlatform::SamdPlatform( HardwareSerial* s) : ArduinoPlatform(s)
{
}
void SamdPlatform::restart()
{
SerialDBG.println("restart");
ArduinoPlatform::SerialDebug.println("restart");
NVIC_SystemReset();
}

View File

@ -4,17 +4,15 @@
#ifdef ARDUINO_ARCH_SAMD
#define SerialDBG SerialUSB
class SamdPlatform : public ArduinoPlatform
{
public:
SamdPlatform();
SamdPlatform( HardwareSerial& s);
SamdPlatform( HardwareSerial* s);
void restart();
uint8_t* getEepromBuffer(uint16_t size);
void commitToEeprom();
};
#endif
#endif