mein Projekt soll das Relais bei Tasterdruck schalten, für 5 sekunden laufen und dann für 3 sekunden gesperrt sein. der 2. Taster soll via interrupt das programm beeenden.
geht auch solange, bis ich am Relais die Spannungsquelle von 12V und den Verbraucher anschließe.
Nehm ich den Interrupt raus, funktioniert es, allerdings ist dann keine Stop funktion mehr gegeben und läuft so lange, wie der Delay läuft.
``// Relais an Pin 7, Taster an Pin 6
int Relais = 7;
int Taster = 6;
const int Interruptpin = 2;
// speichert den Status des Relais: 0 = aus, 1 = ein
int StatusRelais = 1;
void setup()
{
// Relais wird als OUTPUT (Ausgang) definiert
pinMode(Relais, OUTPUT);
// der Taster wird als INPUT (Eingang) deklariert
pinMode(Taster, INPUT);
attachInterrupt(digitalPinToInterrupt(Interruptpin), stop, CHANGE);
}
void loop()
{
// Taster abfragen
StatusRelais = digitalRead(Taster);
// wenn der Taster gedrückt wurde
if (StatusRelais == HIGH)
{
// Relais für 5 Sekunden (5000 ms) einschalten
digitalWrite(Relais, HIGH);
delay(5000);
// Relais ausschalten
digitalWrite(Relais, LOW);
delay(3000);
}
}
void stop ()
{
digitalWrite(7, LOW);
}
Ich bin absolut kein Profi, aber kann mir jemad hefen, wo der fehler ist?
Vergiss Interrupts und Delays, beide sind in der Anwendung eine Sackgasse.
BlinkWithoutDelay in den Beispielen der IDE anschauen und verstehen, Dein Programm entsprechend ändern und dann sehen wir weiter.
wenn du deinen Sketch nicht mit delays blockierst, brauchst du auch keine Buttons mit Interrupt auslesen.
Ich sehe bei dir da eine typische Finite State Maschine.
Wenn ich es richtig gelesen habe sind das 3 Status wobei es eben aus dem Zustand Active zwei Übergänge gibt, entweder wegen Zeitablauf oder wegen dem Stop Button.
auf ein elektrisches "Problem" möchte ich noch Hinweisen. Du fragst offenbar auf HIGH ab ... hast du auch externe Pulldown Widerstände bei deinen Buttons installiert damit die Pegel HIGH und LOW sauber erkannt werden können?
Das ist der Link, so wie mein aktuelles Projekt aufgebaut ist.
Die Widerstände habe ich auf eine externe Platine gelötet.
Wie gesagt, die Schaltung funktioniert so, aber das Relais löst sich wenn der Verbraucher angeschlossen wird
Der Verbraucher ist eine 12V DC Lebensmittelpumpe. Das ganze soll ein Wasserspender für meine Tochter werden und ich hab mir das alles etwas einfacher vorgestellt
Nein, eine Freilaufdiode ist nicht verbaut. Da bin ich auch ganz ehrlich, da haben dann meine elektrokenntnisse aufgehört
zumindest ist die Schaltung stabiler, vorher hat das leichte Drücken des Tasters das Relais schon rausgehauen.
Die Schaltung an sich funktioniert nun auch, solange wie ich den Verbraucher nicht am Relais hab.