Hallo,
ich bin dabei mir eine Lampensteuerung für ein Zimmer zu programmieren.
Diese soll mittels eines Taster folgende Funktionen erfüllen:
erstes mal tasten - Lampe 1 geht an
zweites mal innerhalb von 2 Sekunden tasten - Lampe 1 und Lampe 2 gehen
an
zweites mal tasten innerhalb von 6 Sekunden - Lampe 2 geht an
zweites bzw. 3 tasten - alles geht aus
Hier mein Programm was leider nicht ganz funktioniert:
1 | $regfile = "m8def.dat" 'für Mega8
|
2 | $crystal = 4000000
|
3 |
|
4 | Config Portd = Output 'definiert Portd als Output
|
5 | On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1 'Timer1 soll schon von 34285 wegzählen
|
6 | Dim A As Byte
|
7 | Config Portb = Input
|
8 | Portb = 1
|
9 | Do
|
10 | If Pinb.0 = 0 Then 'wenn Taster gedrückt Lampe 1 und Timer1 wird aktiviert
|
11 | Portd.0 = 1
|
12 | Enable Timer1
|
13 | Enable Interrupts
|
14 | Config Timer1 = Timer , Prescale = 256
|
15 | Timer1 = 34285
|
16 | End If
|
17 | While A = 1 'wird innerhalb von 2 Sekunden der Taster erneut betätigt leuchtet Lampe 2 dazu
|
18 | While A <= 2
|
19 | If Pinb.0 = 0 Then Portd.1 = 1
|
20 | Wend
|
21 | Wend
|
22 | While A = 3 'wird der Taster erst nach 3 Sekunden nach dem ersten Tasten wieder betätigt leuchtet nur Lampe 2
|
23 | While A <= 10
|
24 | If Pinb.0 = 0 Then Portd.1 = 1 : Portd.0 = 0
|
25 | Wend
|
26 | Wend
|
27 | While A > 11 ' wird der Taster erst nach 6 Sekunden ein zweites mal betätigt schaltet er alles aus
|
28 | If Pinb.0 = 0 Then
|
29 | Portd.0 = 0
|
30 | Portd.1 = 0
|
31 | Disable Timer1
|
32 | Disable Interrupts
|
33 | A = 0
|
34 | End If
|
35 | Wend
|
36 | Loop
|
37 | End
|
38 |
|
39 | Isr_von_timer1: 'ISR von Timer1
|
40 | Timer1 = 34285 'Timer1 soll wieder von 34285 wegzählen
|
41 | Incr A 'zählt variable A jede sekunde um eins hoch
|
42 | Return
|
das Problem ist das die Schritte zwar alle richtig abgearbeitet werden
aber die while-Wend schleifen schalten obwohl der Taster ncht betätigt
wird.
Wie kann ich dies ändern?