Hallo, Ich sitze hier in der Hitze und komme mit meinen Programm nicht weiter. Ich habe 2 Taster. Taster1 Und Taster2. Und 2 Ausgänge Led1 und Led2. Die funktion soll folgende sein: -Taste ich Taster 1 1x dann soll Led1 leuchten. -Taste ich Taster 1 noch einmal soll Led1 nicht mehr leuchten. Das gleiche für Taster2 und Led2 Soweit habe ich es auch am klappen. Aber jetzt kommt es: - Betätige ich Taster1, dann leuchtet Led 1. Betätiger ich dann Taster 2, dann soll Led1 aus gehen und Led2 soll leuchten. usw. Also Led2 und Led1 soll nicht gleichzeitig Leuchten. Das ist ja in der Art eine Verriegelung. Ich habe keine Idee mehr. Kann mir vielleicht jemand weiterhelfen? Ich brauche wahrscheinlich nur einen Denkanstoß. Ich habe zur Zeit einen Brett vor dem Kopf. $regfile = "m32def.dat" $crystal = 10000000 $baud = 9600 $hwstack = 32 $swstack = 10 $framesize = 24 Config Portb = Input Config Porta = Output Config Portc = Output Config Portd = Output Config Debounce = 8 Portb = &B11111111 'LED1 an PB1 Led1 Alias Porta.1 Config Led1 = Output 'LED2 an PB2 Led2 Alias Porta.2 Config Led2 = Output 'TASTER1 an PB2 Taster1 Alias Pinb.2 'Taster 2 an PB2 Taster2 Alias Pinb.3 Dim Tasterwert11 As Byte Dim Tasterwert22 As Byte Do Debounce Taster1 , 0 , Taster11 , Sub Debounce Taster2 , 0 , Taster22 , Sub Loop Taster11: If Taster1 = 0 Then Tasterwert11 = Tasterwert11 + 1 If Tasterwert11 = 1 Then Led1 = 1 Led2 = 0 Elseif Tasterwert11 = 2 Then Led1 = 0 Tasterwert11 = 0 End If Taster22: If Taster2 = 0 Then Tasterwert22 = Tasterwert22 + 1 If Tasterwert22 = 1 Then Led2 = 1 Led1 = 0 Elseif Tasterwert22 = 2 Then Led2 = 0 Tasterwert22 = 0 End If
Da ich gerade Kust habe ein bisschen was zu Programmieren mach ich's dir mal kurz:
1 | $regfile = "m32def.dat" |
2 | $crystal = 10000000 |
3 | $baud = 9600 |
4 | $hwstack = 32 |
5 | $swstack = 10 |
6 | $framesize = 24 |
7 | |
8 | 'Einen Port als Input zu definieren kannst du dir sparen. Das ist beim einschalten automatisch so. |
9 | DDRA = &B00000110 'Lieber nur die Pins als Output definieren, die auch wirklich gebraucht werden. Den Rest auf Input und 0 lassen, dann sind sie hochomig. |
10 | Portb = &B00001100 |
11 | |
12 | 'LED1 an PA1 |
13 | Led1 Alias Porta.1 |
14 | |
15 | 'LED2 an PA2 |
16 | Led2 Alias Porta.2 |
17 | |
18 | 'Taster1 an PB2 |
19 | Taster1 Alias Pinb.2 |
20 | |
21 | 'Taster2 an PB3 |
22 | Taster2 Alias Pinb.3 |
23 | |
24 | 'Die Variablen kannst du dir komplett sparen. Du könntest die Portregister direkt als Variable verwenden. |
25 | |
26 | Do |
27 | Debounce Taster1 , 0 , Taster1_down , Sub |
28 | Debounce Taster2 , 0 , Taster2_down , Sub |
29 | Loop |
30 | |
31 | End |
32 | |
33 | Taster1_down: |
34 | Led2 = 0 'Macht bei Taster1 auf jeden Fall LED2 aus. |
35 | Toggle Led1 'Wechselt den Zustand von LED1 |
36 | Return 'Springt in die Hauptschleife zurück. |
37 | |
38 | |
39 | Taster2_down: |
40 | Led1 = 0 |
41 | Toggle Led2 |
42 | Return |
Ich hoffe, ich konnte dir helfen.
Ich kenne den Basic Syntax nicht. ------- Taster1 LED2 = 0 LED1 = LED1 EOR 1 ------- Taster2 LED1 = 0 LED2 = LED2 EOR 1 ------- EOR ist die logische exor Funktion, die das Basic hoffentlich hat.
Hallo Samuel C. (dragonsam) hab das alles so in meinen Atmega 32 rein gebrannt. Hat auf anhieb funktioniert. Super Danke. Aber ich weis nicht warum das so funktioniert. Ich habe einen Aufsatz geschrieben und du machst da einen 3 Zeiler raus. Super Danke
Naja, du hattest die Voraussetzung, dass bei Taster1 LED2 ausgehen soll. Das macht man mit Led2 = 0 Bei Taster2 und LED1 ist es dasselbe. Dann hattest du noch die Voraussetzung, dass bei Taster1 der Zustand von LED1 gewechselt wird. Wenn LED1 aus geht sie an und wenn sie an ist geht sie aus. Genau das macht "Toggle". Beide Befehle in eine Routine und Tadaaa, fertig war's.
Dima schrieb: > Ich habe einen Aufsatz geschrieben und du machst da einen 3 Zeiler raus. Zu langen Aufsätze hatte Samuel heute am Sonntag wohl keine Lust ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.