Neuling - Problem mit Rückfallverzögerung(TIMER) im Sketch

Hallo

Ich bin hier ganz neu und hab auch noch nicht lange mit dem arduino zu tun .

hab hier ein projekt mit servo und lampe → grundlegend soll der servo über ein tastbefehl in eine richtung drehen , dabei die lampe (LED) anschalten und nach 3 sec soll die lampe wieder aus gehen .

das programm für die servosteuerung steht → funktioniert alles wie es soll
das einzelne programm für led an und nach 3 sec aus funktioniert auch .
aber zusammen will es halt nicht … wär gut wenn mir jemand helfen kann

der servo sketch :

#include <Servo.h>

int LampeVor = 13; // LampeVor an Pin 13 angeschlossen
int tasterRechts = 4; //TasterRechts an Pin 4 angeschlossen
int tasterLinks = 5; //TasterLinks an Pin 5 angeschlossen
int tasterVor = 6; //TasterVor an Pin 6 angeschlossen
int tasterZurueck = 7; //TasterZurück an Pin 7 angeschlossen
int tasterStatusR, tasterStatusL, tasterStatusV, tasterStatusZ;
Servo meinServoVor;
Servo meinServoZurueck;

void setup()
{
pinMode(LampeVor, OUTPUT);
pinMode(tasterRechts, INPUT); //tasterRechts (Pin 4) wird als INPUT definiert
pinMode(tasterLinks, INPUT); //tasterLinks (Pin 5) wird als INPUT definiert
pinMode(tasterVor, INPUT); //tasterVor (Pin 6) wird als INPUT definiert
pinMode(tasterZurueck, INPUT); //tasterZurück (Pin 7) wird als INPUT definiert
meinServoVor.attach(11); //Servomotor(Vor) wurde an Pin 11 angeschlossen
meinServoZurueck.attach(12); //Servomotor(Zurück) worde an Pin 12 angeschlossen
}

void loop()
{
tasterStatusR = digitalRead(tasterRechts);
tasterStatusL = digitalRead(tasterLinks);
tasterStatusV = digitalRead(tasterVor);
tasterStatusZ = digitalRead(tasterZurueck);

if ((tasterStatusR == 1) && (tasterStatusL == 0) && (tasterStatusV == 0) && (tasterStatusZ == 0))
{
meinServoVor.write(20); //Dreht nach Rechts
delay(50);
}

if ((tasterStatusV == 1) && (tasterStatusZ == 0) && (tasterStatusR == 0) && (tasterStatusL == 0))
{
meinServoVor.write(90); //Dreht nach Vorne
delay(50);
}

if ((tasterStatusL == 1) && (tasterStatusR == 0) && (tasterStatusV == 0) && (tasterStatusZ == 0))
{
meinServoVor.write(160); //Dreht nach Links
delay(50);
}

if ((tasterStatusL == 1) && (tasterStatusR == 0) && (tasterStatusV == 1) && (tasterStatusZ == 0))
{
meinServoVor.write(125); //Dreht nach Vorne/Links
delay(50);
}

if ((tasterStatusL == 0) && (tasterStatusR == 1) && (tasterStatusV == 1) && (tasterStatusZ == 0))
{
meinServoVor.write(55); //Dreht nach Vorne/Rechts
delay(50);
}

delay(200);

}

der sketch mit der rückfallverzögerung der led :

#include "TimerOne.h"  
int led_pin=13;
int button_pin=6;
int button_pressed = 0;

void setup()
{
pinMode(led_pin, OUTPUT);
pinMode(button_pin, INPUT);
Timer1.initialize(1000000);           
digitalWrite(led_pin, LOW);
}
 
void turnoff() 
{
if (button_pressed != 1)
{
digitalWrite(led_pin, LOW);
}
}
 
void loop()    
{
if (digitalRead(button_pin)==HIGH)
{
button_pressed = 1;
digitalWrite(led_pin, HIGH);
}
if (button_pressed == 1 && digitalRead(button_pin)==LOW)
{
Timer1.start();
Timer1.attachInterrupt(turnoff);
button_pressed = 0;
}
}

