Hi,
ich habe in meinem Flur einen selbstgebauten LED Spiegel mit Bewegungsmelder. War sündhaft teuer.
Mein Problem ist, seit dem ich meinen Wlan Router und mein Telefon im Flur habe, schaltet sich der Spiegel schonmal öfters kurz ein.
Die Zeitschaltung funktioniert mit einem Schmitt Trigger und nem Kondensator. Der Bewegungsmelder hat einen 5 V TTl Ausgang.
Jetzt soll er wieder richtig funktionieren und bekommt einen Microcontroller.
Ich möchte das er bei Bewegungserkennung 3- 5 Minuten einschaltet und danach aus. Werden in einer bestimmten Zeit zu viele Bewegungen registriert, soll er für ca 20 Minuten ausgeschaltet bleiben.
Irgendwie finde ich nicht den richtigen Ansatz.
Hier mal mein Programm. Ich bin sicher es gibt eine ganz einfache Lösung.
Wie
Wenn in 5 Minuten 20 x einschalten kommt, dann für 20 Minuten aus.
Ich danke euch.
Code:
$regfile = "attiny13.dat"
$crystal = 1000000
Ddrb = &B11101111 'Pin PB4 Eingang Rest Ausgang
Dim Stufe1 As Byte
Dim Zaehler As Word
Dim Tilt As Word
Declare Sub Unterprogramm
Config Adc = Single , Prescaler = Auto
Start Adc
'schalte den Timer1 ein
Config Timer0 = Timer , Prescale = 256 'timer 1 0 bis 65535 Zählen Taktfrequenz durch 256 =1000000/256=3906,25 Hz
Enable Timer0 ' 65536 - 3906 = 61630
On Timer0 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer0
Enable Interrupts
Timer0 = 0 'Leider Nur 8 Bit Timer Bis 255 Ca 15 X Interrupt = 1 Sekunde '61630
Do
If Stufe1 = 2000000 And Portb.4 = 1 Then 'nach 2000000 bewegungsmeldungen/Programmdurchläufen und eingang eingeschaltet Ausgang aus
Portb.3 = 0
Stufe1 = 0
Zaehler = 61 'Zähler auf 61 Setzen um Auszeit zu zählen
End If
If Portb.4 = 1 Then 'wenn Eingang auf 1 Pin B4 auf 1
Portb.3 = 1
Stufe1 = Stufe1 + 1 'Einschalthäufigkeit zählen
Gosub Unterprogramm
End If
Loop
Sub Unterprogramm
If Zaehler = 900 Then ' nach 60 sekunden ausschalten
Portb.3 = 0
Zaehler = 0
End If
If Zaehler = 4500 Then 'nach 5 Minuten ausgeschaltet auch wenn eine Bewegung erfasst wird
Zaehler = 0 'wieder in den normalen Modus
End If
End Sub
End
Isr_von_timer1: 'ISR von Timer1
Timer0 = 0
Zaehler = Zaehler + 1
Return
Lesezeichen