Probleme beim kompilieren von Wiege-App

Moin Moin ... Ich bin zwar kein absoluter Newbie in Sachen Arduino, aber stehe noch ziemlich am Anfang und fummel mich gerade in die ganze Sache rein. Ich habe aus dem Kaffee-Netz Forum die Bauanleitung für eine spezielle Waage mit Wägesensor am Wickel, die Hardware (basiert auf einem Arduino NANO) dafür besorgt und mit Arduino IDE versucht den Sketch in den Nano zu beamen.
Nachdem ich anfangs erst einmal die Probleme mit den Lib`s erledigt hatte, bekam ich aber immer wieder folgende Fehlermeldung:

C:\Users\Jo\Downloads\SJ_Scale_OLED\Scale.cpp: In constructor 'Scale::Scale(byte, byte, byte, byte)':
C:\Users\Jo\Downloads\SJ_Scale_OLED\Scale.cpp:17:37: error: no matching function for call to 'HX711::HX711(byte&, byte&)'
   _scale = new HX711(doutPin, sckPin);    // parameter "gain" is ommited; the default value 128 is used by the library
                                     ^
In file included from C:\Users\Jo\Downloads\SJ_Scale_OLED\Scale.h:4:0,
                 from C:\Users\Jo\Downloads\SJ_Scale_OLED\Scale.cpp:1:
C:\Users\Jo\Documents\Arduino\libraries\HX711\src/HX711.h:30:3: note: candidate: HX711::HX711()
   HX711();
   ^~~~~
C:\Users\Jo\Documents\Arduino\libraries\HX711\src/HX711.h:30:3: note:   candidate expects 0 arguments, 2 provided
C:\Users\Jo\Documents\Arduino\libraries\HX711\src/HX711.h:19:7: note: candidate: constexpr HX711::HX711(const HX711&)
 class HX711
       ^~~~~
C:\Users\Jo\Documents\Arduino\libraries\HX711\src/HX711.h:19:7: note:   candidate expects 1 argument, 2 provided

exit status 1

Compilation error: no matching function for call to 'HX711::HX711(byte&, byte&)'

Der Fehler scheint in der Datei Scale.cpp zu liegen, da hier heraus der Fehler entsteht:

#include "Scale.h"


Scale::Scale(byte doutPin, byte sckPin, byte vdcPin, byte gndPin) {
  if (gndPin != NO_PIN) {
    // power supply use of A4 and A5 for HX711 (normal operation < 1.5mA)
    // GND
    pinMode(gndPin, OUTPUT);
    digitalWrite(gndPin, LOW);
  }
  if (vdcPin != NO_PIN) {
    // +5VDC
    pinMode(vdcPin, OUTPUT);
    digitalWrite(vdcPin, HIGH);
  }
  
  _scale = new HX711(doutPin, sckPin);    // parameter "gain" is ommited; the default value 128 is used by the library
}

void Scale::init(float scaleFactor) {
  _scale->set_scale(scaleFactor);
}

float Scale::calibrate() {
  /*
  How to Calibrate your scale:       
  1. Call set_scale() with no parameter.
  2. Call tare() with no parameter.
  3. Place a known weight on the scale and call get_units(10).
  4. Divide the result in step 3 to your known weight. You should get about the parameter you need to pass to set_scale.
  5. Adjust the parameter in step 4 until you get an accurate reading.
  */
  _scale->set_scale();
  _scale->tare();

  // give use up to 10s time to place calibration weight
  delay(10000);

  float scaleFactor = _scale->get_units(10) / CALIBRATION_WEIGHT;
  init(scaleFactor);

  return scaleFactor;
}

void Scale::start() {
  int maxTare = 20;
  int data;
  byte numReads = 0;
  
  noInterrupts();
  
  do
  {
    _scale->tare(); // reset the scale to 0
    delay(100);
    data = abs(_scale->get_units() * 10);
    if (data > 1)
      numReads = 0;
    else
      numReads++;
    maxTare--;
  } while (maxTare > 0 && numReads < 2);  // re-tare as long as we have two consecutive reads with > 0.1g after tare (max. retries: 20)

  _numScaleReadings = 0;
  _totalWeight = 0;
  for (int i = 0; i < MAX_SCALE_READINGS; i++)
    _scaleReadings[i] = 0;
    
  interrupts();
}

unsigned int Scale::updateCurrentWeight() {
  // note: this method takes up to 580µs (each scale read takes ap. 550µs)
  unsigned int data = _scale->get_units() * 10;
    
  if (data > 999) {
    data = _scaleReadings[_numScaleReadings];
  }

  // remove oldest value from total
  _totalWeight -= _scaleReadings[_numScaleReadings];
  // add newest value
  _scaleReadings[_numScaleReadings] = data;
  _totalWeight += data;
 
  _numScaleReadings = (_numScaleReadings + 1) % MAX_SCALE_READINGS;
 
  return _totalWeight / MAX_SCALE_READINGS;
}

Die Befehlszeile

_scale = new HX711(doutPin, sckPin); // parameter "gain" is ommited; the default value 128 is used by the library
}

wird in der Fehlermeldung rot makiert.

Ich habe noch zu wenig Erfahrung um den Fehler selbst zu beheben und ich bräuchte da einmal Hilfe.

Mit

#include "Scale.h"

Sagst Du dem Kompiler daß du diese Bibliothek benutzen willst bzw die Funktionen die diese Bibliothek zur Verfügung stellt.
Dazu mußt Du die Bibliothek installiert haben. Der Ort hängt vom #include ab. Es ist #include"" und #include <> möglich. Unerschied siehe:

Wie bzw wo hast Du die Bibliothek installiert?

Grüße Uwe

Danke Uwe, die habe ich im Sketch Verzeichnis liegen, wo auch die .ino und die anderen Dateien (Scale.cpp oder ButtonEncoder.h ...) liegen, dass ist bei mir ein entpackter Ordner im Download Verzeichnis

Das scheint ja dann ja auch mit den "Scale.h" richtig beschrieben worden zu sein.

Gruß
Jo

Die Scale.cpp lib passt nicht so richtig zur HX711 library.
Hast du die unabhängig voneinander gefunden?

Moin Michael ... Den Sketch konnte man als ganzes HIER herunterladen. Die Lib Dateien waren nicht dabei und die musste musste ich mir zusammensuchen.

Unter HIER versteckt sich kein Link :thinking:
Ok ist im Post #1 :wink:

Es gibt oft mehrere Bibliotheken für den gleichen Zweck / Halbleiter. Du könntest einfach die falsche Bibliothek die den gleichen Namen hat erwischet haben.

Hast Du keine Möglichkeit den Autor zu fragen welche Bibliotheken er verwendet?
Grüße Uwe

Ich muss jetzt einmal Fragen, reden wir von der Bibliothek in dem die Header, .ino und .cpp Dateien sind oder quasi die Treiber für die angehangene Hardware (HX711, Display, ...) ?

Ich frage mal den Autor. Das Problem ist, dass der Autor das Programm schon vor 7 Jahren veröffentlicht hat und schon durchblicken ließ, dass er so gut wie keinen Bezug mehr zu seinem Projekt hat.

Ich entnehme aber Deinem grundsätzlichen Fragen, dass Du erst einmal nicht von einem Fehler im Skript ausgehst, sondern, dass beim Kompilieren nicht die richtige Bibliothek mit den zu erwartenden Inhalten gefunden wird?

Die Funktionen der Bibliothek sind anders (andere Namen, andere Paramenter) , als die im Sketch verwendet.

Ja, der Autor hat mir mittlerweile auch mitgeteilt und bestätigt, dass dort am Constructor etwas verändert wurde und somit Bibliotheken und Sketch so nicht mehr zusammen passen. Er hat leider auch nicht mehr die alten Dateien.

Ich habe das nun auch schon verstanden, nachdem ich mich mal mit den Grundlagen der Bibliotheken in Arduino ein wenig beschäftigt habe. Aber den Constructor anzupassen, dafür bin ich noch zu klein und lege das Projekt erst einmal an die Seite, bis ich mehr Grundlagen habe alles selbst anzupassen.

Vielen Dank für Deine/Eure Mithilfe.

Bekommt man Deinen Code auch irgendwie vollständig ohne den Dropboxkram?

Leider nein ... Ohne Zustimmung des Autors kann ich das leider nicht machen

???
Was ist das denn für ein geheimnisvoller Autor, der selbst offensichtlich nicht genannt werden möchte, kruden Code in noch kruderen Wolken ablegt, nicht in der Lage ist seinen Kram zu reparieren und - ach ich lass es.

Leute was seid ihr denn für ein komisches Volk?

Ok. Dann bleib mir weg.

Schilddrüsenüberfunktion hatte ich auch mal :grinning: ... Tief durchatmen !!!

Kann Dich leider nicht per PM anschreiben. Schreibe mich doch mal bitte per PM an.