/* 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; }