Компиляция на uno и mega

Тема в разделе "Arduino & Shields", создана пользователем Михаил123, 13 авг 2022.

  1. Есть скетч. для платы 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();
        }
      }
    }
     
  2. b707

    b707 Гуру

    Библиотека Опентерм, которую вы используете, предназначена только для ATmega328/168, ATmega32U4 и ATmega4809
    Мега не поддерживается.