Umzug des Forums zu einem neuen Anbieter

Der Umzug des Forums zu einem neuen Anbieter rückt näher, beachtet daher die fortlaufenden Informationen in den Forennews zu dem Thema:
Ausführliche Infos (Stand 7.5.2021)

Wir weisen ausdrücklich darauf hin, dass eine Nutzung Eures Benutzerkontos im neuen Forum nur möglich ist, wenn eine gültige E-Mail-Adresse (d.h. eine E-Mail-Adresse, auf der ihr Mails empfangen und lesen könnte) hier im Forum für Euer Benutzerkonto hinterlegt ist!
Eine nachträgliche Korrektur im neuen Forum ist nicht mehr möglich und alle Mitglieder ohne gültige E-Mail-Adresse haben dann keinen Zugriff mehr auf ihr Benutzerkonto.


Der gesamte Kleinanzeigen-Bereich ist aktuell gesperrt, so dass nur noch laufende Angebote und Gesuche abgewickelt werden können und keine neuen Angebote mehr eingestellt werden können. Wir möchten verhindern, das rund um die Woche Ausfallzeit laufende Angebote oder Verkaufsabwicklungen offen sind.

Arduino-Hilfe benötigt: Zugkraftmesswagen

Bereich für alle Themen rund um Digitaltechnik und digitale Umbauten.
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Arduino-Hilfe benötigt: Zugkraftmesswagen

#1

Beitrag von fbstr »

Hallo,

nachdem ich schon eine Ewigkeit nichts mehr mit Arduino gemacht habe, brauche ich etwas Unterstützung... :roll:

Mein Zugkraftmesswagen ist nun vom mechanischen und elektrischen Aufbau fast fertig, so dass nun die Arduino-Ansteuerung ansteht.
Bild

Die Schaltung sieht mit Fritzing momentan so aus, wobei der Taster noch nicht im Sketch drin ist. Das wird dann wohl meine nächste Frage sein.
Bild

Durch googeln habe ich das OLED 128x32 und die Wägezelle (HX711) soweit zum laufen gebracht.
Zum Testen habe ich mir eine Waage gebastelt, wo ich die einzelnen Schritte durchtesten kann.
Bild

Ich bin eigentlich ganz zufrieden, ich konnte die Waage kalibrieren und die zeigt nun den Wert auf beiden OLED's an (Now:___gr).
Bild


Ich hänge nun an etwas - vermutlich - ganz Banalem.
Ich will den maximalen Wert (MaxWeight) gleich dem aktuellen Gewicht (NowWeight) setzen wenn dieses größer ist.
Aber irgendwie nimmt der Sketch meine variable MaxWeight nicht an. Beim Kompilieren kommt kein Fehler, aber MaxWeight ist immer gleich 0.
Das zeigt auch die Ausgabe am Seriellen Monitor:
Bild

Hier ist der Sketch:

Code: Alles auswählen

/*
 
 Version
 03: HX711, OLED, NowWeight-Anzeige
 04: Anzeige MaxWeight 
 05: Mit Taster an D12 fuer Reset des MaxWeights

*/

#include "HX711.h"
#include <SPI.h>
#include <Wire.h>
//Bibliotheken für den betrieb des Displays
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define DOUT  7
#define CLK  8
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

HX711 scale;

float calibration_factor = 2110; //2110 worked for me (1kg) max scale setup
const byte buttonResetMax = 12; //Reset button an D12
const long NowWeight = 0;       //NowWeight auf 0 setzen (aktuelles Gewicht)
const long MaxWeight = 0;       //MaxWeight auf 0 setzen (Maximales Gewicht)


void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(3000);
  display.clearDisplay();
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press + or a to increase calibration factor");
  Serial.println("Press - or z to decrease calibration factor");
  
  scale.begin(DOUT, CLK);
  scale.set_scale();
  scale.tare(); //Reset the scale to 0
  
  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); //Adjust to this calibration factor
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.print(" MaxWeight: ");
  Serial.print(MaxWeight);
  Serial.println();
  long NowWeight = scale.get_units();
  
  display.setTextSize(2); // OLED 1-4
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("Max:");
  display.print(MaxWeight, 1);
  display.print("gr");
  display.setCursor(0,16);
  display.print("Now:");
  display.print(NowWeight, 1);
  display.print("gr");
  display.display();
  display.clearDisplay();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }

  if(NowWeight > MaxWeight)
  {
      long MaxWeight = NowWeight;
  }
  
}


Es geht um diesen Ausdruck ziemlich weit unten:

Code: Alles auswählen

if(NowWeight > MaxWeight)
  {
      long MaxWeight = NowWeight;
  }
Irgendwas mache ich da falsch.
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#2

Beitrag von fbstr »

