Ja klar verrate ich euch die Lösung. Wurde mir in ein Nachbarforum geschrieben, Funktioniert perfekt!
>>> Hinweis von Autor!>>> Dieses Programm ist öffentlich und zur freien Verfügung. Wer mein Geschenk in irgendeiner Form (Geld, Lächeln, Tierfutter für das Tierheim) weitergeben möchte, darf dies gerne tun, denn ich glaube an das Gute im Menschen.
Code:
/*
ATMEL ATtiny85
+-\/-+
Reset 1| |8 Vcc
Ain3 (D 3) PB3 2| |7 PB2 (D 2) Ain1
Ain2 (D 4) PB4 3| |6 PB1 (D 1) pwm1
GND 4| |5 PB0 (D 0) pwm0
+----+
Programmstart >> Rel 1 & Rel 2 in Ruhezustand.
Wird der Taster betätigt soll Rel 1 erst bei loslassen des Tasters für kurze Zeit ein Impuls abgeben. Ca. 05 - 1 Sek.
Wird der Taster länger als 5 Sek. betätigt soll Rel 2 anziehen bis zum loslassen des Tasters. Rel 1 soll hierbei keinen Impuls abgeben.
Taster schaltet gegen GND, also gedrückt = LOW
Relais schalten aktiv LOW
*/
const unsigned long relaisimpuls = 1000; // in Millisekunden, ggf. anpassen
const unsigned long tastenintervall = 5000; // in Millisekunden
const byte taster = 2; // D2 des ATtiny85
const byte relais1 = 3; // D3 des ATtiny85
const byte relais2 = 4; // D4 des ATtiny85
const unsigned long debounceDelay = 50;
unsigned long jetzt, vorhin, tasterMillis;
bool altZustand, aktZustand;
byte zustand = 1;
void setup()
{
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(taster, INPUT_PULLUP);
aktZustand = digitalRead(taster);
altZustand = aktZustand;
}
void loop()
{
jetzt = millis();
altZustand = aktZustand;
if (jetzt - tasterMillis >= debounceDelay) {
aktZustand = digitalRead(taster);
if (altZustand != aktZustand) tasterMillis = jetzt;
}
switch (zustand)
{
case 1:
if (altZustand && !aktZustand) {
vorhin = jetzt;
zustand = 2;
}
break;
case 2:
if (!altZustand && aktZustand) {
vorhin = jetzt;
zustand = 3;
digitalWrite(relais1, LOW);
}
if (jetzt - vorhin >= tastenintervall) {
zustand = 11;
digitalWrite(relais2, LOW);
}
break;
case 3:
if (jetzt - vorhin >= relaisimpuls) {
zustand = 1;
digitalWrite(relais1, HIGH);
}
break;
case 11:
if (!altZustand && aktZustand) {
zustand = 1;
digitalWrite(relais2, HIGH);
}
break;
}
}
Lesezeichen