Arexx RP6 V2 Build your own robot kit RP6 V2 User Manual
Product codes
RP6 V2
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
void task_ADC(void)
In diesem Fall verkürzt sie die Zeit die zum Auslesen aller Analog/Digital Wandler
Kanäle im Programm benötigt wird. Ruft man diese Funktion ständig auf, werden au-
Kanäle im Programm benötigt wird. Ruft man diese Funktion ständig auf, werden au-
tomatisch alle ADC Kanäle der Reihe nach „im Hintergrund“ (also immer wenn gerade
Zeit dazu ist) ausgelesen und die Messwerte in Variablen gespeichert.
Der ADC benötigt für jede Messung etwas Zeit und mit der readADC Funktion wäre
der normale Programmablauf dann für diese Zeit unterbrochen. Da die Messung aber
Zeit dazu ist) ausgelesen und die Messwerte in Variablen gespeichert.
Der ADC benötigt für jede Messung etwas Zeit und mit der readADC Funktion wäre
der normale Programmablauf dann für diese Zeit unterbrochen. Da die Messung aber
auch ohne unser zutun läuft (der ADC ist schließlich ein Hardwaremodul im Mikrocon-
troller) können wir in dieser Zeit auch andere Dinge erledigen.
Es gibt für die einzelnen Kanäle folgende 16Bit Variablen, die man immer und überall
im Programm verwenden kann:
troller) können wir in dieser Zeit auch andere Dinge erledigen.
Es gibt für die einzelnen Kanäle folgende 16Bit Variablen, die man immer und überall
im Programm verwenden kann:
ADC_BAT:
adcBat
ADC_MCURRENT_L:
adcMotorCurrentLeft
ADC_MCURRENT_R:
adcMotorCurrentRight
ADC_LS_L:
adcLSL
ADC_LS_R:
adcLSR
ADC_ADC0:
adc0
ADC_ADC1:
adc1
Sobald Sie die task_ADC() Funktion verwenden, sollten Sie nur noch diese Variablen
benutzen und NICHT die readADC Funktion!
Beispiel:
Beispiel:
1
2
2
3
4
4
5
6
6
7
8
8
9
10
10
11
12
12
13
14
14
15
16
16
17
18
18
19
20
21
22
22
23
24
24
25
26
26
#include "RP6RobotBaseLib.h"
int
main(
void
)
{
initRobotBase();
startStopwatch1();
startStopwatch1();
writeString_P(
"\n\nKleines ADC Messprogramm...\n\n"
);
while
(
true
)
{
if
(getStopwatch1() >
300
)
// Alle 300ms...
{
writeString_P(
"\nADC Lichtsensor Links: "
);
writeInteger(adcLSL, DEC);
writeString_P(
"\nADC Lichtsensor Rechts: "
);
writeInteger(adcLSL, DEC);
writeString_P(
writeString_P(
"\nADC Akku: "
);
writeInteger(adcBat, DEC);
writeChar(
writeChar(
'\n'
);
if
(adcBat <
600
)
writeString_P(
"Warnung! Akku ist bald leer!\n"
);
setStopwatch1(
0
);
// Stopwatch1 auf 0 zurücksetzen
}
task_ADC();
// ADC Auswertung – ständig aus der Hauptschleife
}
// aufrufen! Dann sollte man aber readADC nicht
return
0
;
// mehr verwenden!
}
Hier werden alle 300ms die Messwerte der beiden Lichtsensoren und vom Akku ausge-
geben. Unterschreitet die Akkuspannung etwa 6V, wird eine Warnung ausgegeben.
- 93 -