Ich habe mal am seriellen Monitor noch mein NowWeight auch ausgegeben. Dieser ist dort genauso 0 wie der MaxWeight.
Beim OLED verwende ich aber diese Variable und es wird das Gewicht angezeigt. Grübel... :(
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Benutzeravatar

schmiedi
InterRegioExpress (IRE)
Beiträge: 401
Registriert: Di 7. Jul 2015, 16:44
Nenngröße: H0
Stromart: analog DC
Steuerung: ZNS
Gleise: Piko A, Roco u.a.
Wohnort: NRW
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#3

Beitrag von schmiedi »

Hallo Frank,

gleich am Anfang ist mir aufgefallen:

const long MaxWeight = 0; //MaxWeight auf 0 setzen (Maximales Gewicht)

Konstanten kann nur einmal ein Wert zugewiesen werden, das Ganze sollte also ohne "const" funktionieren. OK, ich habe das Programm nicht komplett analysiert, aber die Zeile oben ist schon mal ein guter Kandidat...

Viel Erfolg!
Dieter
Der Zug zur Besichtigungstour "Rund um Steinen":
Bild

md95129
InterRegioExpress (IRE)
Beiträge: 383
Registriert: So 15. Jan 2017, 18:39
Nenngröße: H0m
Stromart: digital
Steuerung: Eigenbau
Gleise: BEMO
Wohnort: Berlin
Alter: 76
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#4

Beitrag von md95129 »

Du hast Deine Variablen als Konstante deklariert:
const long NowWeight = 0; //NowWeight auf 0 setzen (aktuelles Gewicht)
const long MaxWeight = 0; //MaxWeight auf 0 setzen (Maximales Gewicht)
Henner, ex-Donkey Doktor der EDH Lumber

Railcar
InterRegioExpress (IRE)
Beiträge: 442
Registriert: Do 15. Nov 2018, 09:41
Alter: 68

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#5

Beitrag von Railcar »

Hi Frank,
bist du sicher das const die richtige Deklaration ist

Code: Alles auswählen

const long NowWeight = 0;       //NowWeight auf 0 setzen (aktuelles Gewicht)
const long MaxWeight = 0;       //MaxWeight auf 0 setzen (Maximales Gewicht)
Const ist eine read-only Anweisung. guckst du hier:

https://www.arduino.cc/reference/en/lan ... ers/const/

Ulrich

Edit: Compiliert auch ohne const
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#6

Beitrag von fbstr »

Hallo Dieter, Henner und Ulrich,

vielen Dank für Eure Antworten.
:gfm:
Ihr habt Recht, const definiert eine Konstante und ich will ja eine Variable haben. Ich bin nicht so der Programmierer, sondern versuche erstmal an Hand von den bisherigen Sketchen mir das passende zusammen zu suchen.

Ich habe den Sketch angepasst und nur die 2 const entfernt.

Code: Alles auswählen

/*
 Version 04
 03: HX711, OLED, NowWeight-Anzeige
 04: Anzeige MaxWeight 
 05: Mit Taster an D12 fuer Reset des MaxWeights
*/

#include "HX711.h"
#include <SPI.h>
#include <Wire.h>
//Bibliotheken für den betrieb des Displays
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define DOUT  7
#define CLK  8
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

HX711 scale;

float calibration_factor = 2110; //2110 worked for me (1kg) max scale setup
const byte buttonResetMax = 12; //Reset button an D12
long NowWeight = 0;       //NowWeight auf 0 setzen (aktuelles Gewicht)
long MaxWeight = 0;       //MaxWeight auf 0 setzen (Maximales Gewicht)


void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(3000);
  display.clearDisplay();
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press + or a to increase calibration factor");
  Serial.println("Press - or z to decrease calibration factor");
  
  scale.begin(DOUT, CLK);
  scale.set_scale();
  scale.tare(); //Reset the scale to 0
  
  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); //Adjust to this calibration factor
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.print(" NowWeight: ");
  Serial.print(NowWeight);
  Serial.print(" MaxWeight: ");
  Serial.print(MaxWeight);
  Serial.println();
  long NowWeight = scale.get_units();
  
  display.setTextSize(2); // OLED 1-4
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("Max:");
  display.print(MaxWeight, 1);
  display.print("gr");
  display.setCursor(0,16);
  display.print("Now:");
  display.print(NowWeight, 1);
  display.print("gr");
  display.display();
  display.clearDisplay();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }

  if(NowWeight > MaxWeight)
  {
      long MaxWeight = NowWeight;
  }
  
}
Der serielle Monitor zeigt allerdings immer noch bei beiden 0 an:

Code: Alles auswählen

Reading: 0.1 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 0
Reading: 0.2 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 0
Reading: 0.2 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 0
Ich habe also irgendwo noch einen Gedankenfehler drin.
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Benutzeravatar

schmiedi
InterRegioExpress (IRE)
Beiträge: 401
Registriert: Di 7. Jul 2015, 16:44
Nenngröße: H0
Stromart: analog DC
Steuerung: ZNS
Gleise: Piko A, Roco u.a.
Wohnort: NRW
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#7

Beitrag von schmiedi »

Hallo Frank,

die Definition von "long MaxWeight = NowWeight;" führt dazu, daß bei jedem Durchlauf von loop die Variable im if-Block neu angelegt wird. Lösung: Definition als globale Variable bzw. als static in der loop()-Funktion.

