- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 5 von 5 ErsteErste ... 345
Ergebnis 41 bis 44 von 44

Thema: Problem beim Flashen

  1. #41
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Anzeige

    Powerstation Test
    Zitat Zitat von isor
    Ich arbeite grade schon an der Odometrie.
    Achte darauf das odometrie nicht gleichzeitig benutzt werden kan mit leuchten von den backleds. Die odometriescheiben beleuchtung geht dan aus und die swärz/weiss ubergangen werden dan möglich niet richtig erkannt.

  2. #42
    Neuer Benutzer Öfters hier
    Registriert seit
    22.10.2009
    Beiträge
    28
    hey junges ihr könnt mir doch garantiert helfen, also wie bereits beschrieben versuche ich mich grade an Odometrie.
    dazu hab ich mir nenn Quellcode aus dem netzt geholt, der funktioniert auch aber wenn ich denn so veränder das ich den als extra Funktion verwenden kann (func Drehzahl) fährt der asuro nicht mehr grade aus sonder so wie immer im Kreis.
    Ich hätte den Quellcode auch eig. lieber ohne globale variablen aber ich weis nicht mehr wie man 2 Werte aus einer Funktion zurück gibt, also wen das schon mal jemand weiß würde ich mich auch schon freuen.
    ich hoffe ihr könnt mir weiter helfen.^^

    Quellcode aus dem netzt:
    Code:
    #include "asuro.h"
    // Schwellwert für die Hell/Dunkel-Unterscheidung
    // Eventuell muss damit etwas variiert werden
    #define TRIGGERLEVEL 600
    #define HYSTERESIS 10
    #define LOW 0
    #define HIGH 1
    
    int main(void)
    {
    int iSpeed = 120;
    unsigned int data[2];
    signed int status[2]={0,0};
    signed int difference=0;
    Init();
    MotorDir(FWD, FWD);
    while(1) {
    // Helligkeitswerte der Lichtschranken auslesen
    OdometrieData(data);
    // Wechsel linker Sensor von niedrig auf hoch?
    if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
    status[0]=HIGH;
    difference++;
    }
    // Wechsel linker Sensor von hoch auf niedrig?
    if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
    status[0]=LOW;
    difference++;
    }
    // Wechsel rechter Sensor von niedrig auf hoch?
    if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
    status[1]=HIGH;
    difference--;
    }
    // Wechsel rechter Sensor von hoch auf niedrig?
    if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
    status[1]=LOW;
    difference--;
    }
    // zur Sicherheit: verhindern, dass der Differenzz�ler
    // den erlaubten Wertebereich verl�st
    if (difference<-iSpeed) difference=-iSpeed;
    if (difference>iSpeed) difference=iSpeed;
    
    // Status-LED noch entsprechend der erkannten Segmente
    // aufleuchten lassen, grn fr links, rot fr rechts
    StatusLED(status[0]+status[1]*2);
    
    // Z�ldifferenz passend auf die Motoren verteilen
    if (difference>0) MotorSpeed(iSpeed-difference,iSpeed);
    else MotorSpeed(iSpeed,iSpeed+difference);
    
    }
    return 0;
    }
    mein veränderter Quellcode:
    Code:
    #include "asuro.h"
    #define TRIGGERLEVEL 600
    #define HYSTERESIS 10
    #define LOW 0
    #define HIGH 1
    
    int iaSpeed[2]={120,120};
    
    int main()
    {
        BackLED(OFF,OFF);
        Init();
        while(1)
        {
            MotorFWD();
        }
    }
    
     void MotorFWD(void)
    {
         MotorDir(FWD,FWD);
         drehzahl(120,120);
         MotorSpeed(iaSpeed[0],iaSpeed[1]);
    
         FrontLED(ON);
         return 0;
      }
    
    int drehzahl(int iSpeed_left,int iSpeed_right)
    {
    unsigned int data[2];
    signed int status[2]={0,0};
    signed int difference=0;
    
    // Helligkeitswerte der Lichtschranken auslesen
    OdometrieData(data);
    // Wechsel linker Sensor von niedrig auf hoch?
    if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
    status[0]=HIGH;
    difference++;
    }
    // Wechsel linker Sensor von hoch auf niedrig?
    if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
    status[0]=LOW;
    difference++;
    }
    // Wechsel rechter Sensor von niedrig auf hoch?
    if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
    status[1]=HIGH;
    difference--;
    }
    // Wechsel rechter Sensor von hoch auf niedrig?
    if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
    status[1]=LOW;
    difference--;
    }
    // zur Sicherheit: verhindern, dass der Differenzz�ler
    // den erlaubten Wertebereich verl�st
    if (difference<-255) difference=-255;
    if (difference>255) difference=255;
    
    // Status-LED noch entsprechend der erkannten Segmente
    // aufleuchten lassen, grn fr links, rot fr rechts
    //StatusLED(status[0]+status[1]*2);
    
    // Z�ldifferenz passend auf die Motoren verteilen
    if (difference>0) iSpeed_left-difference;
    else iSpeed_right+difference;
    
    
    iaSpeed[0] = iSpeed_left;
    iaSpeed[1] = iSpeed_right;
    
    return 0;
    }

  3. #43
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    deine code:

    // Z�ldifferenz passend auf die Motoren verteilen
    if (difference>0) iSpeed_left-difference;
    else iSpeed_right+difference;
    Hier passiert nichts! Dort wird nur eine summe/differenz gemacht. Aber die iSpeed_left und iSpeed_right variabelen werden damit nicht geändert.

    Mache das mit:

    iSpeed_left-=difference; /* nehm difference ab von iSpeed_left */
    iSpeed_right+=difference; /* addiere difference zu iSpeed_right */

  4. #44
    Neuer Benutzer Öfters hier
    Registriert seit
    22.10.2009
    Beiträge
    28
    jo danke hab ich ganz vergessen

Seite 5 von 5 ErsteErste ... 345

Berechtigungen

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

Solar Speicher und Akkus Tests