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; }







Zitieren

Lesezeichen