RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBObee Rand() Funktion Nibobee

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 7433 private projects
  • 378 public projects
  • 16179466 lines compiled
  • 58199 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1
  • 2

THEMA: Rand() Funktion Nibobee

Rand() Funktion Nibobee 11 Jahre 11 Monate her #1079

  • Nitrama
  • Nitramas Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 10
Hey,

also ich möchte bei meinem Nibo die Rand() Funktion verwennden von C.

aber es kommt immer die Fehlermeldung.

main.c:123: warning: implicit declaration of function 'rand'


was bedeuted das?


Hier der Kommplette Quellcode
Warnung: Spoiler! [ Zum Anzeigen klicken ]

Gruß Nitrama
Letzte Änderung: 11 Jahre 11 Monate her von Nitrama.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Rand() Funktion Nibobee 11 Jahre 11 Monate her #1082

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Versuch mal Google "AVR rand();

Du müsstest noch ein #include <stdlib.h> einfügen, wo all die anderen #includes stehen, und mit einer funktion srand() muß der Zufall erstmal initialisiert werden.
Die explicit declaration heisst soviel wie "warum soll ich hier eine unbekannte Funktion aufrufen", dann ist die Funktion entweder falsch getippt oder es fehlt die Headerdatei, mit dem prototypen der Funkion.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Rand() Funktion Nibobee 11 Jahre 11 Monate her #1083

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 573
Wobei immer noch ein Problem bleibt: Der Zufallszahlengenerator sollte mit einer Zufallszahl initialisiert werden :woohoo:

Da wir einen Roboter mit Sensoren haben, können wir uns den Zufall aus der Umwelt holen! Einfach alle Werte der Analogeingänge (Bodensensoren etc...) aufeinanderaddieren und damit den Generator initialisieren:
  uint16_t zufall = 0;
  for (uint8_t i=ANALOG_EXT0; i<=ANALOG_R1; i++) {
    zufall += analog_getValue(i);
  }
  srand(zufall);
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Rand() Funktion Nibobee 11 Jahre 11 Monate her #1084

  • Nitrama
  • Nitramas Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 10
wenn ich das genau so einfüge in meinen Quellcode dann Funktioniert das?

Kann ich da jetzt die Rand() funktion benutzen?
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Rand() Funktion Nibobee 11 Jahre 11 Monate her #1086

  • Nitrama
  • Nitramas Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 10
so Habs Hinbekommen vllt interresiert es ja jemmand
#include <nibobee/iodefs.h>
#include <nibobee/sens.h>
#include <nibobee/motpwm.h>
#include <nibobee/motpid.h>
#include <nibobee/analog.h>
#include <nibobee/led.h>
#include <nibobee/delay.h>
#include <nibobee/clock.h>
#include <nibobee/odometry.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>

 
 
 
int main() {
motpwm_init();
sens_init();
analog_init();
int8_t matrix=0;
uint8_t toggle;
int16_t lval, rval;
int16_t speed_l=0;
int16_t speed_r=0;
uint16_t zufall = 0, random = 0;
 
activate_output_group(IO_LEDS);  // LED bits als Output
  activate_output_groupbit(IO_EXT, 2);
  activate_output_groupbit(IO_EXT, 3);
 
  led_set(LED_L_RD, 1);    
  led_set(LED_R_RD, 1);
  _delay_ms(700);
  led_set(LED_L_YE, 1);
  led_set(LED_R_YE, 1);
  _delay_ms(700);
 
  led_set(LED_L_RD, 0);    
  led_set(LED_R_RD, 0);
  led_set(LED_L_YE, 0);
  led_set(LED_R_YE, 0);
  _delay_ms(700);
  led_set(LED_L_RD, 1);    
  led_set(LED_R_RD, 1);
  led_set(LED_L_YE, 1);
  led_set(LED_R_YE, 1);
    _delay_ms(300);
  led_set(LED_L_RD, 0);    
  led_set(LED_R_RD, 0);
  led_set(LED_L_YE, 0);
  led_set(LED_R_YE, 0);
 
while(1==1) {
    enable_interrupts();
    sei();
 
    // IR LEDs einschalten  
    clear_output_groupbit(IO_EXT, 2);
    clear_output_groupbit(IO_EXT, 3);
    _delay_ms(10);
 
    // Werte links und rechts messen
    lval = analog_getValue(ANALOG_EXT2);
    rval = analog_getValue(ANALOG_EXT3);
 
    // IR LEDs ausschalten
    set_output_groupbit(IO_EXT, 2);
    set_output_groupbit(IO_EXT, 3);
    _delay_ms(10);
 
    // Werte links und rechts messen und von vorherigem Ergebnis abziehen,
    // damit das Umgebungslicht rausgerechnet wird!
    lval -= analog_getValue(ANALOG_EXT2);
    rval -= analog_getValue(ANALOG_EXT3);
 
    if ((rval > 10) && (lval > 10)) {
    speed_l = -600;
    speed_r = -600;
    led_set(LED_L_YE, 1);
    led_set(LED_R_YE, 1);
    matrix = 1;
    }
 
    else if ((rval && lval > 8) && (rval > lval)) {
    speed_l = -600;
    speed_r = 0;
    led_set(LED_R_YE, 1);
    matrix = 1;
    }
 
    else if ((rval && lval > 8) && (rval < lval)) {
    speed_l = 0;
    speed_r = -600;
    led_set(LED_L_YE, 1);
    matrix = 1;
    }
 
    else if ((sens_getRight() != 0 ) && (sens_getLeft() != 0 )){
    speed_l = -600;
    speed_r = -600;
    led_set(LED_R_RD, 1);
    led_set(LED_L_RD, 1);
    matrix = 1;
    }
 
    else if (sens_getRight() != 0 ) {
    speed_l = -600;
    speed_r = -300;
    led_set(LED_R_RD, 1);
    matrix = 1;
    }
 
    else if (sens_getLeft() != 0 ) {
    speed_r = -600;
    speed_l = -400;
    led_set(LED_L_RD, 1);
    matrix = 1;
    }
    else {speed_l = 600; speed_r = 600;}
 
motpwm_setLeft(speed_l);
motpwm_setRight(speed_r);
if (matrix == 1){
matrix = 0;
zufall = 0;
  zufall = sens_getLeft() + sens_getRight() + rval + lval;
srand(zufall);
random =  rand() % 1001 ;
delay (random);
    led_set(LED_L_YE, 0);
    led_set(LED_R_YE, 0);
    led_set(LED_L_RD, 0);
    led_set(LED_R_RD, 0);
}
}
return 0;
}

Gruß Nitrama
Letzte Änderung: 11 Jahre 11 Monate her von Nitrama.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Rand() Funktion Nibobee 11 Jahre 11 Monate her #1088

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Ich finde das interessant, weil ich mir vorstellen kann nach einem Ausweichmanöver eine zufällige neue Richtung einzuschlagen. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
  • Seite:
  • 1
  • 2
Ladezeit der Seite: 0.166 Sekunden

Werbung