So hab mir das jetzt mal angeschaut - das Problem ist hier das Du readADC verwendest.
Das funkt in das task System rein, da das dort schon anders für alle ADC Kanäle erledigt wird.
Du musst readADC gar nicht verwenden Du kannst stattdessen direkt Variablen abfragen in die die ADC Werte sowieso schon periodisch eingelesen werden.
Der Overcurrent Fehler kommt da genau deswegen weil die Fehlerüberwachung da dann falsche ADC Werte bekommt.
Hier ein Minimalbeispiel:
Code:
#include "RP6RobotBaseLib.h"
void lichtsensoren (void)
{
if(getStopwatch2() > 100)
{
writeInteger(adcLSL, DEC);
writeString_P(" - ");
writeInteger(adcLSR, DEC);
writeString_P("\n");
if (adcLSL > adcLSR)
{
setLEDs(4);
moveAtSpeed(100,50);
}
else
{
setLEDs(32);
moveAtSpeed(50,100);
}
setStopwatch2(0);
}
}
int main(void)
{
initRobotBase();
setLEDs(0b111111);
writeString_P("Test\n");
mSleep(500);
setLEDs(0b000000);
powerON();
startStopwatch2();
while(true)
{
lichtsensoren();
task_RP6System();
}
return 0;
}
Das ist übrigens auch ein guter Tipp für alles andere - immer ein sehr kleines Programm schreiben in dem genau die Sache getestet wird die im größeren Programm nicht funktioniert.
MfG,
SlyD
PS:
Wenn Du das jetzt noch mit kontinuierlichem Übergang und Anzeige hinbekommen willst, schau Dir das RP6Base_LightDetection Beispiel an.
Lesezeichen