- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 18

Thema: Probleme bei Programmierung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    27.12.2010
    Beiträge
    22

    Probleme bei Programmierung

    Hi Leute,
    ich hab mich mal wieder an meinen NIBO2 gewagt um etwas zu programmieren.
    Das Programm, soll den Nibo solange geradeaus fahren lassen, bis der Wert des copro_distance[2] größer als 3 wird.
    Aber, der Motor schaltet irgendwie nicht ab. (letztendlich geht es nur um den unteren teil des Programms).
    Code:
    #include <nibo/niboconfig.h>
    #include <nibo/display.h>
    #include <nibo/gfx.h>
    #include <nibo/copro.h>
    #include <nibo/delay.h>
    #include <nibo/iodefs.h>
    #include <nibo/bot.h>
    #include <avr/interrupt.h>
    #include <nibo/spi.h>
    #include <stdio.h>
    #include <nibo/leds.h>
    #include <stdint.h>
    #include <nibo/pwm.h>
    
    
    
    int main() {
    sei();
    bot_init();
    spi_init();
    display_init();
    leds_init ();
    pwm_init ();
    //-------------------------------------------------------
    copro_ir_startMeasure();
    
    
    //-------------------------------------------------------
    leds_set_headlights (1024);                                        //Frontlicht setzen
    leds_set_status(LEDS_GREEN, 2);
    leds_set_status(LEDS_GREEN, 3);
    //-------------------------------------------------------
    
    void blinker_links () {                                            // Blinker Links definieren
    int a = 1;
    while (a<=10){
    leds_set_status (LEDS_ORANGE, 0);
    leds_set_status (LEDS_ORANGE, 1);
    delay (100);
    leds_set_status (LEDS_OFF, 0);
    leds_set_status (LEDS_OFF, 1);
    delay (100);
    a++;
    }
    }
    //-------------------------------------------------------
    void blinker_rechts () {
    int b = 1;
    while(b<=10)                                                    // Blinker Rechts definieren
    {
    leds_set_status (LEDS_ORANGE, 4);
    leds_set_status (LEDS_ORANGE, 5);
    delay (100);
    leds_set_status (LEDS_OFF, 4);
    leds_set_status (LEDS_OFF, 5);
    delay (100);
    b++;
    }
    }
    //-------------------------------------------------------
    void warnblinker () {
    int c = 1;
    while(c<=10)                                                    // Warnblinker definieren
    {
    leds_set_status (LEDS_ORANGE, 0);
    leds_set_status (LEDS_ORANGE, 1);
    leds_set_status (LEDS_ORANGE, 4);
    leds_set_status (LEDS_ORANGE, 5);
    delay (100);
    leds_set_status (LEDS_OFF, 0);
    leds_set_status (LEDS_OFF, 1);
    leds_set_status (LEDS_OFF, 4);
    leds_set_status (LEDS_OFF, 5);
    delay (100);
    c++;
    }
    }
    //-------------------------------------------------------        
    copro_ir_startMeasure();
    copro_setSpeedParameters(5, 6, 7);
    
    
    void motor_geradeaus (){
    while(1==1){
    copro_setSpeed(20, 20);
    }
    }
    //-------------------------------------------------------
    
    while(1==1){
    delay(10);
    char text[20]="-- -- -- -- --";
    // Co-Prozessor
    if (copro_update()) {
    sprintf(text, "x x x x x",
    (uint16_t)copro_distance[0]/256,
    (uint16_t)copro_distance[1]/256,
    (uint16_t)copro_distance[2]/256,
    (uint16_t)copro_distance[3]/256,
    (uint16_t)copro_distance[4]/256);
    
    
    while(copro_distance[2]<3){
    motor_geradeaus ();
    }
    }
    }
    return 0;
    }
    mfg freekwave

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ich kenn den NIBO2 zwar nicht aber die Programmiersprache ist ja C und du hast in dem Teil wo der Motor gesteuert wird folgendes stehen:

    while(1==1){
    copro_setSpeed(20, 20);
    }

    Die Schleife wird solange ausgeführt wie 1 = 1 ist, also die Bedingung wahr ist. Da 1 ein fester Wert ist und du nicht z.B. geschrieben hast Variable = 1, ändert sich dieser Wert im laufenden Programm nie und der Controller hängt quasi in einer Endlosschleife fest wo er den Befehl:

    copro_setSpeed(20, 20);

    andauernd ausführt.
    Den selben Fehler hast du auch in dem Programmteil unter dem Motorteil gemacht, nur dieser Fehler macht sich noch(!) nicht bemerkbar, weil der Controller halt wie gesagt schon vorher in einer Endlosschleife festhängt.
    Wenn du das korrigierst sollte es eigentlich funktionieren
    Hier steht das nochmal auf Seite 12 erklärt:

    http://download.nicai-systems.com/ni...l_20110909.pdf
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    27.12.2010
    Beiträge
    22
    leider nicht, ich habe die zwei besagten while schleifen rausgenommen, aber es funktioniert iwi immoment komplett nicht. d.h. die Motoren gehen nach den einschalten sofort an, egal ob vor den Sensoren etwas ist oder nicht.

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hast du den auch mal die Werte aus diesem Befehl entfernt:

    while(1==1){
    copro_setSpeed(20, 20);
    }

    ?
    Du musst die Werte denk ich mal auch aus dem Befehl löschen also z.B. wenn ein Hinderniss erkannt wird die Werte von 20 auf 0 umändern. Du hast ja in deinem Programm keine Bedingung unter welcher dieser Befehl ausgeführt werden soll. Da steht einfach nur das die Motoren sich mit einem Speed von 20, 20 drehen sollen und nicht

    if(Bedingung)
    {
    Motor soll sich drehen
    }

    Wie gesagt ich kenn deinen Bot nicht und kann es leider auch nicht testen aber die Tatsache das sich die Motoren drehen deutet ja darauf hin das dieser Befehl andauernd ausgeführt wird. Was du machen könntest ist erstmal alles unnötige ausklammern und dann mit einfachen Print-Befehlen eine Art Debug-Schnittstelle zu machen, also das du nach jedem

    copro_setSpeed(20, 20);

    eine Ausgabe über UART machst. So siehst du wann der Befehl ausgeführt wird und ob der Befehl die ganze Zeit ausgeführt wird.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    30.11.2009
    Ort
    Gütersloh
    Beiträge
    46
    Um die Motoren zu stoppen ist lediglich ein _copro_stopImmediate();_ nötig.

  6. #6
    Hero_123
    Gast
    Hallo freekwave

    1.) "copro_setSpeed(20,20)" heißt, dass der NIBO2 mit ca 7cm/s (linkes Rad, rechtes Rad) fahren soll - und das macht er, bis er entweder einen Stopp-Befehl erhält oder man die Speed ("copro_setSpeed(0,0)" auf NULL setzt.
    2.) Ich habe mir mal kurz Dein Programm angesehen - man sollte in der main keine Funktionen deklarieren, sondern sie nur verwenden; die Deklaration sollte außerhalbe der main erfolgen
    3.) mit while(1==1) in einer Funktion zu arbeiten ist sehr gefährlich, da gibt es keine Abbruchbedingung => wird IMMER WEITER durchgeführt
    4.) "while(copro_distance[2]<3){ motor_geradeaus (); }" => das fkt so nicht, denn: solange der Abstand < 3 ist, soll der NIBO geradeaus fahren => Du liest aber in der while-schleife NIE den neuen Abstand ein(copro_update!!)

    mfg


    Hero_123


Ähnliche Themen

  1. Probleme mit der Asuro Programmierung...:(
    Von RobinHood im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 10.04.2010, 15:30
  2. Probleme bei Programmierung des Atmege32
    Von Daniel1979 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 01.04.2008, 15:29
  3. Probleme bei AVR Butterfly-Programmierung
    Von Youngtimer im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 21.11.2007, 18:01
  4. tiny13 Probleme mit Programmierung
    Von gulliver im Forum Assembler-Programmierung
    Antworten: 13
    Letzter Beitrag: 07.10.2007, 22:19
  5. Probleme mit IR/RC5 Programmierung
    Von Lutz im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 8
    Letzter Beitrag: 09.03.2005, 17:31

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad