- Labornetzteil AliExpress         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 34

Thema: Mein erstes Prog mit ASURO

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    16.03.2008
    Beiträge
    44
    Anzeige

    Powerstation Test
    Das ist der Code:

    Code:
    #include "asuro.h" 
    
    int main(void) 
    { 
       unsigned char taster; 
       char i; 
       Init(); 
       while(1){ 
       taster = PollSwitch(); 
        
            if (taster==0) 
         { 
    		SerWrite("if\n"); 
            MotorDir(FWD,FWD); 
            MotorSpeed (120,120); 
            BackLED(ON,OFF); 
         } 
            else if (taster<5)
         { 
    	    SerWrite("else if\n");
            MotorDir(RWD,RWD); 
            MotorSpeed(0,120); 
            BackLED(OFF,ON);
    	    while (1);
          } 
    		else if (taster>5)
    	  { 
    		
    	    SerWrite("else\n");
    	    MotorDir(RWD,RWD);
    		MotorSpeed(120,0);
    		BackLED(ON,ON);
    		while (1)
    	  }
    		
    	
       } 
       
    }
    muss ich sonnst noch was ändern?

    "das problem ist, dass du PollSwitch() nur einmal abfragst. die funktion ist sehr fehlerhaft, du solltest sie wie weiter oben beschrieben immer merhfach kurz hinterienander abfragen bevor du den wert benutzt."
    von dalmator.

    Wie ist das gemeint??

    ich denke damit hängt dann auch zusammen, das mein Asuro auch mal einfach so nach hinten fährt oder? wie sollte dann der code aussehen?

  2. #22
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    der fehler ist doch gut beschrieben:
    test.c:13: error: too few arguments to function `SerWrite'
    in der datei test.c, zeile 13, sind in der funktion SerWrite zu wenig argumente.
    wenn du in der anleitung nachschaust, siehst du dass serwrite nicht nur den zu sendenden text, sondern auch die länge des textes haben will.

    wenn pollswitch nur einmal aufgerufen wird, werden häufig falsche werte ausgegeben. deshalb solltest du pollswitch mehrfach aufrufen, bevor du den wert verwendest.

    da häufig falsche werte ausgegeben werden, fährt der asuro auch schnell mal rückwärts.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    32
    Beiträge
    239
    das mit dem doppelten Aufruf von PollSwitch() war so gemeint:
    Code:
    t1=PollSwitch();       //Tasterabfrage 2mal aufrufen
    t2=PollSwitch();       //und getrennt speicher
    
    if(t1==t2)             //nur wenn PollSwitch() 2mal den selben Wert 
    {                         //liefert wird hier fortgesetzt
       if(t1==0)
       {
             //hier der Code zum Vorwärtsfahren
        }
        else
        {
             //hier der Code zum Rückwärtsfahren
        }
    }

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    16.03.2008
    Beiträge
    44
    danke, sehr verständlich!

  5. #25
    Benutzer Stammmitglied
    Registriert seit
    16.03.2008
    Beiträge
    44
    jetzt klapt alles bis auf SerWrite da kommt, ich hätte zu wenig argumente aber auch wenn ich als zahl dahinter schreibe als ich buchstaben habe gehts nicht...
    wiso??

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    unsigned char t1;
    unsigned char t2;
    	Init();
    
    //SerWrite("Das Programm beginnt!\n,22");
    while(1)
    {
    	t1=PollSwitch();       //Tasterabfrage 2mal aufrufen 
    	t2=PollSwitch();//und getrennt speicher 
    if(t1==t2)             //nur wenn PollSwitch() 2mal den selben Wert 
    {						//liefert wird hier fortgesetzt 
       if(t1==0) 
        { 
    //        SerWrite("Noch kein Taster\n,16");
    		FrontLED(ON);
    		MotorDir(FWD,FWD);
    		MotorSpeed(123,120);
        } 
        else 
        { 
    	while(1)
    	{
    //      SerWrite("Taster wurde betätigt!\n,22");
    		BackLED(ON,ON);
    		MotorDir(RWD,RWD);
    		MotorSpeed(129,120);
    	}
    	}
    }
    else
    {
    FrontLED(ON);
    BackLED(ON,ON);
    //SerWrite("Taster gedrückt!\n,16");
    }
    } 
    }

  6. #26
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    32
    Beiträge
    239
    1. die Anzahl der Zeichen (16) muss nach dem abschließenden " stehen
    2. glaube ich, dass '\n' auch als Zeichen zählt. dann zähle ich 17 (hier bin ich mir aber nicht ganz sicher, da ich diese Funktion selten verwende)

    versuch es mal so: SerWrite("Taster gedrückt!\n",17);

    aber wie gesagt bei der anzahl bin ich mir nicht ganz sicher

  7. #27
    Benutzer Stammmitglied
    Registriert seit
    16.03.2008
    Beiträge
    44
    danke, jetzt gehts.

    Hat jemand von euch einen guten Link zum Thema Odemerie-Programmierung?
    In der Anleitung steht nichts und durch die Such funktion habe ich nichts gefunden!
    aber ich denke es sollte doch mindestens einen Treat dazu geben oder?

  8. #28
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Es gibt natürlich schon jede Menge Threads zum Thema Odometrie. Im Wesentlichen funktioniert das so: Die kleinen LEDs leuchten auf die Codescheiben, die Fototransistoren ändern ihren Widerstand durch das reflektierte Licht und am Pin des Mega8 liegt eine Spannung die der Helligkeit entspricht. Mit der Funktion OdometrieData() kann man diese Spannung digitalisieren, der gemessene Wert kann dann zwischen 0 und 1023 liegen (Maxwerte die in der Praxis nicht erreicht werden!).

    Um den Weg zu messen den ein Rad zurücklegt zählt man die Hell-/Dunkelwechsel. Dazu ist es hilfreich, wenn man die minimalen und maximalen Werte kennt. Man kann dann z.b. auf diese Werte prüfen, die Flanken erkennen, Fehlmessungen ausfiltern.

    Erste Hürde: serWrite() kann keine Werte ausgeben. Hier eine Möglichkeit die mit der orginalen CD-Library (asuro.c) funktioniert:
    Code:
       void PrintChar(unsigned char x) 
       { 
          unsigned char einer, zehner, huni; 
          char s[3]="hze"; 
          einer=x%10; 
          zehner=(x-einer)/10; 
          huni=(x-(zehner*10+einer))/100; 
          s[0]=huni+'0'; 
           s[1]=zehner+'0'; 
          s[2]=einer+'0'; 
          SerWrite(s,3); 
       }
    (Aus: https://www.roboternetz.de/phpBB2/ze...ag.php?t=35598)

    Nächstes Problem: Werte werden durch Fremdlicht beeinflußt, Codescheiben wanderen axial.

    Ich empfehle dir, erstmal etwas zu experimentieren um eigene Erfahrungen zu sammeln. Das ist spannender und lehrreicher als fertige Lösungen nachzumachen...

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #29
    Benutzer Stammmitglied
    Registriert seit
    16.03.2008
    Beiträge
    44
    ja klar, deshalb habe ich ja auch Asuro um zu testen und Forschen, sonnst wäre das ja langweilig!

    Danke, ich werde es versuchen!

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    16.03.2008
    Beiträge
    44
    hallo schon wieder.

    ich habe jetzt das linienverfolgungs Prog abgeschlossen und wollte mich jetzt der Odemerie "opfern"^^...

    Als test habe ich mal das Prog von oben laufen lassen, aber es kommt keine Ausgabe übers IF es leuchtet nur die LED rot!

    wo liegt das Problem?

    Code:
    #include "asuro.h"
    int main (void)
    {
    Init();
    FrontLED(ON);
       void PrintChar(unsigned char x) 
       { 
          unsigned char einer, zehner, huni; 
          char s[3]="hze"; 
          einer=x%10; 
          zehner=(x-einer)/10; 
          huni=(x-(zehner*10+einer))/100; 
          s[0]=huni+'0'; 
           s[1]=zehner+'0'; 
          s[2]=einer+'0'; 
          SerWrite(s,3); 
       }
    }

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests