/* RandomWalk
* Paul Badger 2007
* RandomWalk wandert zufällig zwischen 2 Endpunkten umher.
* Die maximale Bewegug pro Schritt wird über "stepsize" festgelegt.
* Eine statische Variable wird dazu um einen zufälligen Wert hoch- bzw.
* heruntergezählt.
* Das ist auch bekannt als "pink noise" und "drunken walk".
*/
// Definiere die maximale und minimale Beschränkung der Funktion
#define randomWalkLowRange -20
#define randomWalkHighRange 20
// Variable für die Schrittweite pro Durchlauf
int stepsize;
// Variable zur Speicherung des aktuellen Ergebnisses der RandomWalk-Funktion
int thisTime;
int total;
void setup() {
// Initialisiere die serielle Verbindung
Serial.begin(9600);
}
void loop() {
// Initialisiere die Schrittweite
stepsize = 5;
// Rufe die randomWalk-Funktion auf und speichere das Ergebnis
// in der Variable "thisTime"
thisTime = randomWalk(stepsize);
// Gib den Wert der Variable "thisTime" aus
Serial.println(thisTime);
// Warte 10 ms
delay(10);
}
int randomWalk(int moveSize) {
// Variable, um den Wert in der randomWalk-Funktion zu speichern
// Nur diese Funktion kann den Wert ändern, der Wert ist aber von
// Aufruf zu Aufruf wieder verfügbar
static int place;
// Zufällige Bewegung
place = place + (random(-moveSize, moveSize + 1));
// Check, ob die Limits verletzt wurden
if (place < randomWalkLowRange) {
// Korrigiere den aktuellen Schritt in die positive Richtung
place = randomWalkLowRange + (randomWalkLowRange - place);
}
else if(place > randomWalkHighRange) {
// Korrigiere den aktuellen Schritt in die negative Richtung
place = randomWalkHighRange - (place - randomWalkHighRange);
}
// Gib die neue Position zurück
return place;
}