- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Wo liegt der Fehler?

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    01.12.2004
    Ort
    Buxtehude
    Beiträge
    70
    Anzeige

    Powerstation Test
    Hallo Julien,
    sieh Dir mal das an:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=7571
    Diese Bibliothek enthält die Funktion PrintInt() für die Ausgabe von Integerwerten beim ASURO. Auch die anderen Erweiterungen sind speziell für Programmieranfänger gedacht.
    Gruß
    Weja

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Klappt doch schonmal super! Vielen Dank!
    Bloß die Timer-Werte stimmen nicht ganz. Wenn ich mit Time() die Zeit in Millisekunden ausgeben lasse, gibt es eine Abweichung. Ich wollte nämlich eine Uhr oder sowas in der Art programmieren doch daraus wird wohl nichts

    MfG julien

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    01.12.2004
    Ort
    Buxtehude
    Beiträge
    70
    Uff. Deine Antwort kommt ja schon nach 16 Monaten. Du nimmst das i mit der Zeit auch njicht so genau. Das ist alles ziemlich lange her. Die Zeitfunktion ist nicht auf Genauigkeit geschrieben. Das müsste man anpassen. Die war eigentlich so gedacht, dass man im Programm kleinere Zeiteinheiten messen kann. Z.B dreh dich 3 Sekunden lang.
    Gruß
    Weja

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Ok, danke für die Info

  5. #15

    Hallo ich hab auch noch ne frage^^

    also ich hab mir den asuro gekauft und in zusammen gebastelt ich bekomme aber kein programm drauf!? leider hab ich auch keine ahnung wie das mit der c programmierung geht^^ alo bitte helf mir

    #include "asuro.h"
    #include "aslib.c"
    int main(void)
    { int diff;
    Init();
    Encoder_Init();
    MotorDir(FWD,FWD);
    MotorSpeed(175,175);
    while(1){
    diff=encoder[RIGHT]-encoder[LEFT]; // diff statt div
    MotorSpeed(175+diff,175-diff);}
    while(1);
    return 0;
    }

    das ist mein programm das ich geschrieben hab aber er spielt es nicht ab


    !!!!!!HILFE!!!!!

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Hallo!
    So viel Ahnung hab ich leider auch nicht, da ich lange nicht mehr in C programmiert habe.aber vielleicht gehts ja so:
    Code:
    #include "asuro.h"
    #include "aslib.c"
    int main(void)
    {
     int diff;
     Init();
     Encoder_Init();
     MotorDir(FWD,FWD);
     MotorSpeed(175,175);
     while(1){
      diff=encoder[RIGHT]-encoder[LEFT]; // diff statt div
      MotorSpeed(175+diff,175-diff);}
     }
    return 0;
    }
    Das while (und return), dass du in der while-Schleife noch mit drin hattest, war zu viel. Da hat sich das dran aufgehängt.

    MfG
    julien

  7. #17
    danke!!!!
    hat auch noch jemand nen fertiges programm wo er z.b. ausweicht wenn er igendwo gegen fährt?

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Ich hatte schonmal vor geraumer Zeit solch ein Programm geschrieben...
    Hier der Quellcode:
    Code:
    //Programm zum Umfahren von Hindernissen mithilfe der Infrarot-Hinderniserkennung von waste
    //zusammengestellt und programmiert von julien
    
    #include "asuro.h" 
    #include <stdlib.h> 
    
    int main(void)
    { 
       float puls;
       unsigned int Rmin = 1024, Rmax = 0, Lmin = 1024, Lmax = 0, Rmitte = 512, Lmitte = 512, lspeed=150, data[2], richt=0, wegr=0, wegl=0, auswl=0, auswr=0, schritt=0, vorhe=0r;  
       unsigned char flagl=FALSE, flagr=FALSE, hindernis=FALSE;
       Init(); 
       DDRD |= (1 << DDD1);      // Port D1 als Ausgang 
       PORTD &= ~(1 << PD1);      // PD1 auf LOW 
       puls = 1; 
       while(1) 
       {
       while(hindernis==FALSE){
          if (PIND & (1 << PD0)){
              StatusLED(GREEN);   // kein Hindernis
    		 } else {
    		 vorher=(int)(puls);
    		 hindernis=TRUE;
    		 StatusLED(RED);      // Hindernis erkannt
    		}
    	 puls = 1.02 * puls;      // Pulsbreite wird um 2% erhöht 
         if (puls > 10){
          if (PIND & (1 << PD0)) hindernis=0;
          puls = 1;
    	  exit;
         }
        OCR2 = 255 - (int)(puls);
       }
       
       if(hindernis==TRUE){ //"gucken", wo noch ein freier Weg ist und diesen dann fahren
       if(schritt==0){ //nach rechts gucken
        MotorDir(FWD,RWD);
        Msleep(500);
       }
       if(schritt==1){ 
        auswr=(int)(puls);
       }
       if(schritt==2){ //nach links gucken
        MotorDir(RWD,FWD);
        Msleep(1000);
       }
       if(schritt==3){
        auswl=(int)(puls);
    	MotorDir(FWD,RWD);
    	Msleep(500);
       }
       if(schritt==4){ //richtigen weg fahren
         if(auswr<vorher) richt=1;
    	 if(auswl<vorher) richt=2;
    	 if(auswr==auswl) richt=3;
    	 hindernis=FALSE;
    	 schritt=0;
    	}
       if(schritt<4) schritt++;
       }
       
       if(hindernis==FALSE){ //kein Hindernis in Sicht - geradeaus fahren
       richt=0;
       schritt=0;
               OdometrieData(data); // 0. links, 1. rechts        
            // max links 
            if (data[0] > Lmax) 
                Lmax += (data[0] - Lmax) / 2; 
            // min links 
            if (data[0] < Lmin) 
                Lmin -= (Lmin - data[0]) / 2; 
            // max rechts 
            if (data[1] > Rmax) 
                Rmax += (data[1] - Rmax) / 2; 
            // min rechts 
            if (data[1] < Rmin) 
                Rmin -= (Rmin - data[1]) / 2; 
        Rmitte=(Rmax+Rmin)/2; 
        Lmitte=(Lmin+Lmax)/2; 
          if ((data[0] < Lmitte) && (flagl == TRUE)) { 
          flagl = FALSE; 
          wegl++; 
          } 
          if ((data[0] > Lmitte) && (flagl == FALSE)) { 
          flagl = TRUE; 
          wegl++; 
          } 
          if ((data[1] < Rmitte) && (flagr == TRUE)) { 
          flagr = FALSE; 
          wegr++; 
          } 
          if ((data[1] > Rmitte) && (flagr == FALSE)) { 
          flagr = TRUE; 
          wegr++; 
          }
    	if(wegl<wegr) lspeed++;
    	if(wegl>wegr) lspeed--;
    	if(wegl>=65000){ wegr=wegr-65000; } //zurücksetzen, damit kein Überlauf nach
    	if(wegr>=65000){ wegl=wegl-65000; } //längeren Fahrten passiert
    	}
    	if(richt==0) MotorDir(FWD,FWD); //geradeaus
        if(richt==1) MotorDir(RWD,FWD); //links
    	if(richt==2) MotorDir(FWD,RWD); //rechts
    	if(richt==3) MotorDir(RWD,RWD); //zurück
        MotorSpeed(lspeed,150);
      }
       return 0; 
    }
    Erklärung: wenn ein Hindernis vor ihm erkannt wird, guckt er nach links und dann nach rechts und ermittelt somit, in welcher richtung das Hindernis entfernter ist. Dann fährt er in diese Richtung. Ist kein Ausweg zu erkennen, fährt er zurück.

    Leider funktioniert es nicht ganz richtig. Deshalb ist es sehr verbesserungswürdig...
    Kann mir bitte jemand bei diversen Verbesserungsarbeiten helfen?

    MfG
    Julien
    http://cap.gediam.de/ - lxde-sid-lite - eine inoffizielle, sidux-basierende Linuxdistribution

  9. #19
    cool danke wenn es immer noch net geht komm ich noch mal auf dich zurück^^

  10. #20
    geht nicht er spielt es einfach net ab kann es sein das ich was falsch mache??

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress