PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : anfänger frage



emde
09.09.2007, 12:31
Hallo, ich möchte folgendes erreichen. WEnn ich einen taster drücke, soll eine led angehen. WEnn ich ihn wieder drücke soll sie wieder ausgehen. Ich habe es so probiert, es geht aber nicht. Hoffe ihr könnt mir helfen.



$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portd.7 = Output
Config Pinc.2 = Input
Portc.2 = 1
Led Alias Portd.7
Taster Alias Pinc.2
Double Hallo = 0



Do

If Taster = 0 Then
Double Hallo + 1
End If

If Double Hallo = 1 Then
Led = 1
End If




Loop

End


emde

PicNick
09.09.2007, 13:18
Da ist erstmal ein Problem mit der Syntax.
Das, was du geschrieben hast, müßte rein formal erstmal so aussehen:


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portd.7 = Output
Config Pinc.2 = Input
Portc.2 = 1
Led Alias Portd.7
Taster Alias Pinc.2
Dim Hallo As Double

Hallo = 0

Do
If Taster = 0 Then
Hallo = Hallo + 1
End If
If Hallo = 1 Then
Led = 1
End If
Loop
End

Deswegen funktioniert es aber auch nicht

1 Wieso meinst du, ein DOUBLE für "Hallo" verwenden zu müssen ? Hast du eine Ahnung, was das ist ?
2 Wenn du eine LED auf- und abdrehen willst, müßte wohl irgendwo auch
"LED = 0" vorkommen. Tut es aber nicht ?


3 Computer wollen es immer ganz genau wissen.

Du willst LED = 1, wenn :
LED = 0 UND Taste gedrückt.

Du willst LED = 0, wenn :
LED = 1 UND Taste gedrückt.

Taste gedrückt ist aber auch komplizierter:
du fragst in einer Schleife ab, ob der Tasten-Pin = 0. Wenn du die Taste nun eine 1/2 Sekunde lang drückst, kommt dir bei der Abfrage ein paar hundert mal eine Null raus. So geht's wohl nicht.

Du mußt also den Moment erwischen, wo die Taste vorher =1 war und jetzt = 0. Dadurch stellst du sicher, daß dir dein "IF" nur einmal je Tastendruck aufgeht

Es gibt verschiedene Lösungen, je nachdem, was das Progamm sonst noch zu tun hat

Eine Möglichkeit, wenn sonst nix zu tun ist:


LED = 0
DO
' abfragen, bis die Taste ausgelassen wurde
while taster <> 1
wend
' jetzt ist taster = 1

' warten, bis die Taste gedrückt wird
while taster <> 0
wend
' jetzt ist taster = 0
if Led = 0 THEN
led = 1 ' is LED = aus, dann aufdrehen
else
led = 0 ' is LED = ein, dann abdrehen
end if
LOOP
END


Bei LED 0/1 kommst drauf an, wie die angeschlossen wurde

Vitis
09.09.2007, 14:45
config portd.7 = output
config portc.2 = input

taster alias pinc.2
led alias portd.7

do
if taster=1 then
toggle led
waitms 50
endif

loop