Hallo
kann mir da jemand helfen?
oder gibt es sogar eine elegantere lösung um zufallszahlen zu erzeugen?
Eine Suche hier im RN-Forum nach "zufallszahlen AND asuro" findet genau drei Threads. Deinen hier, einen mit einer netten kleinen Zufallsfunktion:
https://www.roboternetz.de/phpBB2/ze...lszahlen+asuro
Der dritte Thread erklärt, wie man sowas anstellen kann und wie ich es auch machen würde:
https://www.roboternetz.de/phpBB2/ze...lszahlen+asuro
Alle zur Verfügung stehenden ADC-Werte verknüpfen:
Code:
#include "asuro.h"
#define versuche 5000 // Anzahl der Versuche
#define max 50 // Werte von 0 bis max-1 erzeugen
#define balken 0 // 1 für Anzeige mit Balken
unsigned char j, zahlen[max];
unsigned int i;
unsigned int rnd(unsigned char bereich)
{
static unsigned int alter_zufall;
unsigned int zufall, odo[2], line[2], bat, ports[2];
OdometrieData(odo);
LineData(line);
bat=Batterie();
ports[0]=256*PINB+PINC;
ports[1]=256*PINC+PIND;
zufall=~alter_zufall^odo[0]^odo[1]^line[0]^line[1]^bat^ports[0]^ports[1]^TCNT2;
alter_zufall=zufall;
while(zufall>=bereich) zufall-=bereich;
return(zufall);
}
int main(void)
{
Init();
for(i=0; i<max; i++) zahlen[i]=0;
SerWrite("\n\rZufallszahlen mit dem asuro\n\n\r", 32);
while(1)
{
i=versuche;
while(i-- && ++zahlen[rnd(max)]); // Zufallswerte einlesen (0 bei Überlauf!)
SerWrite("\n\rVerteilung nach ", 18);
PrintInt(versuche);
SerWrite(" Versuchen mit Maxwert ", 23);
PrintInt(max);
SerWrite(":\n\n\r", 4);
for(i=0; i<max; i++) // Verteilung der Werte ausgeben
{
PrintInt(i);
if(balken==1) for(j=0; j<zahlen[i]; j++) SerWrite(".",1);
SerWrite(" ", 1);
PrintInt(zahlen[i]);
SerWrite("\n\r", 2);
}
while(1);
}
return(0);
}
Es funktioniert leidlich ;)
Gruß
mic
Lesezeichen