Viele Grüße,
Dieter
Der Zug zur Besichtigungstour "Rund um Steinen":
Bild
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#8

Beitrag von fbstr »

Danke Dieter,

ich habe etwas gegoogelt. Zu globaler Variable habe ich nichts gefunden was ich verstanden hätte. Static habe ich dann mal probiert mit dem Ergebnis dass gar nichts mehr funktioniert hat. Also wieder zurück auf den vorherigen Stand.

Und dann bog Deine Antwort
schmiedi hat geschrieben: Sa 24. Aug 2019, 16:16 ... "long MaxWeight = NowWeight;" führt dazu, daß bei jedem Durchlauf von loop die Variable im if-Block neu angelegt wird.
irgendwelche Gehirnwindungen bei mir wieder gerade.

Ich habe das "long" entfernt und nun funktioniert dieser Schritt. Im seriellen Monitor wird zwar NowWeight immer noch mit 0 angezeigt, aber MaxWeight hat dort einen Wert bekommen und vor allem das OLED zeigt den Wert an:

Code: Alles auswählen

eading: 225.3 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 806
Reading: 225.3 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 806
Reading: 225.2 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 806
Das OLED zeigt bei diesem Beispiel nun an:
Max:806gr
Now:225gr

Aktueller Sketch:

Code: Alles auswählen

/*
 Version 04
 03: HX711, OLED, NowWeight-Anzeige
 04: Anzeige MaxWeight 
 05: Versuch MaxWeight
*/

#include "HX711.h"
#include <SPI.h>
#include <Wire.h>
//Bibliotheken für den betrieb des Displays
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define DOUT  7
#define CLK  8
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


HX711 scale;

float calibration_factor = 2110; //2110 worked for me (1kg) max scale setup
const byte buttonResetMax = 12; //Reset button an D12
long NowWeight = 0;       //NowWeight auf 0 setzen (aktuelles Gewicht)
long MaxWeight = 0;       //MaxWeight auf 0 setzen (Maximales Gewicht)


void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(3000);
  display.clearDisplay();
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press + or a to increase calibration factor");
  Serial.println("Press - or z to decrease calibration factor");
  
  scale.begin(DOUT, CLK);
  scale.set_scale();
  scale.tare(); //Reset the scale to 0
  
  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); //Adjust to this calibration factor
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.print(" NowWeight: ");
  Serial.print(NowWeight);
  Serial.print(" MaxWeight: ");
  Serial.print(MaxWeight);
  Serial.println();
  long NowWeight = scale.get_units();
  
  display.setTextSize(2); // OLED 1-4
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("Max:");
  display.print(MaxWeight, 1);
  display.print("gr");
  display.setCursor(0,16);
  display.print("Now:");
  display.print(NowWeight, 1);
  display.print("gr");
  display.display();
  display.clearDisplay();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }

  if(NowWeight > MaxWeight)
  {
      MaxWeight = NowWeight;
  }
  
}


Uff....


Als nächstes kommt der Taster ins Spiel. D.h. eine Abfrage im Loop ob der Taster gedrückt wurde. Falls ja soll MaxWeight wieder auf 0 gesetzt werden.
Aber das tue ich mir heute Abend nicht mehr an.
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen

md95129
InterRegioExpress (IRE)
Beiträge: 383
Registriert: So 15. Jan 2017, 18:39
Nenngröße: H0m
Stromart: digital
Steuerung: Eigenbau
Gleise: BEMO
Wohnort: Berlin
Alter: 76
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#9

Beitrag von md95129 »

Wenn Du eine Variable vor setup und loop definierst, wird sie global, d.h. sie gilt ueberall im Programm und wird auch nicht bei jedem loop Durchlauf neu angelegt. Wenn Du im Programm long xxxxx definierst, wird eine neue Variable mit diesem Namen angelegt. (long)xxxxx laesst die Variable stehen, aber das Ergebnis der Zuweisung wird in "long" gewandelt. Da Deine Variablen schon "long" sind, schmeisse all "long" im Programm aus und lasse sie nur dort stehen, wo die Variable definiert wird. Um Dich nicht zu verwirren, deklariere alle Variablen am Anfang ausserhalb setup und loop.
Henner, ex-Donkey Doktor der EDH Lumber
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#10

Beitrag von fbstr »

md95129 hat geschrieben: Sa 24. Aug 2019, 18:55 Wenn Du eine Variable vor setup und loop definierst, wird sie global, d.h. sie gilt ueberall im Programm und wird auch nicht bei jedem loop Durchlauf neu angelegt. Wenn Du im Programm long xxxxx definierst, wird eine neue Variable mit diesem Namen angelegt. (long)xxxxx laesst die Variable stehen, aber das Ergebnis der Zuweisung wird in "long" gewandelt. Da Deine Variablen schon "long" sind, schmeisse all "long" im Programm aus und lasse sie nur dort stehen, wo die Variable definiert wird. Um Dich nicht zu verwirren, deklariere alle Variablen am Anfang ausserhalb setup und loop.
Danke Henner,

