Hallo,
folgenden Sketch habe ich programmiert:
#include <LiquidCrystal.h>
#include <IRremote.h>
int receiverpin = 3;
IRrecv irrecv(receiverpin);
decode_results results;
LiquidCrystal lcd(4,5,6,7,8,9);
float sensor = 0;
float celsius = 0;
float voltage = 0;
int bewegung=13;
int bewegungsstatus=0;
int ledg=11;
int ledr=12;
void setup() {
lcd.begin(16,2);
lcd.clear();
pinMode(bewegung, INPUT);
pinMode(ledg, OUTPUT);
pinMode(ledr, OUTPUT);
irrecv.enableIRIn();
Serial.begin(9600);
}
void translateIR()
{
switch(results.value)
{
case 16724175:
if(bewegungsstatus==HIGH)
{
lcd.setCursor(0,0);
lcd.print("Eindringling");
lcd.setCursor(0,1);
lcd.print("Erkannt");
digitalWrite(ledr, HIGH);
digitalWrite(ledg, LOW);
delay(10000);
lcd.clear();
Serial.println("1");
}
else
{
lcd.setCursor(0,0);
lcd.print("Temperatur:");
lcd.setCursor(0,1);
lcd.print(celsius,0);
lcd.setCursor(3,1);
lcd.print("Grad");
digitalWrite(ledr, LOW);
digitalWrite(ledg, HIGH);
Serial.println("2");
}
break;
case 16743045:
lcd.setCursor(0,0);
lcd.print("Temperatur:");
lcd.setCursor(0,1);
lcd.print(celsius,0);
lcd.setCursor(3,1);
lcd.print("Grad");
digitalWrite(ledr, LOW);
digitalWrite(ledg, HIGH);
Serial.println("3");
break;
}
}
void loop()
{
bewegungsstatus=digitalRead(bewegung);
sensor = analogRead(0);
voltage = (sensor*5000)/1024;
voltage = voltage - 500;
celsius = voltage/10;
if (irrecv.decode(&results))
{
translateIR();
{
irrecv.resume();
}
}
}
Ich habe eine Temperaturanzeige gebaut, die auf Knopfdruck meiner IR-Fernbedienung zusätzlich zur Temperaturausgabe einen Bewegungssensor aktiviert, der bei Bewegung an Pin 10 ein High ausgeben soll und eine rote LED zum leuchten bringt, zeitgleich soll auf einem Display eine Meldung ausgegeben werden.
Das Problem, die Meldung der Bewegung wird NICHT in die Bedingung in Case 1 übernommen.
Der Switch funktioniert, ich habe jeweils Case-Basierend eine 2 oder 3 ausgegeben bekommen im Monitor. Wenn ich bewegungsstatus=digitalRead(bewegung); auf =1 setze zeigt er mir die Meldung an und die LED leuchtet rot.
Nur dieser übertrag von bewegungsstatus=digitalRead(bewegung); auf die Bedingung funktioniert nicht. Laut Ausgabe im void Loop wird aber die Bewegung erkannt, mir wird eine 1 ausgegeben, wenn ich die Hand vorhalte.
Kann mit jemand erklären, warum der bewegungsstatus nicht in die IF-Bedingung übernommen wird?