- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Problem mit Linienverfolgung

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich hab' das immer mit einem kleinen Testprogramm untersucht, Daten einlesen und zum PC senden, im Stillstand, also ohne Motor. Dann muss man zwar die Linie von Hand bewegen, aber das schadet ja nicht.
    Blöderweise gibts dazu keinen Quellcode mehr, deshalb kann ich dir nur das .hex anbieten. Dafür funktioniert es so mit jeder Version der Lib die du verwendest. Mit K6/K5 kann man die FrontLED ein oder ausschalten. Datei ist im Anhang.

    Mein Kreismessprogramm habe ich aber noch. Kannst du dir ja mal anschauen. Der asuro dreht sich über der Linie und merkt sich die Werte, am Ende sendet er sie dann zum PC:

    Code:
    #include "asuro.h"
    
    #define limit 50
    #define NewLine SerWrite("\n\r",2)
    #define Trenner SerWrite("; ",2)
    
    unsigned int data[2], data_old[2], d_l[limit], d_r[limit], zeiger;
    
    int main( void ){
    
    Init();
    zeiger=0;
    LineData(data_old);
    d_l[zeiger]=data_old[0];
    d_r[zeiger]=data_old[1];
    zeiger++;
    FrontLED(ON);
    Msleep(500);
    MotorDir(BREAK,BREAK);
    MotorSpeed(255,255);
    while(zeiger<limit) {
    	if (zeiger & 1) StatusLED(YELLOW); else StatusLED(RED);
    	MotorDir(FWD,RWD);
    	Msleep(10);
    	MotorDir(FREE,FREE);
    	Msleep(100);
    	LineData(data);
    	if ((data[0]!=data_old[0]) || (data[1]!=data_old[1])) {
    		d_l[zeiger]=data[0];
    		d_r[zeiger]=data[1];
    		data_old[0]=data[0];
    		data_old[1]=data[1];
    		zeiger++;
    	}
    }
    MotorDir(BREAK,BREAK);
    MotorSpeed(0,0);
    FrontLED(OFF);
    Msleep(500);
    while(!PollSwitch()) { StatusLED(GREEN); Msleep(200); StatusLED(OFF); Msleep(600);}
    NewLine; NewLine;
    SerWrite("Gespeicherte Linedatas (10.3.2007)",34);
    NewLine; NewLine;
    for (zeiger=0; zeiger<limit; zeiger++) {
    	NewLine;
    	PrintInt(zeiger);
    	Trenner;
    	PrintInt(d_l[zeiger]);
    	Trenner;
    	PrintInt(d_r[zeiger]);
    	Trenner;
    	PrintInt(d_l[zeiger]+d_r[zeiger]);
    	Trenner;
    	PrintInt(d_l[zeiger]-d_r[zeiger]);
    }
    while(1) { StatusLED(RED); Msleep(200); StatusLED(OFF); Msleep(600);}
    return 0;
    }
    Das benötigt allerdings eine asuro.c die schon PrintInt() und Msleep() kennt. Links dazu findest du im FileThread. (Um es nicht unnötig kompliziert zu machen, solltest du eine Version unter 2.7 wählen.)

    Gruß

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

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress