mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	Merge pull request #7 from thelsing/master
Arduino set Knx uart bugfix (#32)
This commit is contained in:
		
						commit
						7aa4343c6a
					
				| @ -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(); | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -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(); | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -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) | ||||
|     { | ||||
|  | ||||
| @ -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;     | ||||
|  | ||||
| @ -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(); | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -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; | ||||
| }; | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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(); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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; | ||||
| }; | ||||
| }; | ||||
|  | ||||
| @ -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(); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user