Archiv verlassen und diese Seite im Standarddesign anzeigen : input with non Blocking
themaverick
21.02.2006, 19:06
hi
ich möchte ein while schleife nutzen um so lange eine routine auszuführen bis eine eingabe erfolgt.
da das gewöhnliche "input var" auf eine "enter" wartet bis es das programm wieter laufen lässt ist es nicht geeignet.
gibt es einen alternativen befehle oder eine einstellung das der input non blocking nutzt ?
wäre für jede hilfe dankbar
grüße
The Maverick
svenulm31
21.02.2006, 19:56
meinst du das so ? die 13 kannst du durch jeden anderen tastaturcode ersetzten
$regfile = "m8def.dat"
Dim A As Byte
Do
A = Inkey()
If A = 13 Then Exit Do
Loop
Print "Enter getrückt"
End
svenulm31
21.02.2006, 20:02
oder auch so
$regfile = "m8def.dat"
Dim A As Byte
Do
A = Inkey()
If A = 65 Then Exit Do
Loop
If A = 65 Then Print "Taste GROß A gedrückt"
End
themaverick
21.02.2006, 20:10
ähm nein .. ich übergebe über den serial port einen string und es soll eben immer wieder geprüft werden ob da was ankommt und wenn nicht soll die while schleife weiterlaufen bis eben waskommt
svenulm31
21.02.2006, 20:59
also egal auf welche taste ...er soll auf jede reagieren ...also so
Dim A As Byte
Schleife:
Do
A = Inkey()
If A > 0 Then Exit Do
Loop
Print "Taste " ; A ; " wurde getrückt"
Goto Schleife
End
themaverick
21.02.2006, 21:22
wieso taste ?
entweder steh ich auf der leitung oder ihr versteht mich falsch :)
also ich hab einen computer mittels rs232 an einem atmel AVR mega 32
über ein programm kann ich NUR STRINGS an den serial port geben und der kommt dann wiederrum an den avr.
bisher funzt mein programm so
do
input all
if all = "000" then
//nix
else
//hier tut er was damit
end if
loop
jetzt möchte ich das umstellen auf in etwa
dim all as string *256
dim oldall as string * 256
do
input all
while all = oldall then
//hier was mit "all" tun
oldall = all
wend
loop
so das er hier solange immer wieder die selbe routine mit "all" anstellt bis sich "all" ändert
der aufbau oben ist nur schematisch und legt kein wert auf funktionstüchtigkeit
Hallo,
ich fürchte, Du wurdest missverstanden. Schau mal in der Hilfe nach ISCHRWAITING(). Damit solltest Du das erreichen, was Du möchtest.
Grüße
Henrik
Hi,
kannst auch "Timeout" verwenden.
Dann fliegt er nach einer einstellbaren Zeit aus der Input Routine raus, wenn nix kommt.
Ist aber nicht sehr elegant.
Gruß
Christopher
themaverick
22.02.2006, 00:08
danke jungs ... jetzt hab ichs hinbekommen .. mit dem ischarwaiting()
aber es funzt noch net so sauber wie ich mir das gewünscht hätte .. der pc sendet die zahlenreihen schneller als der avr sie verarbeiten kann ...
gibts ne möglichkeit dem inkey oder waitkey zu sagen er soll alle zeichen und nicht nur eins einlesen
ich würde dann vordefinieren 3 zeichen und das ischarwaiting solle auch die schleife erst abbrechen wenn 3 angekommen sind un nicht nur eins
The Maverick
themaverick
22.02.2006, 00:27
ah ich hab mal die fürs bugfixing wichtigen print befehle raus genommen
das hat wohl soviel rechenzeit in anspruch genommen das es nicht flüssig ging.
jetzt kommt er auch mit langen zahlen reihen über den seriellen port problemlos klar
danke an alle für eure Tips
The Maverick
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.