Klasse Idee und Mathematik,
habe ich mal sofort etwas geändert und auch die Motoren mit in's Spiel genommen.
Ich bin ein Fan von blinkenden LED's![]()
Code:/***************************************************************************** * zufall LED * *****************************************************************************/ #include "asuro.h" //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // // uint8_t zufall () // // Liefert eine 8-Bit Pseudozufallszahl zurück, // die Zahlenfolge wiederholt sich spätestens nach 65535 Aufrufen. // unsigned char zufall () { static unsigned int startwert = 0x0AA; unsigned int temp; unsigned char n; for (n = 1; n < 8; n++) { temp = startwert; startwert = startwert << 1; temp ^= startwert; if ((temp & 0x4000) == 0x4000) startwert |= 1; } return (startwert); } //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- int main (void) { int i; //Zähler unsigned int data [2]; //Odo unsigned int zuf; //Zufall unsigned char dirlinks, dirrechts; unsigned char speedlinks, speedrechts; Init (); StatusLED (OFF); /* Zufaellige Zeit fuer "Anfangs-Zufallszahl" */ zuf = zufall (); OdometrieData (data); // aktuelle Odometriewerte zuf ^= data [0]; for (i = 1; i < zuf; i++) zufall (); while (1) { StatusLED (OFF); BackLED (OFF, OFF); /* Bereich StatusLED */ zuf = zufall (); // Zufallszahlen zw. 0 und 255 if (zuf < 25) StatusLED (OFF); // ca. 10% aus else if (zuf < 75) StatusLED (YELLOW); // ca. 20% gelb else if (zuf < 150) StatusLED (RED); // ca. 30% rot else StatusLED (GREEN); // ca. 40% grün /* Bereich BackLED */ zuf = zufall (); // Zufallszahlen zw. 0 und 255 if (zuf < 64) BackLED (OFF, OFF); // 25% beide aus else if (zuf < 128) BackLED (ON, OFF); // 25% links an - rechts aus else if (zuf < 192) BackLED (OFF, ON); // 25% links aus - rechts an else BackLED (ON, ON); // 25% beide an /* Bereich FrontLED */ zuf = zufall (); // Zufallszahlen zw. 0 und 255 if (zuf < 204) FrontLED (OFF); // 80% aus else FrontLED (ON); // 20% an /* Richtung */ zuf = zufall (); if (zuf < 216) dirlinks = FWD; // 85% vorwaerts else if (zuf < 230) dirlinks = BREAK; // 5% stop else dirlinks = RWD; // 10% rueckwaerts zuf = zufall (); if (zuf < 216) dirrechts = FWD; // 85% vorwaerts else if (zuf < 230) dirrechts = BREAK; // 5% stop else dirrechts = RWD; // 10% rueckwaerts MotorDir (dirlinks, dirrechts); /* Geschwindigkeit */ zuf = zufall (); if (zuf < 128) speedlinks = 130; // 50% langsam else if (zuf < 204) speedlinks = 170; // 30% mittel else speedlinks = 200; // 20% schnell zuf = zufall (); if (zuf < 128) speedrechts = 130; // 50% langsam else if (zuf < 204) speedrechts = 170; // 30% mittel else speedrechts = 200; // 20% schnell MotorSpeed (speedlinks, speedrechts); /* "gauss" dauer zwischen 0 und 2 sec mit häufung um 1 sec */ zuf = 0; /* for (i = 1; i <= 10; i++) // zahlen von 0 bis 2550 zuf += zufall (); zuf *= 4; // zahlen von 0 bis 10200 zuf /= 5; // zahlen von 0 bis 2040 */ /* "gauss" dauer zwischen 0 und 2 sec mit geringerer häufung um 1 sec */ for (i = 1; i <= 4; i++) // zahlen von 0 bis 1020 zuf += zufall (); zuf *= 2; // zahlen von 0 bis 2040 Msleep(zuf); } return 0; }






Zitieren

Lesezeichen