[Gelöst] Fehler beim Kompilieren: expected initializer before interruptDesignator

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
stony
Beiträge: 49
Registriert: 25.12.2014, 12:49
Hat sich bedankt: 6 Mal

[Gelöst] Fehler beim Kompilieren: expected initializer before interruptDesignator

Beitrag von stony » 04.04.2021, 10:13

Hallo zusammen,

ich bin gerade dabei meinen ersten Selbstbau Temperatursensor zu bauen. Das Frequenztest Script habe ich durchlaufen lassen und er hat eine für sich optimale Frequenz gefunden (sind ca. -70 dB ok? Als Antenne einen 8,3 cm langen Draht genommen, davon 1 mm abisoliert und am "Antennenloch" angelötet).

Jetzt wollte ich den Sketch HM-WDS40-TH-I-DHT22 von jp112sdl auspielen, bekomme aber folgenden Fehler. Leider habe ich das Problem bisher nicht herausgefunden. Ich müsste alle nötigen Libs installiert haben, weiter unten in der Fehlermeldung sieht man auch die gefunden Libs.

Code: Alles auswählen

In file included from C:\Users\stony\Documents\Arduino\HM-WDS40-TH-I-DHT22\HM-WDS40-TH-I-DHT22.ino:14:0:
C:\Users\stony\Documents\Arduino\libraries\EnableInterrupt/EnableInterrupt.h:91:30: error: expected initializer before 'interruptDesignator'
 void enableInterrupt(uint8_t interruptDesignator, void (*userFunction)(void), uint8_t mode);
                              ^
C:\Users\stony\Documents\Arduino\libraries\AskSinPP/AskSinPP.h:45:59: note: in definition of macro 'enableInterrupt'
     #define enableInterrupt(pin,handler,mode) pinpolling##pin().enable(pin,handler,mode)
                                                           ^~~
C:\Users\stony\Documents\Arduino\libraries\EnableInterrupt/EnableInterrupt.h:92:31: error: expected initializer before 'interruptDesignator'
 void disableInterrupt(uint8_t interruptDesignator);
                               ^
C:\Users\stony\Documents\Arduino\libraries\AskSinPP/AskSinPP.h:46:47: note: in definition of macro 'disableInterrupt'
     #define disableInterrupt(pin) pinpolling##pin().disable()
                                               ^~~
