robotmafiosi
04.04.2013, 18:56
Hallo
Dies ist mein erstes richtiges Projekt am RP6, und zwar versuche ich einer schwarzen Linie auf hellem Untergrund zu folgen, und das nur über die mitgelieferten Sensoren des RP6 (denke das ich noch zu blöd bin um eigene anzuschließen).
Jetzt kommt das Problem:mad:, der Roboter erkennt den unterschied ziwischen Linie und Untergrund inzwischen recht souverän und fährt dann auch in die richtige Richtung an, doch nach einer geschätzten halben Sekunde bleibt er stehhen und stockt höchstens noch einmal. Dann kommt die Meldung über die Schnittstelle, dass etwas mit dem Motor Strom nicht in Ordnung ist und der RP6 deswegen resettet werden muss . Ich hatte das schon öfter und habe deswegen die üblichen Fehlerquellen wie fehlendes powerON(); oder fehlendes task_motionControl(); schon überprüft . Allerdings habe ich keine Fehler gefunden . Da ich noch nicht so bewandert im Programmieren binn frage ich jetzt euch was denn der Fehler sein könnte .
Denke dass es irgentetwas simples ist, dass ich übersehen habe und hoffe das auch kann aber nichts finden. Danke in voraus für die Mühen und die Antwort :)
VG Robotmafiosi
// kleines Programm zur linien folgung mti fhelerhafter motoransteuerung
#include "RP6RobotBaseLib.h"
//-------------------------------------------------------------------------------------------------------------------------------------------------
int main(void)
{
initRobotBase();
uint16_t untergrund;
uint16_t linie ;
uint16_t differenz ;
startStopwatch1();
powerON();
writeString_P(" \\| RP6 Robotmafiosi s SYSTEM |/\n");
writeString_P(" \\| programm zur linienerkennung |/\n");
task_motionControl();
startStopwatch3();
changeDirection(FWD);
setLEDs(0b100100);
mSleep(5000);
untergrund = readADC(ADC_LS_L);
mSleep(1000);
setLEDs(0b011011);
mSleep(5000);
linie = readADC(ADC_LS_L);
differenz = untergrund - linie;
writeInteger(untergrund,DEC); writeString_P("\n");
writeInteger(linie,DEC); writeString_P("\n");
writeInteger(differenz,DEC); writeString_P("\n");
setLEDs(0b000000);
while(true)
{
if(readADC(ADC_LS_L) < untergrund - (3/4*differenz)) {moveAtSpeed(10,30); setLEDs(0b000111);}
else if(readADC(ADC_LS_L) > linie + (3/4*differenz)) {moveAtSpeed(30,10); setLEDs(0b111000);}
else {moveAtSpeed(30,30); setLEDs(0b100100);}
task_motionControl();
task_RP6System();
task_ADC();
}
return 0;
}
Dies ist mein erstes richtiges Projekt am RP6, und zwar versuche ich einer schwarzen Linie auf hellem Untergrund zu folgen, und das nur über die mitgelieferten Sensoren des RP6 (denke das ich noch zu blöd bin um eigene anzuschließen).
Jetzt kommt das Problem:mad:, der Roboter erkennt den unterschied ziwischen Linie und Untergrund inzwischen recht souverän und fährt dann auch in die richtige Richtung an, doch nach einer geschätzten halben Sekunde bleibt er stehhen und stockt höchstens noch einmal. Dann kommt die Meldung über die Schnittstelle, dass etwas mit dem Motor Strom nicht in Ordnung ist und der RP6 deswegen resettet werden muss . Ich hatte das schon öfter und habe deswegen die üblichen Fehlerquellen wie fehlendes powerON(); oder fehlendes task_motionControl(); schon überprüft . Allerdings habe ich keine Fehler gefunden . Da ich noch nicht so bewandert im Programmieren binn frage ich jetzt euch was denn der Fehler sein könnte .
Denke dass es irgentetwas simples ist, dass ich übersehen habe und hoffe das auch kann aber nichts finden. Danke in voraus für die Mühen und die Antwort :)
VG Robotmafiosi
// kleines Programm zur linien folgung mti fhelerhafter motoransteuerung
#include "RP6RobotBaseLib.h"
//-------------------------------------------------------------------------------------------------------------------------------------------------
int main(void)
{
initRobotBase();
uint16_t untergrund;
uint16_t linie ;
uint16_t differenz ;
startStopwatch1();
powerON();
writeString_P(" \\| RP6 Robotmafiosi s SYSTEM |/\n");
writeString_P(" \\| programm zur linienerkennung |/\n");
task_motionControl();
startStopwatch3();
changeDirection(FWD);
setLEDs(0b100100);
mSleep(5000);
untergrund = readADC(ADC_LS_L);
mSleep(1000);
setLEDs(0b011011);
mSleep(5000);
linie = readADC(ADC_LS_L);
differenz = untergrund - linie;
writeInteger(untergrund,DEC); writeString_P("\n");
writeInteger(linie,DEC); writeString_P("\n");
writeInteger(differenz,DEC); writeString_P("\n");
setLEDs(0b000000);
while(true)
{
if(readADC(ADC_LS_L) < untergrund - (3/4*differenz)) {moveAtSpeed(10,30); setLEDs(0b000111);}
else if(readADC(ADC_LS_L) > linie + (3/4*differenz)) {moveAtSpeed(30,10); setLEDs(0b111000);}
else {moveAtSpeed(30,30); setLEDs(0b100100);}
task_motionControl();
task_RP6System();
task_ADC();
}
return 0;
}