RANDOM - always the same result
Hello,
I'm doing something so obviously wrong, I can't see the tree in the forest anymore.
Code:
rvalue VAR WORD
random rvalue
R_V0 = (RValue//4) + 1 ' Convert it to range 1-4
if R_V0 = 1 then high led1
if R_V0 = 2 then high led2
if R_V0 = 3 then high led3
if R_V0 = 4 then high led4
The code above will always show "led3".
What's wrong here?
Got it working... but I don't know why
Bonjour Alain,
Thanks...
I just found a way to make it work.
I changed my code and put R_V0 = rvalue & $03. But, to be honest, I don't understand why it works now.
Before opening this thread, I read lots of other threads about this subject. I've also been reading the Compiler's manual. I read this "Var is used both as the seed and to store the result" but my english is to poor and I don't understand the correct meaning of the word "seed" (graine - in french) here.
Could you explain this command in other words please?
"RANDOM" = same sequence over and over!
Is this really RANDOM?
I've been checking the sequence over and over again with 50 "random" generated numbers in a row.
The result is an exact same complete sequence everytime I power-up my PIC.
Anyone any clue?
PARALLAX - Basic Stamp explains clearly
As often, I can find interresting information in the Basic Stamp's documentation.
At least, at my level of comprehension, it is much more clear than the PBP Compiler's manual.
Is someone else has (or had) the same problem as me, here is an extract of PARALLAX's BS2 documentation:
Quote:
RANDOM generates pseudo-random numbers ranging from 0 to 65535.
They’re called “pseudo-random” because they appear random, but are
generated by a logic operation that uses the initial value in Variable to "tap"
into a sequence of 65535 essentially random numbers. If the same initial
value, called the "seed", is always used, then the same sequence of
numbers is generated.
In applications requiring more apparent randomness, it's necessary to
"seed" RANDOM with a more random value every time. For instance, in
the demo program below, RANDOM is executed continuously (using the
previous resulting number as the next seed value) while the program
waits for the user to press a button. Since the user can’t control the timing
of button presses very accurately, the results approach true randomness.
Main:
FOR trials = 1 TO 100 ' flip coin 100 times
Hold:
RANDOM flip ' randomize while waiting
BUTTON Btin, 0, 250, 100, btnWrk, 0, Hold ' wait for button press
IF (coin = 0) THEN ' 0 = heads, 1 = tails
DEBUG CR, "Heads!"
heads = heads + 1 ' increment heads counter
ELSE
DEBUG CR, "Tails..."
tails = tails + 1 ' increment tails counter
ENDIF
NEXT
PARALLAX "BASIC Stamp Syntax and Reference Manual Version 2.1
NB: Forum Administrators - please let me know if reproducing this kind of information is not allowed.