Hallo,
momentan bastle ich an einer Temperatur-Anzeige mit Bewegungssensor, der
auf einem LCD Display ausgeben soll, wenn eine Bewegung erkannt wird.
Mein Sketch ist so programmiert, dass ich die Temperatur-Anzeige alleine
aktivieren kann oder aber am Abend Temperatur-Anzeige plus
"Alarmfunktion".
hier der Sketch:
1 | #include <LiquidCrystal.h>
|
2 | #include <IRremote.h>
|
3 | int receiverpin = 3;
|
4 | IRrecv irrecv(receiverpin);
|
5 | decode_results results;
|
6 |
|
7 | LiquidCrystal lcd(4,5,6,7,8,9);
|
8 | float sensor = 0;
|
9 | float celsius = 0;
|
10 | float voltage = 0;
|
11 | int bewegung=13;
|
12 | int bewegungsstatus=0;
|
13 | int ledg=11;
|
14 | int ledr=12;
|
15 |
|
16 |
|
17 | void setup() {
|
18 |
|
19 | lcd.begin(16,2);
|
20 | lcd.clear();
|
21 | pinMode(bewegung, INPUT);
|
22 | pinMode(ledg, OUTPUT);
|
23 | pinMode(ledr, OUTPUT);
|
24 | irrecv.enableIRIn();
|
25 | Serial.begin(9600);
|
26 |
|
27 | }
|
28 |
|
29 | void translateIR()
|
30 | {
|
31 | switch(results.value)
|
32 |
|
33 | {
|
34 | case 16724175:
|
35 |
|
36 |
|
37 | if(bewegungsstatus==HIGH)
|
38 | {
|
39 | lcd.setCursor(0,0);
|
40 | lcd.print("Eindringling");
|
41 | lcd.setCursor(0,1);
|
42 | lcd.print("Erkannt");
|
43 | digitalWrite(ledr, HIGH);
|
44 | digitalWrite(ledg, LOW);
|
45 | delay(10000);
|
46 | lcd.clear();
|
47 | Serial.println("1");
|
48 |
|
49 |
|
50 | }
|
51 |
|
52 | else
|
53 |
|
54 | {
|
55 | lcd.setCursor(0,0);
|
56 | lcd.print("Temperatur:");
|
57 | lcd.setCursor(0,1);
|
58 | lcd.print(celsius,0);
|
59 | lcd.setCursor(3,1);
|
60 | lcd.print("Grad");
|
61 | digitalWrite(ledr, LOW);
|
62 | digitalWrite(ledg, HIGH);
|
63 | Serial.println("2");
|
64 |
|
65 | }
|
66 |
|
67 | break;
|
68 |
|
69 | case 16743045:
|
70 |
|
71 | lcd.setCursor(0,0);
|
72 | lcd.print("Temperatur:");
|
73 | lcd.setCursor(0,1);
|
74 | lcd.print(celsius,0);
|
75 | lcd.setCursor(3,1);
|
76 | lcd.print("Grad");
|
77 | digitalWrite(ledr, LOW);
|
78 | digitalWrite(ledg, HIGH);
|
79 | Serial.println("3");
|
80 | break;
|
81 | }
|
82 | }
|
83 | void loop()
|
84 | {
|
85 | bewegungsstatus=digitalRead(bewegung);
|
86 | sensor = analogRead(0);
|
87 | voltage = (sensor*5000)/1024;
|
88 | voltage = voltage - 500;
|
89 | celsius = voltage/10;
|
90 |
|
91 |
|
92 | if (irrecv.decode(&results))
|
93 | {
|
94 | translateIR();
|
95 |
|
96 | {
|
97 | irrecv.resume();
|
98 | }
|
99 | }
|
100 | }
|
Der Switch funktioniert, mit werden auf dem Monitor der Wert "2" und der
Wert "3" ausgegeben.
Aber die Bedingung hinter IF, wird nicht abgearbeitet. Ich kann mit der
Hand vor dem Sensor winken, tanzen, Kniebeugen machen. Die Bewegung wird
nicht erkannt.
Warum nicht?
Ohne Switch mit einfachen Anweisungen funktioniert alles.