Hallo,
ich mache gerade Experimente zum Test einer Funkverbindung zwischen zwei Arduinos und wollte eine Quasi Zufallsbytefolge als Testmuster übertragen.
Dabei habe ich festgestellt, dass der Funktionsaufruf randomSeed(0) nicht bei jedem Aufruf die gleiche Folge von Zufallszahlen generiert, sondern nur beim ersten Aufruf.
Wenn ich stattdessen randomSeed(1) aufrufe, wird nach dem Aufruf auch im laufenden Programm immer wieder die gleiche Folge generiert.
Ausprobieren kann das jeder mit folgendem kleinen Programm
Wenn man statt randomSeed(0) randomSeed(1) einsetzt, wird in jeder loop die gleiche Folge generiert.
Zu diesem seltsamen Verhalten konnte ich nichts in der Dokumentation finden.
Gruß
Reinhard
Aber ich wollte ja genau eben keine Zufallszahl sondern wollte die Wiederholbarkeit der Funktion ausnutzen, um auf der Empfangsseite zu testen, ob die Folge korrekt ankommt.
erni-berni:
Hallo,
ich mache gerade Experimente zum Test einer Funkverbindung zwischen zwei Arduinos und wollte eine Quasi Zufallsbytefolge als Testmuster übertragen.
Dabei habe ich festgestellt, dass der Funktionsaufruf randomSeed(0) nicht bei jedem Aufruf die gleiche Folge von Zufallszahlen generiert, sondern nur beim ersten Aufruf.
Wenn ich stattdessen randomSeed(1) aufrufe, wird nach dem Aufruf auch im laufenden Programm immer wieder die gleiche Folge generiert.
In arduino1.0.2\hardware\arduino\cores\arduino\WMath.cpp
steht
void randomSeed(unsigned int seed)
{
if (seed != 0) {
srandom(seed);
}
}
Praktisch bei null wird kein neuer Wert gesetzt sondern mit der alten Folge weitergemacht. Frag mich aber nicht wieso.
Grüße Uwe
Danke Uwe, das ist die Erklärung und offensichtlich so gewollt.
In meiner genutzten V1.0 ist der Programmabschnitt übrigens auch so.
Wenn man das Verhalten kennt, kann man das ja evtl bewusst so einsetzen.