das habe ich jetzt mal gemacht und siehe da, der NowWeight ist nun auch im seriellen Monitor mit seinem Wert zu sehen:

Code: Alles auswählen

Reading: 113.5 gr calibration_factor: 2110.00 NowWeight: 113 MaxWeight: 225
Reading: 113.5 gr calibration_factor: 2110.00 NowWeight: 113 MaxWeight: 225
Reading: 113.5 gr calibration_factor: 2110.00 NowWeight: 113 MaxWeight: 225
Aktueller Sketch:

Code: Alles auswählen

/*
 Version 05
 03: HX711, OLED, NowWeight-Anzeige
 04: Anzeige MaxWeight 
 05: MaxWeight wird angezeigt
 06: Taster
*/

#include "HX711.h"
#include <SPI.h>
#include <Wire.h>
//Bibliotheken für den betrieb des Displays
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define DOUT  7
#define CLK  8
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


HX711 scale;

float calibration_factor = 2110; //2110 worked for me (1kg) max scale setup
const byte buttonResetMax = 12; //Reset button an D12
long NowWeight = 0;       //NowWeight auf 0 setzen (aktuelles Gewicht)
long MaxWeight = 0;       //MaxWeight auf 0 setzen (Maximales Gewicht)


void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(3000);
  display.clearDisplay();
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press + or a to increase calibration factor");
  Serial.println("Press - or z to decrease calibration factor");
  
  scale.begin(DOUT, CLK);
  scale.set_scale();
  scale.tare(); //Reset the scale to 0
  
  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); //Adjust to this calibration factor
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.print(" NowWeight: ");
  Serial.print(NowWeight);
  Serial.print(" MaxWeight: ");
  Serial.print(MaxWeight);
  Serial.println();
//  long NowWeight = scale.get_units();
  NowWeight = scale.get_units();
  
  display.setTextSize(2); // OLED 1-4
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("Max:");
  display.print(MaxWeight, 1);
  display.print("gr");
  display.setCursor(0,16);
  display.print("Now:");
  display.print(NowWeight, 1);
  display.print("gr");
  display.display();
  display.clearDisplay();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }

  if(NowWeight > MaxWeight)
  {
      MaxWeight = NowWeight;
  }
  
}
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen

md95129
InterRegioExpress (IRE)
Beiträge: 383
Registriert: So 15. Jan 2017, 18:39
Nenngröße: H0m
Stromart: digital
Steuerung: Eigenbau
Gleise: BEMO
Wohnort: Berlin
Alter: 76
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#11

Beitrag von md95129 »

Nochwas: Deine Variable "zero_factor" ist in setup definiert und nur dort gueltig. Wenn Du sie spaeter in der Schleife (loop) verwenden willst, ist sie dort unbekannt. Mache sie auch "global", auch wenn das bei C-Programmierern verpoent ist.
Henner, ex-Donkey Doktor der EDH Lumber
Benutzeravatar

Anton_Zett
InterRegioExpress (IRE)
Beiträge: 340
Registriert: Sa 27. Mai 2017, 19:02
Nenngröße: Z
Stromart: digital
Steuerung: FCC (SX)
Gleise: Märklin

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#12

Beitrag von Anton_Zett »

Ein Vorschlag für den Taster:

In setup folgende Zeile einfügen:
pinMode(buttonResetMax,INPUT);

Am Ende von loop folgende Zeile einfügen:
if(digitalRead(buttonResetMax)){MaxWeight=0;}
Grüße
Anton

Meine Homepage
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#13

Beitrag von fbstr »

md95129 hat geschrieben: So 25. Aug 2019, 04:40 Nochwas: Deine Variable "zero_factor" ist in setup definiert und nur dort gueltig. Wenn Du sie spaeter in der Schleife (loop) verwenden willst, ist sie dort unbekannt. Mache sie auch "global", auch wenn das bei C-Programmierern verpoent ist.
Danke Henner,
werde ich mir vormerken. Den Teil habe ich vom Internet kopiert und nach dem Motto "Never touch a running System" lasse ich die Finger erstmal davon, solange alles funktioniert.

Anton_Zett hat geschrieben: So 25. Aug 2019, 07:40 Ein Vorschlag für den Taster:

In setup folgende Zeile einfügen:
pinMode(buttonResetMax,INPUT);

Am Ende von loop folgende Zeile einfügen:
if(digitalRead(buttonResetMax)){MaxWeight=0;}
Danke Anton,
ich habe jetzt erst Deine Antwort gesehen, allerdings kurz zuvor den Taster selber zum laufen gebracht.

Vermutlich habe ich es ziemlich umständlich gemacht. Zusammengefasst ist mein Weg:

Code: Alles auswählen

int buttonResetMaxState = 0;       // Variable for Tasterstatus

void setup()
 pinMode(buttonResetMaxPin, INPUT); //initialize Resettaster as input
 
