PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : input with non Blocking



themaverick
21.02.2006, 18: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, 18: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, 19: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, 19: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, 19: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, 20: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

hrei
21.02.2006, 20:26
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

chr-mt
21.02.2006, 20:31
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
21.02.2006, 23: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
21.02.2006, 23: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