C:\Users\stony\Documents\Arduino\libraries\EnableInterrupt/EnableInterrupt.h:1214:30: error: expected initializer before 'interruptDesignator'
 void enableInterrupt(uint8_t interruptDesignator, interruptFunctionType userFunction, uint8_t mode) {
                              ^
C:\Users\stony\Documents\Arduino\libraries\AskSinPP/AskSinPP.h:45:59: note: in definition of macro 'enableInterrupt'
     #define enableInterrupt(pin,handler,mode) pinpolling##pin().enable(pin,handler,mode)
                                                           ^~~
C:\Users\stony\Documents\Arduino\libraries\EnableInterrupt/EnableInterrupt.h:1394:32: error: expected initializer before 'interruptDesignator'
 void disableInterrupt (uint8_t interruptDesignator) {
                                ^
C:\Users\stony\Documents\Arduino\libraries\AskSinPP/AskSinPP.h:46:47: note: in definition of macro 'disableInterrupt'
     #define disableInterrupt(pin) pinpolling##pin().disable()
                                               ^~~
Bibliothek AskSinPP in Version 5.0.0 im Ordner: C:\Users\stony\Documents\Arduino\libraries\AskSinPP  wird verwendet
Bibliothek Low-Power in Version 1.6 im Ordner: C:\Users\stony\Documents\Arduino\libraries\Low-Power  wird verwendet
Bibliothek EnableInterrupt in Version 1.1.0 im Ordner: C:\Users\stony\Documents\Arduino\libraries\EnableInterrupt  wird verwendet
Bibliothek DHT_sensor_library in Version 1.4.2 im Ordner: C:\Users\stony\Documents\Arduino\libraries\DHT_sensor_library  wird verwendet
Bibliothek Adafruit_Unified_Sensor in Version 1.1.4 im Ordner: C:\Users\stony\Documents\Arduino\libraries\Adafruit_Unified_Sensor  wird verwendet
exit status 1
Fehler beim Kompilieren für das Board Arduino Pro or Pro Mini.
Ich habe testweise mal die Version 0.9.8 der Lib EnableInterrupt installiert, ändert aber nichts am Problem. An den Boardeinstellungen sollte es nicht liegen (Arduino Pro Mini -> Atmega 328P 3,3 V ausgewählt), denn der Frequenztest wird ja erfolgreich kompiliert und übertragen.

Ich hoffe ihr könnt mir helfen, denn komme das Problem nicht bewältigt.
Zuletzt geändert von stony am 04.04.2021, 11:40, insgesamt 1-mal geändert.

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Fehler beim Kompilieren: expected initializer before interruptDesignator

Beitrag von jp112sdl » 04.04.2021, 10:50

Hi,

klappt denn das Kompilieren eines anderen (einfachen) Sketches?
z.B. https://github.com/jp112sdl/Beispiel_As ... HM-PB-2-FM
oder https://github.com/jp112sdl/Beispiel_As ... 30-T-O-NTC

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

stony
Beiträge: 49
Registriert: 25.12.2014, 12:49
Hat sich bedankt: 6 Mal

Re: Fehler beim Kompilieren: expected initializer before interruptDesignator

Beitrag von stony » 04.04.2021, 11:40

Klappt! Und jetzt kommt der Knaller: Wenn ich deinen Code aus Github aus der Raw Ansicht in den Sketch kopiere, geht es auch wieder. Ich hatte nur die PINs für LED und den DHT22 angepasst.

Danke für den Tipp. Ich kann mir ehrlich gesagt nicht erklären, was da falsch gelaufen ist. Ich habe die Arduino IDE 1.8.13 und die aktuelle 2.0.0-beta.4 installiert gehabt. Eine Deinstallation der beta hat nichts gebracht. Ob die vielleicht irgendwas kaputt gemacht hat?

Ich poste hier mal aus Interesse den Quellcode:

Edit: Ich sehe gerade, dass die Quellcode sich mit dem aus deinem GIT unterscheidet. Ich frage mich, woher ich den unten stehen Quellcode habe. Habe jetzt das WE so viele Stunden mit löten, lesen etc. verbracht, irgendwas habe ich wohl durcheinander gebracht.

Code: Alles auswählen

//-
//-----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons -
// http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//-
//-----------------------------------------------------------------------------------------------------------------------
// ci-test=yes board=328p aes=no

// define this to read the device id, serial and device type from bootloader
// section #define USE_OTA_BOOTLOADER

#define EI_NOTEXTERNAL
#include <AskSinPP.h>
#include <EnableInterrupt.h>
#include <LowPower.h>
#include <sensors/Dht.h>

#include <MultiChannelDevice.h>

// we use a Pro Mini
// Arduino pin for the LED
// D5 == PIN 5 on Pro Mini
#define LED_PIN 5
// D4 == PIN 4 on Pro Mini
#define DHT22_PIN 4
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8

//-----------------------------------------------------------------------------------------

// Korrektur von Temperatur und Luftfeuchte
// Einstellbarer OFFSET für Temperatur -> gemessene Temp +/- Offset = Angezeigte
// Temp.
#define OFFSETtemp 0 // z.B -50 ≙ -5°C / 50 ≙ +5°C

// Einstellbarer OFFSET für Luftfeuchte -> gemessene Luftf. +/- Offset =
// Angezeigte Luftf.
#define OFFSEThumi 0 // z.B -10 ≙ -10%RF / 10 ≙ +10%RF

//-----------------------------------------------------------------------------------------

// number of available peers per channel
#define PEERS_PER_CHANNEL 6

// seconds between sending messages
#define MSG_INTERVAL 180

// all library classes are placed in the namespace 'as'
using namespace as;

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
    {0x00, 0x3f, 0x10},       // Device ID
    "JPTH10I001",             // Device Serial
    {0x00, 0x3f},             // Device Model
    0x10,                     // Firmware Version
    as::DeviceType::THSensor, // Device Type
    {0x01, 0x00}              // Info Bytes
};

/**
   Configure the used hardware
*/
typedef AvrSPI<10, 11, 12, 13> SPIType;
typedef Radio<SPIType, 2> RadioType;
typedef StatusLed<LED_PIN> LedType;
typedef AskSin<LedType, BatterySensor, RadioType> Hal;
Hal hal;

class WeatherEventMsg : public Message {
public:
  void init(uint8_t msgcnt, int16_t temp, uint8_t humidity, bool batlow) {
    uint8_t t1 = (temp >> 8) & 0x7f;
    uint8_t t2 = temp & 0xff;
    if (batlow == true) {
      t1 |= 0x80; // set bat low bit
    }
    Message::init(0xc, msgcnt, 0x70, BIDI | WKMEUP, t1, t2);
    pload[0] = humidity;
  }
};

class WeatherChannel
    : public Channel<Hal, List1, EmptyList, List4, PEERS_PER_CHANNEL, List0>,
      public Alarm {

  WeatherEventMsg msg;
  int16_t temp;
  uint8_t humidity;
  uint16_t millis;
  Dht<DHT22_PIN, DHT22, 4> dht22;

public:
  WeatherChannel() : Channel(), Alarm(5), temp(0), humidity(0), millis(0) {}
  virtual ~WeatherChannel() {}

  // here we do the measurement
  void measure() {
    DPRINT("Measure...\n");
    if (dht22.measure()) {
      DPRINTLN("DHT22 measurement ok.");
    } else {
      DPRINTLN("DHT22 measurement NOT ok.");
    }
    humidity = dht22.humidity();
    temp = dht22.temperature();
    DPRINT("T/H = " + String(temp + OFFSETtemp) + "/" +
           String(humidity + OFFSEThumi) + "\n");
  }

  virtual void trigger(__attribute__((unused)) AlarmClock &clock) {
    uint8_t msgcnt = device().nextcount();
    // reactivate for next measure
    tick = delay();
    clock.add(*this);
    measure();

    msg.init(msgcnt, temp + OFFSETtemp, humidity + OFFSEThumi,
             device().battery().low());
    if (msgcnt % 20 == 1)
      device().sendPeerEvent(msg, *this);
    else
      device().broadcastEvent(msg, *this);
  }

  uint32_t delay() { return seconds2ticks(MSG_INTERVAL); }

  void setup(Device<Hal, List0> *dev, uint8_t number, uint16_t addr) {
    Channel::setup(dev, number, addr);
    sysclock.add(*this);
    dht22.init();
  }

  uint8_t status() const { return 0; }

  uint8_t flags() const { return 0; }
};

typedef MultiChannelDevice<Hal, WeatherChannel, 1> WeatherType;
WeatherType sdev(devinfo, 0x20);

ConfigButton<WeatherType> cfgBtn(sdev);

void setup() {
  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  sdev.init(hal);
  hal.initBattery(60UL * 60, 22, 19);
  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
  sdev.initDone();
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if (worked == false && poll == false) {
    hal.activity.savePower<Sleep<>>(hal);
  }
}

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“