-         

Ergebnis 1 bis 5 von 5

Thema: [Gelöst] NIBObee Zufallszahlen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2009
    Beiträge
    28

    [Gelöst] NIBObee Zufallszahlen

    Anzeige

    Hallo,

    ich versuche gerade die LEDs zufällig blinken zu lassen. Im Internet habe ich dazu einen Code für Zufallszahlen gefunden.

    Code:
    int irand( int a, int e)
    {
        a=1;
    	e=2000;
        double r = e - a + 1;
        return a + (int)(r * rand()/(RAND_MAX+1.0));
    
    }
    Wenn ich diesen Code jedoch in mein Programm einbaue, dann blinkt die LED nicht zufällig, sondern in einem festen Rythmus, wie ein normales Blinklicht.

    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/led.h>
    #include <nibobee/delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
    led_init();
    
    while(1==1)
    {
    
    int irand( int a, int e)
    {
        a=1;
        e=2000;
        double r = e - a + 1;
        return a + (int)(r * rand()/(RAND_MAX+1.0));
    
    }
    
    
    led_set(LED_L_RD, 1);
    delay(irand);
    led_set(LED_L_RD, 0);
    delay(irand);
    
    
    }
    return 0;
    }
    Weiß jemand wo der Fehler liegt?

    Viele Grüße,
    Manuel

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.05.2007
    Beiträge
    99
    Nur mit Mühe bekommt man im Voraus raus an welcher konstanten Adresse ein C-Compiler/Linker eine C-Funktion abspeichert.

    Später, im laufenden Programm, bekommt man diese konstante Adresse einfach geliefert. Beispiel:
    delay(irand );

    Möchtest Du einen überraschenden Funktionswert (diesmal nicht die Adresse) nutzen schreibt man:
    delay(irand() );

    Möchtest Du den Funktionswert für Deine geplanten Parameter haben schreibt man:
    delay(irand(3, 100) );

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2009
    Beiträge
    28
    Danke,
    das funktioniert jetzt.
    Jetzt noch eine zweite Frage:
    Ich will mehrere (alle) LEDs gleichzeitig zufällig blinken lassen. Wenn ich jedoch in diesen Code einfach alle LEDs einfüge, dann arbeitet er sie einzeln ab und es sieht nach einem Wechselblinker aus. Geht das, dass man alle gleichzeitig zufällig blinken lässt (Abstand dazwischen nicht länger als 200-250ms)?

    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/led.h>
    #include <nibobee/delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
    led_init();
    
    while(1==1)
    {
    
    int irand(int a, int e)
    {
        double r = e - a + 1;
        return a + (int)(r * rand()/(RAND_MAX+1.0));
    
    } 
    
    led_set(LED_L_RD, 1);
    delay(irand(50,250));
    led_set(LED_L_RD, 0);
    delay(irand(50,250));
    
    led_set(LED_L_YE, 1);
    delay(irand(50,250));
    led_set(LED_L_YE, 0);
    delay(irand(50,250));
    
    }
    return 0;
    }
    Viele Grüße,
    Manuel

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.05.2007
    Beiträge
    99
    Dazu muss man sich gedanklich anders aufstellen. Hier eine von vielen Möglichkeiten:
    Code:
    int rd0=0, rd1=0, ye0=0, ye1=0;
    int i=0;
    for(i=0; ;i++) {
      if(i==rd1) { rd0=i+irand(50, 250); led_set(LED_L_RD, 1); };
      if(i==rd0) { rd1=i+irand(50, 250); led_set(LED_L_RD, 0); };
      if(i==ye1) { ye0=i+irand(50, 250); led_set(LED_L_YE, 1); };
      if(i==ye0) { ye1=i+irand(50, 250); led_set(LED_L_YE, 0); };
      delay(1);
    }

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    15.12.2009
    Beiträge
    28
    Danke,
    jetzt funktioniert alles so, wie ich es mir vorstelle!

    Viele Grüße,
    Manuel

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •