Guten morgen
Ich habe euch letze Woche ja gefragt wegen den mehrern Sachen gleichzeitig ausführen meiner Geocaching-Schaltung. Ihr (vorallem combie) habt mir die TaskMacro Lirary empfohlen und combie ht mir meine Schaltung geschickt.
Ich habe es aber zu kompliziert gefunden und bin bei if und while geblieben. Es hat so auch funktioniert mit zwei Aufagben. Jetzt habe ich aber eine 3. Aufgabe hinten dran gehängt und es hat nicht mehr geklappt und es war sowieso zu kompliziert das ganze Sketch. Also habe ich mich dran gemacht meine Schaltung mit der TaskMacro Library zu schreiben (mit 3. Aufagbe) aber die Schaltung funktioniert nicht. Hier bitte ich Sie zur Hilfe.
Das Problem ist das der SR04 nur ein mal die Distanz misst.
Code: [Select]
#include <SR04.h>
#include <TaskMacro.h>
const byte TRIG_PIN = 3;
const byte ECHO_PIN = 2;
const byte LED1 = 4;
const byte LED2 = 5;
const byte LICHTSENSOR = A0;
int buttonpin = 6;
int LED3 = 13;
int clap = 0;
long detection_range_start = 0;
long detection_range = 0;
boolean status_lights = false;
SR04 sr04 = SR04(ECHO_PIN, TRIG_PIN);
void setup()
{
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void SR04Task()
{
static long distance;
taskBegin();
while (1)
{
distance = sr04.Distance();
Serial.print(distance);
Serial.println("cm");
digitalWrite(LED1, distance >= 10 && distance <= 12);
taskPause(3000);
}
taskEnd();
}
void LichtTask()
{
static int Wert;
taskBegin();
while (1)
{
if (digitalRead(LED1))
{
Wert = analogRead(LICHTSENSOR);
Serial.println(Wert);
digitalWrite(LED2, Wert > 300);
} else digitalWrite(LED2, LOW);
taskPause(100);
}
taskEnd();
}
void KlatschTask()
{
int status_sensor = digitalRead(buttonpin);
taskBegin();
while (1) {
if (digitalRead(LED2))
{
if (status_sensor == 0)
{
if (clap == 0)
{
detection_range_start = detection_range = millis();
clap++;
}
else if (clap > 0 && millis() - detection_range >= 50)
{
detection_range = millis();
clap++;
}
}
if (millis() - detection_range_start >= 400)
{
if (clap == 2)
{
if (!status_lights)
{
status_lights = true;
digitalWrite(LED3, HIGH);
}
else if (status_lights)
{
status_lights = false;
digitalWrite(LED3, LOW);
}
}
clap = 0;
}
}
}
taskEnd();
}
void loop()
{
SR04Task();
LichtTask();
KlatschTask();
}
Vielen Dank
Challenger