Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 09:42 19 Jul 2025 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : Trying to use InKey$ in a menu...

Author Message
Grogster

Admin Group

Joined: 31/12/2012
Location: New Zealand
Posts: 9596
Posted: 11:34pm 02 Mar 2013
Copy link to clipboard 
Print this post

Hi folks.

Trying to use the code:

Do:loop until inkey$<>""

to wait for a keypress, then act on it.
This works as far as waiting till you press a key, but then the result of inkey$ is always zero.

I added the line:

cls:? val(inkey$)

so that the screen would clear, and show me the value of the keypress, but it is always zero.

Can someone help me work out what I am doing wrong?

EDIT: Hang on - inkey$ is only NOT zero for the instant when I press a key, which allows the code to move to the next line, but then it will be zero again - I will try adding a line to copy the value of inkey$ to some other variable, then check that...

EDIT: Nope. Did not help. Can anyone prod me in the right direction?Edited by Grogster 2013-03-04
Smoke makes things work. When the smoke gets out, it stops!
 
OA47

Guru

Joined: 11/04/2012
Location: Australia
Posts: 982
Posted: 11:47pm 02 Mar 2013
Copy link to clipboard 
Print this post

Grogster, you may have to assign a string to inkey$. ie K$= inkey$ and then test for the K$
All the best
 
Grogster

Admin Group

Joined: 31/12/2012
Location: New Zealand
Posts: 9596
Posted: 11:54pm 02 Mar 2013
Copy link to clipboard 
Print this post

Good point.

Tested, still not working.

Here is my experimental code:

wfk:
key$=Ucase$(InKey$):if key$="" then goto wfk
? val(key$)


This does wait for a keypress, but the result is still zero no matter what key I press.
This is really confusing, as the fact that the loop continues once I press a key, means that InKey$(and it's copy key$) must now NOT be zero anymore, or the loop would not have looped, if you see what I mean, yet is still reports it as zero.
Smoke makes things work. When the smoke gets out, it stops!
 
OA47

Guru

Joined: 11/04/2012
Location: Australia
Posts: 982
Posted: 11:58pm 02 Mar 2013
Copy link to clipboard 
Print this post

My memory isn't what it used to be, but I think Geoffg covered this sometime in the past. I will search the forum and see if I can come up with his post.
 
OA47

Guru

Joined: 11/04/2012
Location: Australia
Posts: 982
Posted: 12:04am 03 Mar 2013
Copy link to clipboard 
Print this post

Maybe this is the post I was thinking of:
http://www.thebackshed.com/forum/forum_posts.asp?TID=4720&KW =inkey%24
 
BobD

Guru

Joined: 07/12/2011
Location: Australia
Posts: 935
Posted: 12:40am 03 Mar 2013
Copy link to clipboard 
Print this post

  Grogster said   Good point.

Tested, still not working.

Here is my experimental code:

wfk:
key$=Ucase$(InKey$):if key$="" then goto wfk
? val(key$)


This does wait for a keypress, but the result is still zero no matter what key I press.
This is really confusing, as the fact that the loop continues once I press a key, means that InKey$(and it's copy key$) must now NOT be zero anymore, or the loop would not have looped, if you see what I mean, yet is still reports it as zero.

Grogster
You are not thinking like a programmer. inkey$ clearly has a value else the loop would not terminate. By the way, it would be much tidier if you used a do while.... loop or a do ... loop until, however that is OT.

It is your conversion of inkey$ to Ucase$ and then to Val that is invalid somewhere along the way. Here is the definition of Val
Returns the numerical value of the ‘string$’. If 'string$' is an invalid
number the function will return zero.

What about the Ucase$, is there a purpose for it. Why don't you start basic and then make it more complicated. Just equate key$ to inkey$ and print that and when you are happy then add more functionality. You will then know when you break it.
 
Juri74

Senior Member

Joined: 06/02/2012
Location: Italy
Posts: 162
Posted: 12:41am 03 Mar 2013
Copy link to clipboard 
Print this post

what version are you using?
in my maximite v4.3 this program works perfectly:
Do
A$=Inkey$
Loop Until A$<>""
Print A$

val(inkey$) return the VALUE of the ascii... if you press "3" val(a$) return 3 but if you press "f" val(a$) return 0
maybe you mean ASC(A$)
this is your original prog:
wfk:
key$=Ucase$(InKey$):if key$="" then goto wfk
? val(key$)

try this:

wfk:
key$=Ucase$(InKey$):if key$="" then goto wfk
? asc(key$)

try this:
A$="1024"
Print Val(A$)
Edited by Juri74 2013-03-04
 
Grogster

Admin Group

Joined: 31/12/2012
Location: New Zealand
Posts: 9596
Posted: 12:31pm 03 Mar 2013
Copy link to clipboard 
Print this post

Thanks guys.

@BobD - Yeah, I probably was not thinking that well. It was late at night, and I did not want to go to bed till I got that working. In the end, I gave up.

I wanted to use the F1-F12 keys, so was trying to get the value of the keypress, so I could confirm what is in the manual, page 53. When I put in a if key$=145 (for F1) kind of thing, it would not loop, so I was just trying to get a confirmation of number 145 as per the table on page 53 when I press [F1].

This I was not getting.

Thanks to Juri74 for the prod I needed. Using the ASC command gives me the number I want, so I should be able to go forward now.

I have removed any reference to Ucase$ too.
Smoke makes things work. When the smoke gets out, it stops!
 
Grogster

Admin Group

Joined: 31/12/2012
Location: New Zealand
Posts: 9596
Posted: 12:53pm 03 Mar 2013
Copy link to clipboard 
Print this post

Still not having any luck.

Here is the code:


Do:
key=val(inkey$) 'Get decimal value of keypress
Loop until key<>0 'Wait for any key press
if key=145 then print "[F1] pressed.":end 'Key detected
print "Wrong key."
print key
end


This waits for a key, does nothing when I DO press [F1], then returns a negative number for any of the other function keys. Pressing [F2] results in key being printed as -158.



I'm getting a bit lost - any help appreciated.

Is there a better more standard and acknowledged way of handling the function keys in MMBASIC? Perhaps there is another method I should be using?

EDIT: I have been rereading this thread, the examples, and the manual. I think I see where I am going wrong, and it is the val statement again(as BobD tried to point out). Val can only be for a number, I think. So, you can't use it to obtain a decimal value of anything other then a number.

I will make some more changes and see what happens...Edited by Grogster 2013-03-04
Smoke makes things work. When the smoke gets out, it stops!
 
Grogster

Admin Group

Joined: 31/12/2012
Location: New Zealand
Posts: 9596
Posted: 01:13pm 03 Mar 2013
Copy link to clipboard 
Print this post

AHHHHHHHHHH!!!!!!!!

I think I have it worked out with everyones help.



Do:
key$=inkey$ 'Save a keypress
Loop until key$<>"" 'Wait until there is a keypress
if asc(key$)=145 then print "[F1] pressed.":end
print "Wrong key."
print asc(key$)


This is detecting the correct keypress.

I will now expand on this...

Smoke makes things work. When the smoke gets out, it stops!
 
Print this page


To reply to this topic, you need to log in.

The Back Shed's forum code is written, and hosted, in Australia.
© JAQ Software 2025