void loop()
  buttonResetMaxState = digitalRead(buttonResetMaxPin); //Status vom Resettaster lesen
  // wenn Resettaster gedrueckt, dann MaxWeight=0 setzen
  if (buttonResetMaxState == HIGH)
  {
    MaxWeight = 0;
  } 

Da sieht das bei Dir wesentlich einfacher aus.


Eigentlich habe ich nun alles was ich brauche. Für die Waegezelle sind eigentlich 2 Sketche vorgegeben:
1. zum Kalibrieren über den seriellen Monitor um eben den Kalibrierungsfaktor zu bestimmen. Hier kann man über den seriellen Monitor bequem den Kalender.-Faktor einstellen. Z.B. bei meiner Testwaage 2110 und beim Messwagen 1720.
2. einer wo dann fest der Kalibrierungsfaktor eingetragen wird und damit dann im täglichen Leben das Gewicht bestimmt wird.

Ich sehe eigentlich keinen Grund nun zum 2ten Sketch zu wechseln und würde einfach mit dem bisherigen arbeiten. Oder gibt es da Nachteile wenn da z.B. die Ausgaben an den seriellen Monitor aktiv sind?


Aktueller Stand mit Reset-Taster:

Code: Alles auswählen

/*
 Version 09
 03: HX711, OLED, NowWeight-Anzeige
 04: Anzeige MaxWeight 
 05: MaxWeight wird angezeigt
 06: calibration Messwagen
 08: Negativwerte abfangen
 09: Resettaster
*/

#include "HX711.h"
#include <SPI.h>
#include <Wire.h>
//Bibliotheken für den betrieb des Displays
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define DOUT  7
#define CLK  8
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


HX711 scale;

float calibration_factor = 2110;   //1720 Messwagen + 2110 Waage
const byte buttonResetMaxPin = 12; //Reset button an D12
int buttonResetMaxState = 0;       // Variable for Tasterstatus
long NowWeight = 0;                //NowWeight auf 0 setzen (aktuelles Gewicht)
long MaxWeight = 0;                //MaxWeight auf 0 setzen (Maximales Gewicht)


void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(3000);
  display.clearDisplay();

  pinMode(buttonResetMaxPin, INPUT); //initialize Resettaster as input
  
  Serial.println("HX711 calibration sketch");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press + or a to increase calibration factor");
  Serial.println("Press - or z to decrease calibration factor");
  
  scale.begin(DOUT, CLK);
  scale.set_scale();
  scale.tare(); //Reset the scale to 0
  
  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}

void loop() {

  scale.set_scale(calibration_factor); //Adjust to this calibration factor
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.print(" NowWeight: ");
  Serial.print(NowWeight);
  Serial.print(" MaxWeight: ");
  Serial.print(MaxWeight);
  Serial.print(" Reset-Taster: ");
  Serial.print(buttonResetMaxState);
  Serial.println();
//  long NowWeight = scale.get_units();
  NowWeight = scale.get_units();
  
  display.setTextSize(2); // OLED 1-4
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("Max:");
  display.print(MaxWeight, 1);
  display.print("gr");
  display.setCursor(0,16);

  buttonResetMaxState = digitalRead(buttonResetMaxPin); //Status vom Resettaster lesen
  // wenn Resettaster gedrueckt, dann MaxWeight=0 setzen
  if (buttonResetMaxState == HIGH)
  {
    MaxWeight = 0;
  }


  if(NowWeight < 0)
  {
  display.print("Now:>-X-<"); //Anzeige falls Waegezelle in die falsche Richtung gezogen wird
  }
  else
  {
  display.print("Now:");
  display.print(NowWeight, 1);
  display.print("gr");
  }
  
  display.display();
  display.clearDisplay();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }

  if(NowWeight > MaxWeight)
  {
      MaxWeight = NowWeight;
  }
  
}
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Benutzeravatar

Anton_Zett
InterRegioExpress (IRE)
Beiträge: 340
Registriert: Sa 27. Mai 2017, 19:02
Nenngröße: Z
Stromart: digital
Steuerung: FCC (SX)
Gleise: Märklin

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#14

Beitrag von Anton_Zett »

fbstr hat geschrieben: So 25. Aug 2019, 09:05 ....
Oder gibt es da Nachteile wenn da z.B. die Ausgaben an den seriellen Monitor aktiv sind?
....
Praktisch: Nein.
Theoretisch: Der Programmablauf geht geringfügig langsamer.

Was du aber überlegen könntest:
Du hast die Möglichkeit vorgesehen, seriell den Kalibrierungsfaktor zu ändern. Da bietet es sich doch an, den ermittelten Wert im EEPROM zu speichern.
Grüße
Anton

Meine Homepage
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#15

Beitrag von fbstr »

Anton_Zett hat geschrieben: So 25. Aug 2019, 10:14
fbstr hat geschrieben: So 25. Aug 2019, 09:05 ....
Oder gibt es da Nachteile wenn da z.B. die Ausgaben an den seriellen Monitor aktiv sind?
....
Praktisch: Nein.
Theoretisch: Der Programmablauf geht geringfügig langsamer.
Hallo Anton,

