Nein,
Ich nicht, ich wäre nur froh wenn mir jemand einen kleinen Tip gäbe, wie ich die Liniendioden
richtig auslesen soll
Also,
last uns den Termin neu auf Sonntag 31.7.2005, 20 Uhr festsetzen.
Bis dahin die vollstängige Lösung dieses Wettbewerbs. Mit Linienverfolgung inclusive.
Will jemand einen früheren Termin ?
Gruss,
stochri
Nein,
Ich nicht, ich wäre nur froh wenn mir jemand einen kleinen Tip gäbe, wie ich die Liniendioden
richtig auslesen soll
Ich hab meine Linienverfolgung doch noch gefunden. Es war im Ordner mit den Originaldateien. Ich hatte die originale LineDemo abgeändert. Die ursprünglichen Programmzeilen sind noch als Kommentare drin. Ich hoffe ihr kommt damit klar.
Hier ist sie:
Der Termin geht klar.Code:#include "asuro.h" #define SPEED 0xA0 int speedLeft,speedRight; unsigned int lineData[2]; int ADOffset; void LineDemo(void) { unsigned char j; int i; Init(); FrontLED(ON); for (j = 0; j < 0xFF; j++) LineData(lineData); LineData(lineData); ADOffset = lineData[0] - lineData[1]; speedLeft = speedRight = SPEED; for(;;) { LineData(lineData); i = (lineData[0] - lineData[1]) - ADOffset; if ( i > 4) { //Line is left StatusLED(GREEN); //speedLeft = SPEED + i; //if (speedLeft > 0xFE) speedLeft = 0xFF; speedRight = SPEED - 2 * i; if (speedRight < 0x01) speedRight = 0x00; } else if ( i < -4) { //Line is right StatusLED(RED); //speedRight = SPEED - i; //if (speedRight > 0xFE) speedRight = 0xFF; speedLeft = SPEED + 2 * i; if (speedLeft < 0x01) speedLeft = 0x00; } else { StatusLED(OFF); //acc = 0; speedLeft = speedRight = SPEED; } MotorSpeed(speedLeft,speedRight); } }
Waste
@waste:
ist das nicht das Line-Demo, welches bei der Asruo-CD mitgeliefert wird ?
@izaseba:
Wie meinst Du das, die Liniensensoren richtig auslesen ?
In der asuro.c ist die Routine dazu:
aber ich gehe jetzt mal davon aus, dass Du das weißt.Code:void LineData(unsigned int *data) { ADMUX = (1 << REFS0) | IR_LEFT; // AVCC reference with external capacitor ADCSRA |= (1 << ADSC); // Start conversion while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete ADCSRA |= (1 << ADIF); // clear ADCIF data[0] = ADCL + (ADCH << 8); ADMUX = (1 << REFS0) | IR_RIGHT; // AVCC reference with external capacitor ADCSRA |= (1 << ADSC); // Start conversion while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete ADCSRA |= (1 << ADIF); // clear ADCIF data[1] = ADCL + (ADCH << 8); }
Vielleicht hilft nützt Dir folgender Vorschlag etwas:
Man könnte ein kleines Programm in den Asuro laden, welches die Werte der beiden Liniensensoren als Klartext mit Return rausschreibt. Dann die empfangenen Werte bei verschiedenen Beleuchtungssituationen abspeichert.
Schlieslich das ganze File mit einem Tabellenkalkulationsprogramm graphisch darstellen. Dann müsste die Reaktion der Liniensensoren gut sichtbar sein.
Viele Grüße,
stochri
Hallo
Ja stochri, das weiß ich.aber ich gehe jetzt mal davon aus, dass Du das weißt.
Ich glaube, ich hab mich zu wenig damit befasst..
Ne, waste hat da paar Änderungen gemacht,@waste:
ist das nicht das Line-Demo, welches bei der Asruo-CD mitgeliefert wird ?
so wie ich das sehe hat er das umgedreht, also anstatt schneller zu weden macht er die Räder langsamer.
Gruß Sebastian
Hier mal ein Vorschlag zur Diskussion:
izaseba hat das richtig erkannt, ich brems das innere Rad ab anstatt einer Beschleunigung des äusseren Rades, wie im Original. Ausserdem lasse ich die Differenz mit dem doppelten Wert eingehen, damit fährt mein Asuro jetzt viel engere Kurven.
Wichtig ist noch, dass am Anfang eine Kalibrierung ist (ADOffset), da muss der Asuro auf einem gleichmässigen Untergrund stehen, egal ob schwarz oder weiss. Wenn er da halb auf der schwarzen Linie steht, spielt er verrückt.
Waste
Wenn Du Ihn auf einem gleichmässigem Untergrund stellst, hat dann die ganze Kalibrierung ja keinen Sinn mehr, oder sehe ich das falsch?Wichtig ist noch, dass am Anfang eine Kalibrierung ist (ADOffset), da muss der Asuro auf einem gleichmässigen Untergrund stehen, egal ob schwarz oder weiss. Wenn er da halb auf der schwarzen Linie steht, spielt er verrückt.
ADOffset = lineData[0] - lineData[1];
ergibt bei gleichen Werten dann immer null
Kann man also weglassen ?
Gruß Sebastian
Hi,
das stimmt aber nur, wenn beide Sensoren gleich messen,
das hab ich aber bei mir noch nicht hingebracht !
stimmt linux_80,
produktionsfehler, oder nicht 100% gerade eingelötet, oder nur verdreckt, theorie und praxis,
darüber hab ich nicht nachgedacht...
@stochri,
Ich würde gerne über Deine Zeichnung diskutieren, aber ich glaub,
die schaue ich mir lieber morgen in Ruhe an, ist wohl schon zu Spät, um alles zu verstehen, was Du uns damit sagen willst.
Gruß Sebastian
Lesezeichen