- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Einsteiger bräuchte kleine Hilfestellung in C für Asuro

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Anzeige

    LiFePo4 Akku selber bauen - Video
    [qoute="Radbruch"]In der asuro-Library wird die interne Variable von Sleep() mit einem Timerinterrupt runtergezählt[/quote]

    Oh, tut mir leid, dass wusste ich nicht, da ich selbst keinen ASUORO habe. Da es meistens durch Runterzählen realsisiert wird, dachte ich, dass es auch beim ASURO zutrifft.

    MfG Mark

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Da es meistens durch Runterzählen realsisiert wird, dachte ich, dass es auch beim ASURO zutrifft.
    Da der asuro die 36kHz für seine IR-Kommunikation erzeugt ist es naheliegend diesen Takt auch für andere Funktionen zu verwenden.

    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!

  3. #13
    Erstmal danke für eure Antworten, das hat mir schon etwas auf die Beine geholfen und ich hab mein erstes selbstgeschriebenes Programm entwickelt...es funktioniert nur leider nicht so ganz, welch Überraschung!

    Code:
    #include "asuro.h"
    
    
    
    
    int main(void)
    {
    int x;			// Motorgeschwindigkeit links //
    int y;			// Motorgeschwindigkeit rechts //
    int l;
    int r;
    int i;
    x = 150;
    y = 150;
    
    Init();
    unsigned int data[2];
    
    // Anfangsmitteilungen //
    SerWrite("\n\r VORWAERTS MEIN KAISER! \n\r",33);
    
    SerWrite("\n\r Volle Kraft Voraus! \n\r",29);
    
    SerWrite("\n\r Mit Synchronisation! \n\r",30);
    // Gerade aus fahren //
    while(1)
    {
    	
    	if(PollSwitch()==0)
    		{
    		OdometrieData(data);
    		BackLED(OFF,OFF);
    		FrontLED(ON);
    		StatusLED(GREEN);
    		MotorDir(FWD,FWD);
    		MotorSpeed(x+l,y+r);
    		}
    		
    	if(data[0]<data[1])
    	{l = 50;}
    	
    	if(data[0]>data[1])
    	{r = 50;}
    	
    	if(data[0]==data[1])
    	{r = 0;}
    	
    	if(data[0] >= 1023)
    	{
    	data[0] = 0;
    	data[1] = 0;
    	}
    	
    		
    	if(PollSwitch()==32)
    	{
    		for(i=0; i<200; i++) Sleep(72);
    			{
    			MotorDir(FWD,RWD);
    			MotorSpeed(170,200);
    			BackLED(ON,ON);
    			StatusLED(YELLOW);
    			FrontLED(OFF);
    			}
    	}
    	
    	if(PollSwitch()==1)
    	{
    		for(i=0; i<200; i++) Sleep(72);
    			{
    			MotorDir(RWD,FWD);
    			MotorSpeed(200,170);
    			BackLED(ON,ON);
    			StatusLED(YELLOW);
    			FrontLED(OFF);
    			}
    	}
    
    	if(PollSwitch()==18)
    	{
    		for(i=0; i<300; i++) Sleep(72);
    			{
    			MotorDir(FWD,RWD);
    			MotorSpeed(170,200);
    			BackLED(ON,ON);
    			StatusLED(YELLOW);
    			FrontLED(OFF);
    			}
    	}
    
    	if(PollSwitch()==12)
    	{
    		for(i=0; i<300; i++) Sleep(72);
    			{
    			MotorDir(FWD,RWD);
    			MotorSpeed(170,200);
    			BackLED(ON,ON);
    			StatusLED(YELLOW);
    			FrontLED(OFF);
    			}
    	}
    
    	if(PollSwitch()==6)
    	{
    		for(i=0; i<350; i++) Sleep(72);
    			{
    			MotorDir(FWD,RWD);
    			MotorSpeed(170,200);
    			BackLED(ON,ON);
    			StatusLED(YELLOW);
    			FrontLED(OFF);
    			}
    	}
    
    if(PollSwitch()==2)
    	{
    		for(i=0; i<200; i++) Sleep(72);
    			{
    			MotorDir(FWD,RWD);
    			MotorSpeed(170,200);
    			BackLED(ON,ON);
    			StatusLED(YELLOW);
    			FrontLED(OFF);
    			}
    	}
    
    if(PollSwitch()==16)
    	{
    		for(i=0; i<200; i++) Sleep(72);
    			{
    			MotorDir(RWD,FWD);
    			MotorSpeed(200,170);
    			BackLED(ON,ON);
    			StatusLED(YELLOW);
    			FrontLED(OFF);
    			}
    	}
    
    
    
    
    
    }
    
    return (0);
    }
    Der Asuro soll also gerade aus fahren, solange keine Taste gedrückt ist, und zwar wirklich GERADE aus! Allerdings gibts da noch Probleme mit der OdometrieData und damit, das ich nicht raffe wie ich sie "zurücksetzen" kann, das was ich da zusammengeschustert habte funzt nich so wirklich glaube ich...

    Dann hab ich noch die Grundroutinen fürs Ausweichen bei Kollisionen reingemacht, funktioniert beim K1 z.b. wunderbar, bei K6 allerdings hängt sich der Asuro auf - hilfe?

    Wär sehr dankbar wenn sich jemand meinen Code mal durchlesen könnte und mir ein paar Tipps gibt!

    Grüße

  4. #14
    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

    Die Werte der Odometrie geben die Helligkeit an mit der die Phototransistoren T11/12 angestrahlt werden. Mit diesen Werten kann der asuro die Segmente auf der Codescheibe unterscheiden und zählen. Ein direkter Vergleich mit z.B. "if(data[0]<data[1]) " bedeutet " links heller als rechts?" (großer Wert bedeutet dunkel) und hat nichts mit der zurückgelegten Wegstrecke zu tun.

    PollSwitch() lügt häufig!

    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!

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Und den odometrie werten sehen aus wie eine sinus kurve. Den linken und rechter seite haben aber unterschiedliche amplituden und mittelwerten. Und das ist auch manchmal abhängich von umgebungslicht wenn die odometrie Sensoren nicht abgeschirmt sind .

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests