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; } }







Zitieren

Lesezeichen