Hallo Liebes Forum, mein Name ist Rolf und ich bin 33 Jahre alt und habe 3 und nächstes Jahr im April 4 Kinder. Ich arbeite bei einem Wasserversorger auf kommunaler Ebene als Monteur. Meine Ausbildung zum Installateur ist dabei sehr hilfreich, doch hat mich die Welt der Elektronik schon immer begeistert. Bei einigen Fragen konnten mir Anregungen aus diesem Forum weiterhelfen auch wenn ich nur an der Oberfläche kratze. Dafür ein Dankeschön an dieser Stelle. Vor etwa einem Jahr kam ich zufällig auf die Arduino Platform. Ich finde sie gerade zum begreifen der Zusammenhänge sehr hilfreich. Nun habe ich eine Elektronik zusammengestellt um einen Sensus Wasserzähler digital auslesen zu können, diese Teile gibt es zwar auch zu kaufen aber wo bleibt da die Herausforderung. Ich möchte die Vorstellung meines Projekts hier dafür nutzen Kritik als Denkanstoß zu bekommen. Auf dem Zähler befindet sich ein Halbmond aus Metall dieser kann mit einem Induktivem Sensor erfasst werden. Dazu habe ich auch folgenden Code: Für die (while) Schleifen habe ich mich entschieden weil ich mit dem Interrupt leider weniger Erfolg hatte. Dieser hat zwar reagiert aber es kam zu Fehlmessungen. Ich denke ich habe ihn falsch entprellt. Generell steht die Erfassung immer im Vordergrund. Das Display lasse ich abschalten um Energie zu sparen. Durch einen Knopfdruck zeigt das Display den Aktuellen Stand an. Dies tut es für einen Moment oder bis ein neuer Impuls kommt. Alternativ kann man den Taster gedrückt halten dann bleibt das Display an flackert aber kurz. Um einen stand zu notieren wäre das vertretbar.
1 | #include <Adafruit_SleepyDog.h> |
2 | #include <LiquidCrystal_I2C.h> |
3 | |
4 | LiquidCrystal_I2C lcd(0x27,16,2); |
5 | |
6 | byte drei[] = {B11100,B00100,B01100,B00100,B11100,B00000,B00000,B00000}; |
7 | |
8 | float Count=0; |
9 | |
10 | int Counter = 2; |
11 | int Button = 3; |
12 | |
13 | void setup() { |
14 | lcd.init(); |
15 | lcd.createChar (1, drei); |
16 | lcd.backlight(); |
17 | lcd.setCursor(0,0); |
18 | lcd.print("Display -- OK"); |
19 | delay(2000); |
20 | lcd.clear(); |
21 | lcd.noBacklight(); |
22 | pinMode(Counter, INPUT); |
23 | pinMode(Button, INPUT); |
24 | Serial.begin(9600); |
25 | }
|
26 | |
27 | void loop() { |
28 | while(digitalRead(Counter)==LOW) { |
29 | if(digitalRead(Button)==HIGH) { |
30 | for(int i=0;i<150;i++){ |
31 | if(digitalRead(Counter)==HIGH) { |
32 | break; |
33 | }
|
34 | setDisplay(); |
35 | lcd.print(i); |
36 | Watchdog.sleep(10); |
37 | }
|
38 | lcd.clear(); |
39 | lcd.noBacklight(); |
40 | }else{ |
41 | Watchdog.sleep(10); |
42 | }
|
43 | }
|
44 | while(digitalRead(Counter)==HIGH ){ |
45 | if(digitalRead(Button)==HIGH) { |
46 | for(int i=0;i<150;i++) { |
47 | if(digitalRead(Counter)==LOW) { |
48 | break; |
49 | }
|
50 | setDisplay(); |
51 | lcd.print(i); |
52 | Watchdog.sleep(10); |
53 | }
|
54 | lcd.clear(); |
55 | lcd.noBacklight(); |
56 | }else{ |
57 | Watchdog.sleep(10); |
58 | }
|
59 | }
|
60 | Count++; |
61 | lcd.clear(); |
62 | lcd.noBacklight(); |
63 | }
|
64 | |
65 | void setDisplay() { |
66 | lcd.setCursor(0,1); |
67 | lcd.print ("Stand: "); |
68 | lcd.print((Count/1000),3); |
69 | lcd.print("m"); |
70 | lcd.write(1); |
71 | lcd.setCursor(9,0); |
72 | lcd.print("150/"); |
73 | lcd.setCursor(13,0); |
74 | lcd.backlight(); |
75 | }
|
Wie gesagt es ist nichts großes aber ich würde mich über Denkanstöße freuen. Mit freundlichen Grüßen Rolf