Danke, gut zu wissen. Damit kann ich gut leben.
Anton_Zett hat geschrieben: So 25. Aug 2019, 10:14 Was du aber überlegen könntest:
Du hast die Möglichkeit vorgesehen, seriell den Kalibrierungsfaktor zu ändern. Da bietet es sich doch an, den ermittelten Wert im EEPROM zu speichern.
Bei den Weichen- und Entkuppler-Servos für meinen TimeWaster habe ich (natürlich nur mit Hilfe von Franz-Peter und anderen im Forum) die Positionen im EEPROM abgelegt.
Beim Zugkraftmesswagen sehe ich da noch keinen Sinn dies zu tun. Die Kalibrierung macht man eigenlich nur einmal und der Kal.-faktor bleibt dann gleich.


Am Sonntag war ich mal wieder bei Hardy (BigDiesel) zu Besuch. Da ist uns aufgefallen, dass die LiPo-Batterie nicht zum Arduino durchkommt. Erst dachten wir es liegt an dem Akku, aber dann haben wir festgestellt, dass die Ladeeinheit anscheinend die Spannung nicht zum Verbraucher durchschaltet
Bild
Ich verwende den unteren, der noch zusätzliche Elektronik drauf hat. Hardy hat mir dann einen seiner Ladeeinheiten zum Testen mitgegeben.

Hier etwas größer:
Bild
Vielleicht weiß ein Elektronik-Experte was da faul sein könnte.

Zum Testen des anderen Ladereglers bin ich noch nicht gekommen, ich habe aber eine interessante Entdeckung gemacht.
Offiziell möchte der Arduino Nano mit 5V Vin versorgt werden. Ich habe am Sonntagabend aber mal direkt meinen alten 208mAh LiPo angeschlossen. Und siehe da: Die Spannung von ca. 4V reicht aus um alles zu betreiben - Arduino, OLED's und die Wägezelle.
Inzwischen habe ich getestet dass der LiPo locker 5 Stunden das ganze mit Strom versorgen kann.

Ich bin echt am überlegen, ob ich auf die ganze Ladeschaltung verzichte und einfach den LiPo bei Gebrauch direkt anschließe...
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Benutzeravatar

MicroBahner
Metropolitan (MET)
Beiträge: 2656
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 71

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#16

Beitrag von MicroBahner »

fbstr hat geschrieben: Mi 28. Aug 2019, 20:24 Offiziell möchte der Arduino Nano mit 5V Vin versorgt werden.
Ich weis jetzt nicht, ob Du das nur ungenau geschrieben hast, oder wirklich so meinst. Der Nano hat einen Vin Anschluß. Da möchte er aber mindestens knapp 7V haben. Wenn Du ihn mit 5V versorgen willst, musst Du an den 5V Anschluß gehen. Wobei der 328P grundsätzlich auch mit weniger auskommt. Die maximale Betriebsfrequenz hängt allerdings von der Spannung ab. Je niedriger die Sapnnung, desto weniger schafft er. 16MHz sollte er lt Datenblatt bis ca 3,8V schaffen. Problematischer könnte der USB-Seriall Wandler sein. Aber wenn USB angeschlossen ist, hast Du ja eh eine höhere Spannung.

BigDiesel
InterRegioExpress (IRE)
Beiträge: 367
Registriert: Do 28. Apr 2005, 11:27
Nenngröße: H0
Steuerung: IB
Wohnort: Nordbaden
Alter: 61
Vereinigte Staaten von Amerika

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#17

Beitrag von BigDiesel »

Hallo Frank,

die zusätzlichen Bauteile sind ein Batterie Protection Unit, https://www.ic-fortune.com/upload/Downl ... -10_EN.pdf
und ein Doppel FET.
So wie es aussieht verhindert die Überwachung das Anlaufen der Schaltung, bzw. die Freigabe der Batterie.
Benutzeravatar

moppe
ICE-Sprinter
Beiträge: 5732
Registriert: So 7. Aug 2011, 08:16
Nenngröße: H0
Stromart: DC
Steuerung: G&R ana/digi - Z21/Lenz/ESU
Gleise: 2L
Wohnort: Norddeutsche Halbinsel.
Kontaktdaten:
Dänemark

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#18

Beitrag von moppe »

fbstr hat geschrieben: Mi 28. Aug 2019, 20:24 Ich bin echt am überlegen, ob ich auf die ganze Ladeschaltung verzichte und einfach den LiPo bei Gebrauch direkt anschließe...
Lohnt es sich überhaupt LiPo zu nutzen?
Bei meiner messwagen, nutzen ich zwei AAA batterien und en DC-DC wandler wer kann mit 5 Volt geben für Arduino nano und Display.

Klaus
"Meine" Modellbahn: http://www.modelbaneeuropa.dk
Dänisches Bahnforum: http://www.baneforum.dk
PIKO C4 "Horror Gallery": http://moppe.dk/PIKOC4.html
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#19

