Serial Monitor sehr langsam

Hallo!

Dies ist mein erster Post, somit bitte ich um Verständnis bei Fehlern :slight_smile:

Folgendes Problem:
Ich möchte Füllstände von Gläsern mit Hilfe einer Wägezelle und einem Verstärker Hx711 erfassen. Allerdings stoße ich bereits beim testen meines Aufbaus auf ein Hindernis und zwar bekomme ich im Serial Monitor nur etwa alle 3 sec. ein Messergebnis :confused:

Ich bin Neuling in sachen Arduino, allerdings habe ich bereits einige andere Versuche mit Analogen Eingängen gemacht und hatte nie solche Probleme. Auch das Weglassen des delays am ende des Codes oder das Verändern der Baudrate hat nichts gebessert. Kann mir da einer weiter helfen?

Einige evtl. relevante Infos zum Aufbau:

Arduino Uno
Verstärker: Hx711
1Kg Wägezelle

Code des Testprogramms:

#include <Hx711.h>

Hx711 scale(A1, A0);

void setup() {

  Serial.begin(9600);

}

void loop() {

  Serial.print(scale.getGram(), 1);
  Serial.println(" g");

  delay(100);
}

Willkommen im Forum!
Weiß ja nicht welche Library du benutzt (ein Link könnte nicht schaden), aber falls es diese sein sollte:

Dann sieh dir dort das Beispiel an und den Hinweis:

See the example in examples/HX711SerialBegin. Please don't use examples/HX711Serial anymore. It is deprecated because the pin definition within the constructor is not timing safe.

Vielleicht hat das etwas mit deinem Problem zu tun...
Aber ich habe deine Hardware nicht und kann deshalb nicht viel mehr dazu sagen.

Vielen Dank!

Nein, ich benutze diese: Google Drive: Sign-in

Habe jetzt aber mal die Library, die du verlinkt hast mit dem Beispiel probiert.. Leider bekomme ich da direkt massig Fehlermeldungen beim kompilieren.

Folgende:

HX711SerialBegin.ino:1:19: error: HX711.h: No such file or directory
HX711SerialBegin:3: error: 'HX711' does not name a type
HX711SerialBegin.ino: In function 'void setup()':
HX711SerialBegin:13: error: 'scale' was not declared in this scope
HX711SerialBegin.ino: In function 'void loop()':
HX711SerialBegin:52: error: 'scale' was not declared in this scope

Der Code des Beispiels:

#include "HX711.h"

HX711 scale;

void setup() {
  Serial.begin(38400);
  Serial.println("HX711 Demo");

  Serial.println("Initializing the scale");
  // parameter "gain" is ommited; the default value 128 is used by the library
  // HX711.DOUT	- pin #A1
  // HX711.PD_SCK	- pin #A0
  scale.begin(A1, A0);

  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());			// print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));  	// print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));		// print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);	// print the average of 5 readings from the ADC minus tare weight (not set) divided
						// by the SCALE parameter (not set yet)

  scale.set_scale(2280.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();				        // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));		// print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided
						// by the SCALE parameter set with set_scale

  Serial.println("Readings:");
}

void loop() {
  Serial.print("one reading:\t");
  Serial.print(scale.get_units(), 1);
  Serial.print("\t| average:\t");
  Serial.println(scale.get_units(10), 1);

  scale.power_down();			        // put the ADC in sleep mode
  delay(5000);
  scale.power_up();
}

#include “HX711.h”
#include <HX711.h>

Tipp:
Fehlermeldungen sind oft für Menschen lesbar.
Und ebenso oft, macht es Sinn, bei der ersten anzufangen.

hi,

zur erläuterung:

in spitzen klammern bedeutet, das die library im library-verzeichnis gesucht wird (oder in einem davon, wenn mehrere definiert sind).

in anführungszeichen: die library wird im sketch-verzeichnis erwartet. das kann praktisch sein, wenn man die library speziell für diesen sketch verändert.

gruß stefan

Eisebaer:
hi,

zur erläuterung:

in spitzen klammern bedeutet, das die library im library-verzeichnis gesucht wird (oder in einem davon, wenn mehrere definiert sind).

in anführungszeichen: die library wird im sketch-verzeichnis erwartet. das kann praktisch sein, wenn man die library speziell für diesen sketch verändert.

gruß stefan

Fast richtig.
In spitzen Klammern bedeutet, das die Library nur im library-Verzeichnis gesucht wird.

In Anführungszeichen: die Library wird erst im Sketch-Verzeichnis gesucht, und wenn dort nicht gefunden, im library-Verzeichnis.

Gibt es im Sketchverzeichnis das .h-File nicht, führen beide Varianten zum gleichen Ergebnis.

Nachdem das Offtopic Thema #include nun wohl erledigt ist:

Wenn etwas langsam (mehrere Sekunden ?) ist, kann es wohl nur der Aufruf der Methode
scale.getGram()  und nicht die Methode Serial.print oder gar der SerialMonitor sein.

Richtig? Kannst du das bestätigen, und evtl. das Thema dieses Threads anpassen (nachträglich editieren des ersten Post...) ?

hi,

sehe ich nicht so offtopic, wenn man wegen des problems eine andere library verwendet. vor allem kann das thema nicht erledigt sein.

In Anführungszeichen: die Library wird erst im Sketch-Verzeichnis gesucht, und wenn dort nicht gefunden, im library-Verzeichnis.

Gibt es im Sketchverzeichnis das .h-File nicht, führen beide Varianten zum gleichen Ergebnis.

falls das stimmt (und ich glaube es Dir gern), dann hilft das ändern auf spitze klammern auch nicht. weil die library dann falsch reinkopiert bzw. importiert wurde.

gruß stefan

Hallo,

könnte es nicht am "delay(5000)" innerhalb der loop liegen? Allerdings gibt es dann nur alle 5 Sekunden einen Analogwert, nicht alle 3.

hi,

das mit dem laaaangen delay ist ja nur das beispielprogramm für die alternativ-library, das er garnicht zum laufen gebracht hat.

gruß stefan

Eisebaer:
hi,

das mit dem laaaangen delay ist ja nur das beispielprogramm für die alternativ-library, das er garnicht zum laufen gebracht hat.

gruß stefan

Richtig, es geht eigentlich um den Code aus meinem ersten Post. Der ja an für sich funktioniert, nur eben extrem langsam.
Das mit den Spitzen Klammern werde ich natürlich noch ausprobieren, das war mir nicht bewusst.

michael_x:
Wenn etwas langsam (mehrere Sekunden ?) ist, kann es wohl nur der Aufruf der Methode
scale.getGram()  und nicht die Methode Serial.print oder gar der SerialMonitor sein.

Sprich es gäbe hierfür eine bessere Methode??

hi,

vorsichtshaber würde ich mal ein

Serial.println(millis());
scale.getGram();
Serial.println(millis());

ausprobieren. wird sich zwar vermutlich bestätigen, daß die funktion so lange dauert, aber man weiß ja nie.

gruß stefan

Sprich es gäbe hierfür eine bessere Methode??

Erstmal keine Ahnung, aber du könntest mit einem passenderen Titel die Leser nicht so sehr in die Irre führen. Dann könntest du dich mehr auf deine Hx711 Library konzentrieren und dort rauskriegen, wie/ob du (evtl. nach einer relativ lang dauernden Initialisierung ?) fortlaufende Messungen schneller hinkriegst.
Oder so...