Wenn ich das richtig verstehe wird der Wert ZUFALL erzeugt +1. Folgt daraus nicht das immer links gedreht wird?
Mit der Funktion habe ich noch keine Erfahrung.
Druckbare Version
Wenn ich das richtig verstehe wird der Wert ZUFALL erzeugt +1. Folgt daraus nicht das immer links gedreht wird?
Mit der Funktion habe ich noch keine Erfahrung.
ZUFALL ist hier ein Makro. D.h. der Compiler setzt überall wo ZUFALL steht, die Klammer ein.
'micros() & 1' vergleicht die Zahl der vergangenen Mikrosekunden mit der Maske 1.
Somit wird nur das niedrigste Bit ausgewertet. Man könnte auch fragen: Ist der Momentanwert von micros() gerade oder ungerade?
Das ist natürlich nur Pseudo-Zufall, in einfachen Programmen kann es sein, dass immer ein definierter Wert rauskommt.
Du bringst es auf den Punkt. Für 50/50 Entscheidung genügt ein Bit. Und solange sichergestellt ist daß man nicht-periodisch, sondern nur "spontan" abfragt sollte das funktionieren.
Allerdings hab ich den Text zur micros Funktion *hust* inzwischen sogar mal durchgelesen und da steht daß beim Standard-Arduino im 4us-Takt aktualisiert wird, sodaß sich die letzten beiden Bits dann doch wieder disqualifizieren weil sie vermutlich immer den gleichen Inhalt haben werden. Also muß man mindestens Bit 2 bemühen
#define ZUFALL (micros() & 4)
- oder doch einfach random nehmen und gut... :)
Ja, klar, Dokumentation lesen hilft natürlich. ;)
Das einfügen der Funktion dient ja nur dazu dem Robo eine Varianz zu eben damit ein Betrachter sicher ein wenig das Gefühl bekommt hier findet eine qualitative und nicht eine quantitative Entscheidung statt. Genauso mache ich es mit der Drehweite im ms.
randTurn = random(200,800);
Die random Funktion ist vollkommen ausreichend. Aber schön zu lernen das es auch andere Wege gibt. ;)