Beitrag von fbstr »

MicroBahner hat geschrieben: Mi 28. Aug 2019, 20:46
fbstr hat geschrieben: Mi 28. Aug 2019, 20:24 Offiziell möchte der Arduino Nano mit 5V Vin versorgt werden.
Ich weis jetzt nicht, ob Du das nur ungenau geschrieben hast, oder wirklich so meinst. Der Nano hat einen Vin Anschluß. Da möchte er aber mindestens knapp 7V haben. Wenn Du ihn mit 5V versorgen willst, musst Du an den 5V Anschluß gehen.
Oh Mann.
Franz-Peter, ich habe gerade ein déjà vu.

Also der LiPo hängt direkt am Vin und bei meiner Test-Waage und beim Messwagen funktioniert es. :shock:
Gut, im Gegensatz zum TimeWaster sind zwar keine Servo angeschlossen (damals hatte ich Phänomene), aber jetzt erstaunt es mich umso mehr dass es so funktioniert.

moppe hat geschrieben: Mi 28. Aug 2019, 21:37
fbstr hat geschrieben: Mi 28. Aug 2019, 20:24 Ich bin echt am überlegen, ob ich auf die ganze Ladeschaltung verzichte und einfach den LiPo bei Gebrauch direkt anschließe...
Bei meinen messwagen, nutze ich zwei AAA batterien und ein DC-DC wandler der kann 5 Volt geben für Arduino nano und Display.
Hallo Klaus,
an welchen Pins speist Du denn dann die 5V ein? Auf den Bildern in Deinem Thread sehe ich, dass Du nicht den USB-Anschluß zur Stromversorgung verwendest. Franz-Peter hat ja Recht dass Vin eigentlich 7 - 12 V erwartet.


Nun, erst durch dieses zwangsweise Testen habe ich gemerkt dass die Einheit so wenig Strom verbraucht. Vielleicht einfach 2 LiPo's in Serie schalten und dann mit ca. 8V in Vin rein? Es ist halt eine 10er Packung 200mAh LiPo's unterwegs zu mir. Irgendwo will ich die dann auch verwenden...
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Benutzeravatar

MicroBahner
Metropolitan (MET)
Beiträge: 2656
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 71

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#20

Beitrag von MicroBahner »

Hallo Frank,
fbstr hat geschrieben: Do 29. Aug 2019, 04:56 Also der LiPo hängt direkt am Vin und bei meiner Test-Waage und beim Messwagen funktioniert es. :shock:
Das dürfte am niedrigen Stromverbrauch liegen. Der On-Board Regler regelt dann zwar nichts mehr, lässt aber genügend Spannung durch, dass der Nano noch funktioniert. Du kannst den Nano aber auch direkt am 5V Anschluß versorgen:
Power
The Arduino Nano can be powered via the Mini-B USB connection, 6-20V unregulated external power supply (pin 30), or 5V regulated external power supply (pin 27). The power source is automatically selected to the highest voltage source.
Benutzeravatar

moppe
ICE-Sprinter
Beiträge: 5732
Registriert: So 7. Aug 2011, 08:16
Nenngröße: H0
Stromart: DC
Steuerung: G&R ana/digi - Z21/Lenz/ESU
Gleise: 2L
Wohnort: Norddeutsche Halbinsel.
Kontaktdaten:
Dänemark

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#21

Beitrag von moppe »

fbstr hat geschrieben: Do 29. Aug 2019, 04:56 an welchen Pins speist Du denn dann die 5V ein? Auf den Bildern in Deinem Thread sehe ich, dass Du nicht den USB-Anschluß zur Stromversorgung verwendest. Franz-Peter hat ja Recht dass Vin eigentlich 7 - 12 V erwartet.
Schaltplan ist hier:
http://www.moppe.dk/messwagen.html

Ich speise ein an der +5V pin


Klaus
"Meine" Modellbahn: http://www.modelbaneeuropa.dk
Dänisches Bahnforum: http://www.baneforum.dk
PIKO C4 "Horror Gallery": http://moppe.dk/PIKOC4.html
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#22

Beitrag von fbstr »

Also, ich habe heute mal den LiPo an Pin 30, an Pin 27, mit und ohne 5V Booster gehängt und extra 5 OLED's angeschlossen.
Jede Kombo funktioniert:

Bild
:?:

Nur meine Ladeschaltung zickt herum. Ich dachte erst ich hätte einen Trick gefunden (eingesetzt als normaler Lader mussten wir das USB-Netzteil kurz trennen und danach hat die Ladeeinheit wieder den Akku geladen) und zwar die Stromversorgung des Ladereglers zu unterbrechen - hat aber auch nichts gebracht. :cry:

Was ich sonst noch gemacht habe: Die Widerstände von 5 Ladeeinheiten ausgetauscht, damit statt 1A mit 250mAh geladen wird.
Bild

SMD löten ist einfach nicht mein Ding....

Nächster Schritt wird sein den Laderegler von Hardy (BigDiesel) zu testen.
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#23

Beitrag von fbstr »

