Pyrgo
02.08.2008, 18:04
Hi,
ich hoffe mal ich bin hier richtig mit meinem kleinen Codeproblem für den RP6.
#include "RP6RobotBaseLib.h"
uint16_t counter;
uint16_t light_l;
uint16_t light_r;
void task_SearchAndFollow(void)
{
if(getStopwatch3() > 540)
{
//Manchmal liefert readADC einen falschen Wert zurück (0000)
light_l = 0;
light_r = 0;
while(light_l == 0000)
{
light_l = readADC(ADC_LS_L);
}
while(light_r == 0000)
{
light_r = readADC(ADC_LS_R);
}
//Ergebnisse werden ausgegeben writeString_P("L: ");
writeIntegerLength(light_l, DEC, 4);
writeString_P(" | R: ");
writeIntegerLength(light_r, DEC, 4);
writeString_P(" | I: ");
writeIntegerLength(counter, DEC, 2);
writeChar('\n');
counter++;
if(counter == 10)
{
stopStopwatch3();
}
setStopwatch3(0);
}
}
int main(void)
{
initRobotBase();
powerON();
rotate(100, LEFT, 360, 0);
counter = 0;
startStopwatch3();
while(true)
{
task_SearchAndFollow();
task_RP6System();
}
return 0;
}
Ich lasse meinen Roboter einmal um die eigene Achse drehen. Dabei nehme ich innerhalb von 5,4 Sekunden (solange dauert das Drehen) 10 Messdaten der Helligkeitssensoren.
Das ganze mache ich mit Stopwatches. Nach jedem Stopwatch wird counter eins hochgezählt mit counter++;
Wenn ich das ausgeben lasse kommt:
0
1
2
3
4
5
6
7
8
43
44
45
...
Manchmal zählt er nach 8 auch bei 96 weiter, manchmal kommt nach der 8 noch eine 8 ... das kann doch gar nicht sein ??? :-k
Ich versteh das überhaupt nicht. Ich sitze schon seit 10 Uhr früh dran, hattet auch die fabelhafte Idee, die Schleife zu ändern:
Von
if(counter == 10)
zu
if(counter >= 10)
aber das finde ich total grauenhaft. :D
ich hoffe mal ich bin hier richtig mit meinem kleinen Codeproblem für den RP6.
#include "RP6RobotBaseLib.h"
uint16_t counter;
uint16_t light_l;
uint16_t light_r;
void task_SearchAndFollow(void)
{
if(getStopwatch3() > 540)
{
//Manchmal liefert readADC einen falschen Wert zurück (0000)
light_l = 0;
light_r = 0;
while(light_l == 0000)
{
light_l = readADC(ADC_LS_L);
}
while(light_r == 0000)
{
light_r = readADC(ADC_LS_R);
}
//Ergebnisse werden ausgegeben writeString_P("L: ");
writeIntegerLength(light_l, DEC, 4);
writeString_P(" | R: ");
writeIntegerLength(light_r, DEC, 4);
writeString_P(" | I: ");
writeIntegerLength(counter, DEC, 2);
writeChar('\n');
counter++;
if(counter == 10)
{
stopStopwatch3();
}
setStopwatch3(0);
}
}
int main(void)
{
initRobotBase();
powerON();
rotate(100, LEFT, 360, 0);
counter = 0;
startStopwatch3();
while(true)
{
task_SearchAndFollow();
task_RP6System();
}
return 0;
}
Ich lasse meinen Roboter einmal um die eigene Achse drehen. Dabei nehme ich innerhalb von 5,4 Sekunden (solange dauert das Drehen) 10 Messdaten der Helligkeitssensoren.
Das ganze mache ich mit Stopwatches. Nach jedem Stopwatch wird counter eins hochgezählt mit counter++;
Wenn ich das ausgeben lasse kommt:
0
1
2
3
4
5
6
7
8
43
44
45
...
Manchmal zählt er nach 8 auch bei 96 weiter, manchmal kommt nach der 8 noch eine 8 ... das kann doch gar nicht sein ??? :-k
Ich versteh das überhaupt nicht. Ich sitze schon seit 10 Uhr früh dran, hattet auch die fabelhafte Idee, die Schleife zu ändern:
Von
if(counter == 10)
zu
if(counter >= 10)
aber das finde ich total grauenhaft. :D