Forum: Mikrocontroller und Digitale Elektronik Arduino-Sketch, If bedingung nicht erkannt.


von Dirk W. (Gast)


Lesenswert?

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.

: Verschoben durch Admin
von Daniel A. (daniel-a)


Lesenswert?

Dirk W. schrieb:
> if(bewegungsstatus==HIGH)
Der vergleich mit HIGH ist eigentlich überflüssig.

> Aber die Bedingung hinter IF, wird nicht abgearbeitet.
> Monitor der Wert "2" und der Wert "3" ausgegeben.
Wenn es immer in den else zweig kommt, ist bewegungsstatus immer 
ungleich 1 zu diesem Zeitpunkt.

von Planlos (Gast)


Lesenswert?

Dirk W. schrieb im Beitrag #4221624:
> Der Switch funktioniert, mit werden auf dem Monitor der Wert "2" und der
> Wert "3" ausgegeben.

Dann gib doch einfach "bewegungsstatus" auch noch auf dem Display aus.
Wenn das immer "0" oder "LOW" ist, dann funktioniert das "if", aber dein 
Sensor nicht.

von Bastler (Gast)


Lesenswert?

Was machen die Magic Numbers im case?
Wird da eventuell jeweils genau 1 Bit im "unsigned long" ausgewertet?

von Bastler (Gast)


Lesenswert?

Noch ein Dirk! Selbes Problem?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dirk W. schrieb im Beitrag #4221624:
> switch(results.value)
>
> {
>   case 16724175:

Ist das wirklich ernstgemeint?

Ansonsten:

Keine Crosspostings und bitte einen Moment darüber nachdenken, wo 
ein Beitrag veröffentlicht wird. Arduino-Sketches haben mit 
"PC-Programmierung" nichts zu tun, das solltest Du auch von selbst 
herausfinden können.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.