- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 2 von 2

Thema: Programm zur Odometrie

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.11.2005
    Beiträge
    5

    Programm zur Odometrie

    Anzeige

    Powerstation Test
    hallo,zusammen
    zuerst frohe Weihnachten.
    ich habe ein programm zur Messung der Geschwindigkeit bzw. der Winkelgeschwindigkeit der Räder geschrieben.eigentlich wollte ich durch das Terminalprogramm den Wert der Geschwindigkeit bzw. der Winkelgeschwindigkeit der Räder lesen mit Hilfe der Encoder-Funktion.Aber steht in Terminalprogramm immer unbekannte Zeichen.
    kann jemand mir mal helfen?ich brauche die Werte dringend
    #include "asuro.h"

    int fahrgeradeaus(unsigned char MotorDr)
    {
    Encoder_Init();

    int sl=150,sr=150;
    int drehungl,drehungr;
    unsigned char rl,rr,weg,wl,wr;

    Encoder_Set(0,0);
    MotorSpeed(sl,sr);
    MotorDir(MotorDr,MotorDr);

    SerWrite("\n\r encoder links,rechts",23);
    PrintInt(encoder[LEFT]);
    PrintInt(encoder[RIGHT]);



    SerWrite("\n\r spdeed links,rechts",22);
    PrintInt(sl);
    PrintInt(sr);

    drehungl=encoder[LEFT]/(12*5);
    drehungr=encoder[RIGHT]/(12*5);
    rl=drehungl*12;
    rr=drehungr*12;
    weg=(rl+rr)/2;
    wl=sl/1.9;
    wr=sr/1,9;

    SerWrite("\n\r fahrweg",10);
    PrintInt(weg);

    SerWrite("\n\r wl,wr",;
    PrintInt(wl);
    PrintInt(wr);

    if(encoder[RIGHT]<encoder[LEFT])
    {
    if(sr<=254) sr++; else sl--;
    }
    if(encoder[RIGHT]>encoder[LEFT])
    {
    if(sl<=254) sl++; else sr--;
    }
    if(encoder[RIGHT]==encoder[LEFT])
    {
    sl=sr;
    }
    return 0;
    }


    int fahrdrehung( int winkel, unsigned char Dir)
    {
    Encoder_Init();

    int segmentsl=0,segmentsr=0,i;
    int sl=150,sr=150,drehungl,drehungr;
    unsigned char MotorDrl=FWD,MotorDrr=RWD,rl,rr,weg,wl,wr;

    if (winkel == 45)
    {
    segmentsl = 21;
    segmentsr = 21;
    }
    else if (winkel == 90)
    {
    segmentsl = 41;
    segmentsr = 41;
    }
    else if (winkel == 180)
    {
    segmentsl = 82;
    segmentsr = 82;
    }
    else if (winkel == 270)
    {
    segmentsl = 124;
    segmentsr = 124;
    }
    else if (winkel == 360)
    {
    segmentsl = 165;
    segmentsr = 165;
    }
    else
    {
    StatusLED(RED);
    }

    Encoder_Set(0,0);



    if(Dir == RIGHT)
    {
    MotorDrl = FWD;
    MotorDrr = RWD;
    }

    if(Dir == LEFT)
    {
    MotorDrl = RWD;
    MotorDrr = FWD;
    }

    while((encoder[LEFT] < segmentsl) && (encoder[RIGHT] < segmentsr))
    {
    MotorDir(MotorDrl,MotorDrr);
    MotorSpeed(sl,sr);

    if(encoder[LEFT] >= segmentsl)
    {
    sl = 0;
    }

    if(encoder[RIGHT] >= segmentsr)
    {
    sr = 0;
    }

    if(encoder[LEFT]>=segmentsl && encoder[RIGHT] >= segmentsr)
    {
    MotorDir(BREAK, BREAK);
    for(i=0;1<=100;i++) Sleep(255);
    MotorSpeed(0,0);
    }

    SerWrite("\n\r encoder links,rechts",23);
    PrintInt(encoder[LEFT]);
    PrintInt(encoder[RIGHT]);

    SerWrite("\n\r spdeed links,rechts",22);
    PrintInt(sl);
    PrintInt(sr);

    drehungl=encoder[LEFT]/(12*5);
    drehungr=encoder[RIGHT]/(12*5);
    rl=drehungl*12;
    rr=drehungr*12;
    weg=(rl+rr)/2;
    wl=sl/1.9;
    wr=sr/1,9;

    SerWrite("\n\r fahrweg",10);
    PrintInt(weg);

    SerWrite("\n\r wl,wr",;
    PrintInt(wl);
    PrintInt(wr);
    }
    return 0;
    }


    int main(void)
    {
    Init();


    int j;
    unsigned char taste;

    StatusLED(GREEN);


    while(1)
    {
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    fahrgeradeaus(FWD);
    taste = PollSwitch();
    PrintInt(taste);

    if(taste == 0)
    {
    fahrgeradeaus(FWD);
    }
    if (taste > 7 && taste < 60 && taste != 12 && taste != 18 && taste != 30)
    {
    fahrdrehung(45, RIGHT);
    }
    if (taste > 0 && taste <
    {
    fahrdrehung(45, LEFT);
    }
    if (taste == 12 || taste == 18 || taste == 30)
    {
    for(j=0;j<=50;j++)
    {
    fahrgeradeaus(RWD);
    }
    }
    }

    return 0;
    }


    vielen Dank für eure Hilfe
    natalie

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.12.2004
    Ort
    Ulm
    Alter
    37
    Beiträge
    136
    Hallo,

    ich hab jetzt zwar keine Ahnung von C aber oftmals ist der Fehler eine falsch eingestellte Baudrate. Wichtig ist, dass am PC die gleiche Baudrate eingestellt ist wie im Controller.

Berechtigungen

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

12V Akku bauen