RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#1 von fbstr , 24.08.2019 15:23

Hallo,

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

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


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.


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.


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



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:


Hier ist der Sketch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
 

/*

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:

1
2
3
4
 
if(NowWeight > MaxWeight)
{
long MaxWeight = NowWeight;
}
 



Irgendwas mache ich da falsch.


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#2 von fbstr , 24.08.2019 15:57

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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#3 von schmiedi , 24.08.2019 16:34

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":


 
schmiedi
InterRegioExpress (IRE)
Beiträge: 446
Registriert am: 07.07.2015
Homepage: Link
Spurweite H0
Steuerung Arduino, Eigenbau
Stromart DC, Analog


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#4 von md95129 , 24.08.2019 16:34

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
Schamlose Selbstbeweihräucherung: Eigenbauten eines alten Neulings.
US Waldbahnen/Echtdampf-Eigenbau


 
md95129
EuroCity (EC)
Beiträge: 1.078
Registriert am: 15.01.2017
Ort: Berlin
Gleise IIm Echtdampf,H0m
Steuerung DCC Eigenbau
Stromart Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#5 von Railcar ( gelöscht ) , 24.08.2019 16:36

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

1
2
 
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/lang...alifiers/const/

Ulrich

Edit: Compiliert auch ohne const


Railcar

RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#6 von fbstr , 24.08.2019 17:08

Hallo Dieter, Henner und Ulrich,

vielen Dank für Eure Antworten.

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 

/*
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:

1
2
3
 
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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#7 von schmiedi , 24.08.2019 17:16

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":


 
schmiedi
InterRegioExpress (IRE)
Beiträge: 446
Registriert am: 07.07.2015
Homepage: Link
Spurweite H0
Steuerung Arduino, Eigenbau
Stromart DC, Analog


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#8 von fbstr , 24.08.2019 19:22

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

Zitat

... "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:

1
2
3
4
 
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
 

/*
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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#9 von md95129 , 24.08.2019 19: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.


Henner,
ex-Donkey Doktor der EDH Lumber
Schamlose Selbstbeweihräucherung: Eigenbauten eines alten Neulings.
US Waldbahnen/Echtdampf-Eigenbau


 
md95129
EuroCity (EC)
Beiträge: 1.078
Registriert am: 15.01.2017
Ort: Berlin
Gleise IIm Echtdampf,H0m
Steuerung DCC Eigenbau
Stromart Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#10 von fbstr , 24.08.2019 20:49

Zitat

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:

1
2
3
4
5
 

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 

/*
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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#11 von md95129 , 25.08.2019 05: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.


Henner,
ex-Donkey Doktor der EDH Lumber
Schamlose Selbstbeweihräucherung: Eigenbauten eines alten Neulings.
US Waldbahnen/Echtdampf-Eigenbau


 
md95129
EuroCity (EC)
Beiträge: 1.078
Registriert am: 15.01.2017
Ort: Berlin
Gleise IIm Echtdampf,H0m
Steuerung DCC Eigenbau
Stromart Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#12 von Anton_Zett , 25.08.2019 08: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;}


Grüße
Anton

Meine Homepage


 
Anton_Zett
InterCity (IC)
Beiträge: 502
Registriert am: 27.05.2017
Homepage: Link
Spurweite N, Z
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#13 von fbstr , 25.08.2019 10:05

Zitat

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.


Zitat

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
 

/*
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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#14 von Anton_Zett , 25.08.2019 11:14

Zitat

....
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


 
Anton_Zett
InterCity (IC)
Beiträge: 502
Registriert am: 27.05.2017
Homepage: Link
Spurweite N, Z
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#15 von fbstr , 28.08.2019 21:24

Zitat

Zitat

....
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.

Zitat

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

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:

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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#16 von MicroBahner , 28.08.2019 21:46

Zitat

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.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#17 von BigDiesel , 28.08.2019 21:49

Hallo Frank,

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


Gruß
Hardy

Mein Baubericht Marengo Swamp
Baubericht WiFi-Messwagen


 
BigDiesel
InterRegioExpress (IRE)
Beiträge: 384
Registriert am: 28.04.2005
Ort: Nordbaden
Gleise Peco Code83, Eigenbau
Spurweite H0
Steuerung IB
Stromart Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#18 von moppe , 28.08.2019 22:37

Zitat

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


 
moppe
Trans Europ Express (TEE)
Beiträge: 8.729
Registriert am: 07.08.2011
Homepage: Link
Ort: Norddeusche halbinsel
Gleise Roco, PECO, Märklin/Trix, PIKO,
Spurweite H0, H0e, N, Z
Steuerung Z21, Lenz, MpC Gahler+Ringsmeier, Games on Track/Faller
Stromart AC, DC, Digital, Analog


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#19 von fbstr , 29.08.2019 05:56

Zitat von MicroBahner im Beitrag #16

Zitat von fbstr im Beitrag #15

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.
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.


Zitat von moppe im Beitrag #18

Zitat von fbstr im Beitrag #15

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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital

zuletzt bearbeitet 12.08.2021 | Top

RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#20 von MicroBahner , 29.08.2019 09:42

Hallo Frank,

Zitat

Also der LiPo hängt direkt am Vin und bei meiner Test-Waage und beim Messwagen funktioniert es.

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:

Zitat
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.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#21 von moppe , 29.08.2019 13:38

Zitat

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


 
moppe
Trans Europ Express (TEE)
Beiträge: 8.729
Registriert am: 07.08.2011
Homepage: Link
Ort: Norddeusche halbinsel
Gleise Roco, PECO, Märklin/Trix, PIKO,
Spurweite H0, H0e, N, Z
Steuerung Z21, Lenz, MpC Gahler+Ringsmeier, Games on Track/Faller
Stromart AC, DC, Digital, Analog


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#22 von fbstr , 30.08.2019 22:16

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:


:

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.

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


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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#23 von fbstr , 01.09.2019 12:14

Zitat

Nächster Schritt wird sein den Laderegler von Hardy (BigDiesel) zu testen.



Gesagt getan.



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.



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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#24 von MicroBahner , 01.09.2019 15:13

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.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduino-Hilfe benötigt: Zugkraftmesswagen

#25 von fbstr , 01.09.2019 17:10

Zitat

...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.

Zitat

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?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 

#include &lt;MobaTools.h&gt;
...
...
EggTimer myTimer3sec; // 3 Sekunden Timer f&#252;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: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.518
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz