Ausgänge gegenainander verriegeln

Gast #2212804
Lesenswert?

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
#2212822
Lesenswert?

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.
Gast #2212902
Lesenswert?

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
#2212914
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren