PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom Verzweigung



s.a.i.l
16.04.2010, 14:18
Hallo!

Für meine momentanes Projekt soll ein LED beim Schließen eines Reed Kontaktes blinken.
Nachdem ich das mit den Pullupwiederstand und mit den LED Vorwiderstand auf die Reihe bekommen habe funktioniert es jetzt an und für sicht gut, nur ein kleines Problem wäre da noch.

Wenn ich wärend des Blinkens den Kontakt wieder öffne blinkt es trotzdem noch weiter bis quasi eine neue Schleife wieder anfängt, dass ist bei meinem Programmiergeschick auch nicht verwunderlich, aber wie kann ich das machen, dass das LED in dem Moment wo der Kontakt unterbrochen wird aufhört zu blinken??



Config Portb.0 = Output
Config Pina.1 = Input
Porta.1 = 1


Do

If Pina.1 = 0 Then

Waitms 5000

Portb.0 = 1 '
Waitms 30
Portb.0 = 1 '
Waitms 30
Portb.0 = 1 '
Waitms 30

Else

Portb.0 = 1

Loop

End If

PicNick
16.04.2010, 14:31
Frage 1: wieso blinkt da überhaupt was ? Du setzt doch Portb.0 immer nur auf 1 und nie auf 0 ?

Frage 2: Wieso Waitms 5000 ? d.h. es dauer 5 Sekunden, bis irgendwas geschehen kann ?

Frage 3: Wieso Waitms 30 ? der Bursche ist ja dann in 90 millisekunden mit dem Blinken fertig, das sieht man doch fast nicht ?

s.a.i.l
16.04.2010, 15:32
Frage 1: wieso blinkt da überhaupt was ? Du setzt doch Portb.0 immer nur auf 1 und nie auf 0 ?

Sorry hab beim kürzen einen Fehler gemacht im Originalprogramm wird auch auf 0 gesetzt.



Frage 2: Wieso Waitms 5000 ? d.h. es dauer 5 Sekunden, bis irgendwas geschehen kann ?

Das soll auch so sein....




Frage 3: Wieso Waitms 30 ? der Bursche ist ja dann in 90 millisekunden mit dem Blinken fertig, das sieht man doch fast nicht ?

Das war nur die gekürzte Version des Programms... geht noch lange weiter mit dem ein und ausschalten..

Thomas$
16.04.2010, 15:41
frag vor jedem schritt den pin ab oder seh dir die sache mit dem interrupt durch

PicNick
16.04.2010, 15:55
Hilft nix, du musst während des Blinkens immer wieder den Input abfragen, ob der Kontakt noch immer geschlossen ist.
Für das Blinken machst du am besten eine Schleife, da ist das Ganze auch kompakt

z.B:


DIM Flashcount as Byte

Do
Portb.0 = 1 ' LED aus
If Pina.1 = 0 Then ' gedrückt ?
Waitms 5000 ' jupp
gosub blinkenlights ' lichtspiele
End If
Loop
END
'-------------------------------------------------------
blinkenlights:
for Flashcount = 0 to 64 ' 64 mal blinken (?)
If Pina.1 = 1 Then ' nicht mehr gedrückt ? ---> tschüss
return
end if
Portb.0 = 0 ' LED an
Waitms 30
Portb.0 = 1 ' LED aus
Waitms 30
next
return



Gedrückt---> warten 5 sek --> subroutine


subroutine: 64 mal
Taste losgelassen ? stop blink
LED an wait LED aus wait

Thomas$
16.04.2010, 16:07
ich hätte an die flanken änderung gedacht, damit sollte es doch auch gehen bei steigenderflanke starten der blink routine und beim fallenenderflanke eine andere routine welche die blinkroutine unterbricht.

s.a.i.l
18.04.2010, 16:44
Danke PicNick deine Lösung funktioniert genau so wie ich mir das vorgestellt habe!! Schön das einem hier so schnell geholfen wird!!

mfg