fbstr hat geschrieben: Fr 30. Aug 2019, 21:16 Nächster Schritt wird sein den Laderegler von Hardy (BigDiesel) zu testen.
Gesagt getan.

Bild

Und was soll ich schreiben - es tut.

Aus-, ein-, aus-, ein-, aus-, einschalten - so oft ich will und die Schaltung, sprich der Arduino springt an.

Das heißt:
1. Hardy wird seinen Laderegler nicht mehr zurückbekommen
2. Ich habe demnächst 15-20 von meinen Ladereglern herumliegen

-------------------------

Beim Testen seit gestern mußte ich feststellen, dass ein Reset-Taster am Gehäuse unpraktisch ist, da man ja den Messwagen berührt und meistens gleich wieder die Max-Anzeige größer 0 ist.
Deshalb heute einen Reed-Kontakt im Dach eingebaut und mittels Magnet läßt sich das nun berührungslos erledigen.

Bild

Was ich auch feststellen mußte, eine Tare-Funktion wäre auch nicht schlecht. Dies wird beim Einschalten gemacht und ich dachte das reicht mir. Aber es wäre trotzdem vielleicht ganz gut dies während dem Betrieb mal schnell bequem machen zu können. Momentan muß ich den Akku abschalten (Schiebeschalter auf der Stirnseite) und den Waggon kurz vom Gleis heben, da er ja nun (weil nun Hardy's Laderegler dort drin seinen Dienst tut) auch über DCC versorgt wird.

Einen zweiten Taster oder Reed-Kontakt will ich aber nicht einbauen. Mein Gedanke ist den "Reset-Reed-Kontakt-Taster" dafür zu verwenden. Sprich:
- Magnet kurz ranhalten: Max-Wert auf 0 setzen
- Magnet länger als 3 Sekunden ranhalten: Tare ausführen

Franz-Peter hatte mir schon damals bei der Drehscheiben-Steuerung geholfen und ich denke das Prinzip kann ich hier auch anwenden.
Falls jemand schneller eine Lösung für mich hat als ich hirneln werde, wäre ich demjenigen auch nicht böse...
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Benutzeravatar

MicroBahner
Metropolitan (MET)
Beiträge: 2656
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 71

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#24

Beitrag von MicroBahner »

Hallo Frank,
der damalige Ansatz war blockierend, d.h. der Arduino tut nichts mehr, solange der Taster/Reedkokntakt geschlossen ist. Kannst Du dir das hier auch leisten? Dann geht der damalige Ansatz.
Ansonsten brauchst Du eine Flankenauswertung des Reed-Kontakts. Kontakt schließt -> nur Zeit starten. Kontakt öffnet: Zeit seit schließen < 3sec: Max rücksetzen, Zeit > 3sec: Tare ausführen.
Benutzeravatar

Threadersteller
fbstr
EuroCity (EC)
Beiträge: 1252
Registriert: So 28. Aug 2016, 21:04
Nenngröße: H0
Stromart: digital
Steuerung: DR5000, Lenz LZV100, MLL
Gleise: Peco Code 75, Trix C
Wohnort: Stuttgart
Kontaktdaten:
Deutschland

Re: Arduino-Hilfe benötigt: Zugkraftmesswagen

#25

Beitrag von fbstr »

MicroBahner hat geschrieben: So 1. Sep 2019, 14:13 ...der damalige Ansatz war blockierend, d.h. der Arduino tut nichts mehr, solange der Taster/Reedkokntakt geschlossen ist. Kannst Du dir das hier auch leisten? Dann geht der damalige Ansatz.
Seufz, das war mir nicht mehr bewußt. Du hast natürlich vollkommen Recht.
Sprich - solange ich den Taster betätige wird die Zugkraft nicht mehr gemessen. Das wäre hier unschön.
MicroBahner hat geschrieben: So 1. Sep 2019, 14:13 Ansonsten brauchst Du eine Flankenauswertung des Reed-Kontakts. Kontakt schließt -> nur Zeit starten. Kontakt öffnet: Zeit seit schließen < 3sec: Max rücksetzen, Zeit > 3sec: Tare ausführen.
[Tief durchatmen]
Also was brauchen wir? Die Moba-Tools!


Erster Entwurf (ohne Arduino IDE). Macht das Sinn?

Code: Alles auswählen

#include <MobaTools.h>
...
...
EggTimer myTimer3sec; // 3 Sekunden Timer für den ResetTaster
...
void setup()
...
...
void loop()
...
...
if (buttonResetMaxState == HIGH)		  // wenn Resettaster gedrueckt, dann...
	myTimer3sec.setTime(3000)   ;	// Timer auf 3 Sekunden setzen
	if (myTimer3sec.running()==false)        // Wenn die 3 Sekunden abgelaufen 
            {
              MaxWeight = 0;                             // MaxWeight auf Null setzen.
            }
            else
            {
            scale.tare(); 				//Reset the scale to 0
            }
...
...
Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: normalerweise jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Antworten

Zurück zu „Digital“