Ich habe gerade ein Testprogramm für die Liniensensoren geschrieben. Mit dem Programm lassen sich alle drei Liniensensoren nach der Kalibrierung einzeln testen:
Durch Berührung der Fühler kann man zwischen den Sensoren wechseln. Die Anzahl der leuchtenden Leds gibt den Reflexionswert an
Code:
#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <nibobee/sens.h>
#include <nibobee/analog.h>
#include <nibobee/line.h>
void line_read_persistent();
uint16_t line_get(uint8_t idx);
void line_calibrate_white();
void line_calibrate_black();
void do_blink(uint8_t mask) {
for (int i=0; i<5; ++i) {
led_set(LED_L_YE, mask&0x01);
led_set(LED_L_RD, mask&0x02);
led_set(LED_R_RD, mask&0x04);
led_set(LED_R_YE, mask&0x08);
delay(200);
led_set(LED_L_RD, 0);
led_set(LED_R_RD, 0);
led_set(LED_L_YE, 0);
led_set(LED_R_YE, 0);
delay(200);
}
}
int main() {
led_init();
motpwm_init();
sens_init();
analog_init();
activate_output_bit(IO_LINE_EN);
uint8_t mode;
while (1==1) {
enable_interrupts();
delay(10);
if ((sens_getLeft()!=0) || (sens_getRight()!=0)) {
while ((sens_getLeft()!=0) || (sens_getRight()!=0)) {
// wait for release
delay(1);
}
mode++;
if (mode==3) {
mode=0;
}
switch (mode) {
case 0:
do_blink(0x03);
break;
case 1:
do_blink(0x06);
break;
case 2:
do_blink(0x0c);
break;
}
}
uint16_t val;
switch (mode) {
case 0:
val = line_get(LINE_L);
break;
case 1:
val = line_get(LINE_C);
break;
case 2:
val = line_get(LINE_R);
break;
}
set_output_groupbitval(IO_LEDS, L_YE, val>100);
set_output_groupbitval(IO_LEDS, L_RD, val>200);
set_output_groupbitval(IO_LEDS, R_RD, val>300);
set_output_groupbitval(IO_LEDS, R_YE, val>400);
}
return 0;
}
Lesezeichen