Unterprogramme mit random() aufrufen

Hallo zusammen.

Ist es möglich ein unterprogramm mit der funktion random() zufällig auf zu rufen?

grob nach dem prinzip

... zahl = random(1,5); zufall zahl ; ...

void zufall1() { } void zufall2() { } void zufall3() { } ...

So wie von dir angedacht geht das nicht, du kannst aber über switch/case-Anweisungen entsprechende Zufallsfunktionen abhängig von deiner Zufallszahl aufrufen.

hi,

nie probiert, weil nicht gebraucht, aber ginge das nicht über ein array von funktionszeigern?

gruß stefan

Ja, Arrays aus Funktionszeigern sind für sowas sehr schön. Vor allem für faule Leute, da switch/case bei vielen Funktionen schnell in Arbeit ausarten. Aber man muss mit dem Index sehr gut aufpassen (!!)

typedef void(*funcPtr)(void);
funcPtr functions[] = { func1, func2, func3, func4 };
const int NUMBER_OF_FUNCTIONS = sizeof(functions) / sizeof(functions[0]);

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  long rnd = random(0, NUMBER_OF_FUNCTIONS);
  functions[rnd]();

  delay(700);
}

void func1()
{
  Serial.println("Func 1");
}

void func2()
{
  Serial.println("Func 2");
}

void func3()
{
  Serial.println("Func 3");
}

void func4()
{
  Serial.println("Func 4");
}

Die obere Grenze von random() ist exklusiv. Also übergibt man NUMBER_OF_FUNCTIONS und es geht automatisch bis NUMBER_OF_FUNCTIONS - 1

Man muss dann nur seine Funktionen in das Array eintragen und der Rest skaliert automatisch :)

schm4nd:
Ist es möglich …

Man kann das zwar mit einem Array von Funktionszeigern erreichen, aber einfacher und nachvollziehbarer ist das IMO mit einer switch()-Konstruktion.

Ungefähr so:

uint8_t bla=random(1,3);

switch(bla)
{
  case 1: blubb(); break;
  case 2: foo(); break;
  case 3: bar(); break;
}

Gruß

Gregor

okay danke für die antworten :)

stehen eigtl noch die servo.h und die newping.h libs in konflikt?

hi,

einfacher und nachvollziehbarer

na klar, und ich würde es auch so machen (außer ich hab' abenteuerlaune). aber er hat danach gefragt...

gruß stefan

jo, habe es jetzt mit der switch case lösung geregelt.

schm4nd: stehen eigtl noch die servo.h und die newping.h libs in konflikt?

jo, habe es jetzt mit der switch case lösung geregelt.

Vernünftig.

Dann kannst du ja für andere Fragen einen neuen Thread mit passendem Titel und deinen bisherigen Ergebnissen aufmachen ;)