Hätte ich jetzt auch geraten.
Wollte aber eine genaue Angabe vom TO haben.
Daher mein Tipp an den TO. @exitus27
Wenn du dich weiterhin mit der Elektronik befassen möchtest, solltest du besser auf genaue und richtige Angaben achten. Anders gehts schief. Dann hat dein Name System.
Dankeschön genau so klappt es habe es etwas verändert jetzt sieht es gut aus für das was ich es brauche. Wenn ich alles zusammen gebaut habe und teste weiß ich mehr.
Danke nochmals
@exitus27
Schön, dass du meine Anmerkung ignorierst.
Sorry es ist so eins. Nächste mal gebe ich mir Mühe
Dazu muss Dein Sketch komplett überarbeitet werden.
Die mit delay() gebauten Pausen machen das KOnzept kaputt.
Aber um mal zu zeigen, wie ich das lösen würde:
#include <Servo.h>
Servo myServo;
int servoPin = 10;
int ir = 4;
int led = 11;
constexpr uint32_t delayedTimeForLEDPin {3000}; // Wartezeit bis der IR-Sensor als aktiviert gilt
void setup()
{
myServo.attach(servoPin);
pinMode(ir, INPUT);
pinMode(led, OUTPUT);
}
void loop()
{
digitalWrite(led, irInputCheck(delayedTimeForLEDPin));
for (int i = 20; i <= 160; i = i + 1)
{
myServo.write(i);
delay(20);
}
for (int i = 160; i >= 20; i = i - 1)
{
myServo.write(i);
delay(20);
}
if (digitalRead(ir) == 0)
{
digitalWrite(led, LOW);
}
else
{
digitalWrite(led, HIGH);
}
}
bool irInputCheck(const uint32_t delayTime)
{
static bool isOn = false; // Merker für Einschaltmoment
static uint32_t startTime = 0; // Merker für Einschaltzeit
if (!isOn) // war bisher aus
{
if (!digitalRead(ir)) // ist jetzt an
{
startTime = millis(); // aktuelle Zeit merken
isOn = true; // merken, das an ist
}
}
else // war vorher an
{
if (!digitalRead(ir)) // ist noch immer an
{
if (millis() - startTime >= delayTime) // Zeit abgelaufen?
{
return true; // dann Aktion
}
}
else // ist nicht mehr an
{
isOn = false; // reset des Merker
}
}
return false;
}
//EDIT: In Deinem Codeteil muss natürlich der IR-Teil raus. Und wenn Du willst, dass die LED nach einer bestimmten Zeit zwingend wieder ausgeht und der Zyklus von vorn beginnt, lässt sich das ebenso lösen.