Есть скетч. для платы UNO компилируется нормально, а на MEGA 2560 выдает ошибки Код (C++): C:\Users\8FEE~1\AppData\Local\Temp\ccnbh3dj.ltrans0.ltrans.o: In function `OPENTHERM::send(unsigned char, OpenthermData&, void (*)()) [clone .constprop.12]': D:\ArdoProjects\libraries\arduino-opentherm-master\src/opentherm.cpp:87: undefined reference to `OPENTHERM::_stopTimer()' D:\ArdoProjects\libraries\arduino-opentherm-master\src/opentherm.cpp:66: undefined reference to `OPENTHERM::_startWriteTimer()' C:\Users\8FEE~1\AppData\Local\Temp\ccnbh3dj.ltrans0.ltrans.o: In function `_stop': D:\ArdoProjects\libraries\arduino-opentherm-master\src/opentherm.cpp:87: undefined reference to `OPENTHERM::_stopTimer()' C:\Users\8FEE~1\AppData\Local\Temp\ccnbh3dj.ltrans0.ltrans.o: In function `_listen': D:\ArdoProjects\libraries\arduino-opentherm-master\src/opentherm.cpp:39: undefined reference to `OPENTHERM::_stopTimer()' D:\ArdoProjects\libraries\arduino-opentherm-master\src/opentherm.cpp:45: undefined reference to `OPENTHERM::_startReadTimer()' collect2.exe: error: ld returned 1 exit status exit status 1 Ошибка компиляции для платы Arduino Mega or Mega 2560. код Код (C++): #include <opentherm.h> // Wemos D1 R1 //#define THERMOSTAT_IN 16 //#define THERMOSTAT_OUT 4 //#define BOILER_IN 5 //#define BOILER_OUT 14 // Wemos D1 R2 //#define THERMOSTAT_IN 16 //#define THERMOSTAT_OUT 4 //#define BOILER_IN 5 //#define BOILER_OUT 0 // Arduino UNO #define THERMOSTAT_IN 2 #define THERMOSTAT_OUT 4 #define BOILER_IN 3 #define BOILER_OUT 5 // Wemos D1 R32 // #define THERMOSTAT_IN 26 // #define THERMOSTAT_OUT 17 // #define BOILER_IN 25 // #define BOILER_OUT 16 OpenthermData message; void setup() { pinMode(THERMOSTAT_IN, INPUT); digitalWrite(THERMOSTAT_IN, HIGH); // pull up digitalWrite(THERMOSTAT_OUT, HIGH); pinMode(THERMOSTAT_OUT, OUTPUT); // low output = high current, high output = low current pinMode(BOILER_IN, INPUT); digitalWrite(BOILER_IN, HIGH); // pull up digitalWrite(BOILER_OUT, HIGH); pinMode(BOILER_OUT, OUTPUT); // low output = high voltage, high output = low voltage Serial.begin(115200); } #define MODE_LISTEN_MASTER 0 #define MODE_LISTEN_SLAVE 1 int mode = 0; /** * Loop will act as man in the middle connected between Opentherm boiler and Opentherm thermostat. * It will listen for requests from thermostat, forward them to boiler and then wait for response from boiler and forward it to thermostat. * Requests and response are logged to Serial on the way through the gateway. */ void loop() { if (mode == MODE_LISTEN_MASTER) { if (OPENTHERM::isSent() || OPENTHERM::isIdle() || OPENTHERM::isError()) { OPENTHERM::listen(THERMOSTAT_IN); } else if (OPENTHERM::getMessage(message)) { Serial.print(F("-> ")); OPENTHERM::printToSerial(message); Serial.println(); OPENTHERM::send(BOILER_OUT, message); // forward message to boiler mode = MODE_LISTEN_SLAVE; } } else if (mode == MODE_LISTEN_SLAVE) { if (OPENTHERM::isSent()) { OPENTHERM::listen(BOILER_IN, 800); // response need to be send back by boiler within 800ms } else if (OPENTHERM::getMessage(message)) { Serial.print(F("<- ")); OPENTHERM::printToSerial(message); Serial.println(); Serial.println(); OPENTHERM::send(THERMOSTAT_OUT, message); // send message back to thermostat mode = MODE_LISTEN_MASTER; } else if (OPENTHERM::isError()) { mode = MODE_LISTEN_MASTER; Serial.println(F("<- Timeout")); Serial.println(); } } }
Библиотека Опентерм, которую вы используете, предназначена только для ATmega328/168, ATmega32U4 и ATmega4809 Мега не поддерживается.