PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm wird nicht ausgeführt und clean löscht auch die tes



Chris90
03.03.2009, 14:28
Hallo
Ich habe folgende Probleme...
Das erste Problem ist, dass wenn ich das clean tool von der cd benutze auch die .hex datei gelöscht wird.
Das zweite Problem ist, dass obwohl ich das Linienfolgeprogramm aus Mehr spaß mit Asuro 1 1:1 abtippe ich es zwar compilieren kann, sich aber nichts tut wenn ich den asuro dann anschalte.

Gruß Chris

hai1991
03.03.2009, 14:33
hallo

kannst du das programm mal posten?
ich kenne den code aus mehr spaß mit asuro 1 nicht

radbruch
03.03.2009, 15:42
sich aber nichts tut wenn ich den asuro dann anschalte. Nach dem Abtippen und VOR dem Kompilieren muss man das Programm abspeichern! (bei NP2) Möglicherweise kompillierst du ein leeres Programm.

Chrissi_P
03.03.2009, 15:44
Hallo,
ich glaube, das ist es:


#include "asuro.h"
#define SPEED 0x8F

int speedLeft, speedRight;
unsigned int lineData[2];
int ADOffset;

void LineLeft(void)
{
speedLeft += 1;
if (speedLeft > 0xFE) speedRight = 0xFF;
}

void LineRight (void)
{
speedRight += 1;
if (speedRight > 0xFE) speedRight = 0xFF;
}

int main (void)
{
int i;
unsigned char j;

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) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
return(0);
}



ich hoffe, ich hab mich nicht vertippt!!
auf meinem ASURO scheint es zu funktionieren!

mfg Chrissi

Chris90
03.03.2009, 16:02
Das Problem mit dem Compilieren hat sich erledigt nun habe ich aber folgendes problem:
Der Asuro fährt wenn er die Linie verliert von der linie weg, oder er fährt in kurven einfach gerade aus ich würde das gerne insofern ändern, dass der asuro dann wieder auf die linie zufährt wenn er sie wieder verloren hat und dass er vor allem eher zackig ziemlich schnell gegen steuert und nicht so weich und langsam.

gruß Chris

edit: ganz vergessen zu sagen dass ich die funktion LineData nicht versteh und deswegen auch nicht weiß wie ich das ändern soll.

orusa
03.03.2009, 22:30
LineData(lineData);

bewirkt, dass die aktuellen Werten der beiden Fototansistoren des Linienfolgers in die Variable lineData geschrieben werden.
Diese ist als


unsigned int lineData[2];

deklariert und das bedeutet, dass sie eigentlich aus zwei Speicherplätzen besteht: lineData[0] und lineData[1]. Somit steht nach
LineData(lineData); der Wert des linken Fototransistors in lineData[0] und der Wert des rechten in lineData[1].
In obigem Programm wird mit


ADOffset = lineData[0] - lineData[1];

zuerst der Unterschied der beiden Fototransistoren festgestellt und dann in der Endlosschleife mit


LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;

jeweils der tatsächliche Unterschied abzüglich des ursprünglichen Unterschieds festgestellt.
Wenn dieser Unterschied größer als 4 ist, wird die Funktion LineLeft() ausgeführt, wenn er kleiner ist als -4 wird LineRight() ausgeführt und sonst fährt er einfach weiter geradeaus.

Ich hoffe, dass es jetzt einigermassen verständlich geworden ist, was LineData() macht.

Gruß
Günther

Chris90
12.03.2009, 13:05
Hallo Günther
Danke für die Erklährung das hat auf jeden Fall geholfen :)
Leider bin ich nicht früher dazu gekommen hier nochmal rein zu schauen, da ich grade etwas im Schulstress bin.
Gruß
Christian