zusammen geschrieben funktioniert es dann nicht mehr -->also der servo mach nichts . das mit der lampe funktioniert dann aber noch … kann es sein das das programm in dem “void turnoff” hängen bleibt ?

ich hoffe das jemand weiter helfen kann . dake schonmal .

kurzes update … ich hab es eben nochmal probiert .

so sieht dann der zusammen geschriebene sketch aus :

#include <Servo.h>
#include "TimerOne.h"  

int button_pressed = 0;
int LampeVor = 13; // LampeVor an Pin 13 angeschlossen
int tasterRechts = 4; //TasterRechts an Pin 4 angeschlossen
int tasterLinks = 5; //TasterLinks an Pin 5 angeschlossen
int tasterVor = 6; //TasterVor an Pin 6 angeschlossen
int tasterZurueck = 7; //TasterZurück an Pin 7 angeschlossen
int tasterStatusR, tasterStatusL, tasterStatusV, tasterStatusZ;
Servo meinServoVor;
Servo meinServoZurueck;

void setup()
{

Timer1.initialize(1000000);           
digitalWrite(LampeVor, LOW);  
 
 pinMode(LampeVor, OUTPUT);
pinMode(tasterRechts, INPUT); //tasterRechts (Pin 4) wird als INPUT definiert
pinMode(tasterLinks, INPUT); //tasterLinks (Pin 5) wird als INPUT definiert
pinMode(tasterVor, INPUT); //tasterVor (Pin 6) wird als INPUT definiert
pinMode(tasterZurueck, INPUT); //tasterZurück (Pin 7) wird als INPUT definiert
meinServoVor.attach(11); //Servomotor(Vor) wurde an Pin 11 angeschlossen
meinServoZurueck.attach(12); //Servomotor(Zurück) worde an Pin 12 angeschlossen
}

void turnoff() 
{
if (button_pressed != 1)
{
digitalWrite(LampeVor, LOW);
}
}


void loop()
{
tasterStatusR = digitalRead(tasterRechts);
tasterStatusL = digitalRead(tasterLinks);
tasterStatusV = digitalRead(tasterVor);
tasterStatusZ = digitalRead(tasterZurueck);

if (digitalRead(tasterVor)==HIGH)
{
button_pressed = 1;
digitalWrite(LampeVor, HIGH);
}
if (button_pressed == 1 && digitalRead(tasterVor)==LOW)
{
Timer1.start();
Timer1.attachInterrupt(turnoff);
button_pressed = 0;

}



if ((tasterStatusR == 1) && (tasterStatusL == 0) && (tasterStatusV == 0) && (tasterStatusZ == 0))
{
meinServoVor.write(20); //Dreht nach Rechts
delay(50);
}

if ((tasterStatusV == 1) && (tasterStatusZ == 0) && (tasterStatusR == 0) && (tasterStatusL == 0))
{
meinServoVor.write(90); //Dreht nach Vorne
delay(50);
}

if ((tasterStatusL == 1) && (tasterStatusR == 0) && (tasterStatusV == 0) && (tasterStatusZ == 0))
{
meinServoVor.write(160); //Dreht nach Links
delay(50);
}

if ((tasterStatusL == 1) && (tasterStatusR == 0) && (tasterStatusV == 1) && (tasterStatusZ == 0))
{
meinServoVor.write(125); //Dreht nach Vorne/Links
delay(50);
}

if ((tasterStatusL == 0) && (tasterStatusR == 1) && (tasterStatusV == 1) && (tasterStatusZ == 0))
{
meinServoVor.write(55); //Dreht nach Vorne/Rechts
delay(50);
}
delay(200);
}

servo funktioniert dann auch bis ich tasterVor drücke und dann hängt das programm … nimmt keine befehle mehr an , servo bleibt wo er ist und lampe bleibt auch dauerhaft an

Timer1 beißt sich mit der Servo Library. Die läuft ebenfalls auf Timer1!

Ein Timer ist auch überflüssig. Zeiten kann man mit millis() zählen. Wenn es unbedingt ein Timer sein muss gibt es noch Timer2

Danke ! Hat funktioniert ... Wusste nicht das servo auf timer1 läuft .