Random Walk
/* RandomWalk
Paul Badger 2007
RandomWalk wanders up and down randomly between two endpoints. The maximum move in one loop is governed by the parameter "stepsize".
A static variable is moved up and down a random amount. This technique is also known as "pink noise" and "drunken walk".
Useful for more pleasant electronic music sounds than straight random calls. Flickering LED's?
My really cursory testing seems to indicate that it has a slight positive bias - meaning that it hangs around the
upper end of the range just slightly more than the lower end.
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
int total;
void setup()
{
Serial.begin(9600);
Serial.println("start ");
}
void loop()
{ // tetst randomWalk function
stepsize = 5;
thisTime = randomWalk(stepsize);
total += thisTime; // aggregate values to see if function is really random
Serial.print(thisTime);
Serial.print(" ");
Serial.println(total);
delay(10);
}
int randomWalk(int moveSize){
static int place; // variable to store value in random walk - declared static so that it stores
// values in between function calls, but no other functions can mess with its value
place = place + (random(-moveSize, moveSize + 1));
if (place < randomWalkLowRange){ // check lower and upper limits
place = randomWalkLowRange + (randomWalkLowRange - place); // reflect number back in positive direction
}
else if(place > randomWalkHighRange){
place = randomWalkHighRange - (place - randomWalkHighRange); // reflect number back in negative direction
}
return place;
}
Function Library