Ich habe nun wie vorgeschlagen die I2C Buffer Size definiert. Der Fehler ist nun weg, jedoch habe ich nun 5 neue!
c:50: undefined reference to `i2c_init'
c:51: undefined reference to `lcd_init'
c:52: undefined reference to `lcd_setBacklight'
c:131: undefined reference to `lcd_setCursor'
c:136: undefined reference to `lcd_setCursor'
Hat jeman ein Idee? Bei einem anderen user läuft dieser Code ohne ProblemeCode:#define I2C_BUF_SIZE 32 #include <nibobee/iodefs.h> #include <nibobee/usart.h> #include <nibobee/motpwm.h> #include <nibobee/analog.h> #include <nibobee/odometry.h> #include <nibobee/led.h> #include <nibobee/i2cmaster.h> #include <nibobee/lcdi2c.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdio.h> int8_t decode_l (uint8_t val) { if (val==0x01) return -1; if (val==0x02) return 1; return 0; } int8_t decode_r (uint8_t val) { if (val==0x01) return -1; if (val==0x02) return 1; return 0; } void print_hex (uint8_t val) { char c1=val/16; char c2=val%16; if (c1<10) c1+='0'; else c1+='a'-10; if (c2<10) c2+='0'; else c2+='a'-10; usart_putchar(c1); usart_putchar(c2); } int main() { int odoL,odoR; activate_output_group(IO_LEDS); // LED bits als Output usart_setbaudrate(9600); usart_enable(); motpwm_init(); odometry_init(); motpwm_setLeft(0); motpwm_setRight(0); analog_init(); i2c_init(); lcd_init(0x27); lcd_setBacklight(0); printf("NIBObee LCD V%d.%d",0,2); set_output_group(IO_SENS); // Pull-ups aktivieren activate_output_bit(IO_LINE_EN); odoL = 0; odoR = 0; while(1) { sei(); int8_t left = decode_l((PINC & 0x30)>>4); int8_t right = decode_r((PINC & 0xc0)>>6); int16_t speed_l = 0; int16_t speed_r = 0; switch (left) { case -1: speed_l=-500; break; case +1: speed_l=+500; break; case 0: speed_l= 0; break; } switch (right) { case -1: speed_r=-500; break; case +1: speed_r=+500; break; case 0: speed_r= 0; break; } motpwm_setLeft(speed_l); motpwm_setRight(speed_r); int16_t lval = analog_getValue(ANALOG_L1)-(int16_t)analog_getValue(ANALOG_L0) - 40; int16_t cval = (3*(analog_getValue(ANALOG_C1)-(int16_t)analog_getValue(ANALOG_C0)))/4 - 60; int16_t rval = analog_getValue(ANALOG_R1)-(int16_t)analog_getValue(ANALOG_R0) - 40; if ((speed_l==0) && (speed_r==0)) { if (lval<0) lval=0; if (cval<0) cval=0; if (rval<0) rval=0; if (usart_txempty()) { print_hex(LOBYTE(lval>>4)); usart_putchar(':'); print_hex(LOBYTE(cval>>4)); usart_putchar(':'); print_hex(LOBYTE(rval>>4)); usart_putchar(10); usart_putchar(13); } uint8_t rule_l = 0; uint8_t rule_c = 0; uint8_t rule_r = 0; if (lval+lval > rval+cval) rule_l=1; if (cval+cval > lval+rval) rule_c=1; if (rval+rval > lval+cval) rule_r=1; if (lval > 300) rule_l=1; if (cval > 300) rule_c=1; if (rval > 300) rule_r=1; if (lval < 100) rule_l=0; if (cval < 100) rule_c=0; if (rval < 100) rule_r=0; led_set(LED_L_RD, rule_l); led_set(LED_R_RD, rule_r); led_set(LED_L_YE, (PIND & 0x04)); led_set(LED_R_YE, (PIND & 0x08)); } else { led_set(LED_L_RD, (speed_l>0)); led_set(LED_R_RD, (speed_r>0)); led_set(LED_L_YE, (speed_l<0)); led_set(LED_R_YE, (speed_r<0)); } lcd_setCursor(0,1); printf("L: %3x %3x %3x ", rval, cval,lval); odoL += odometry_getLeft(1); odoR += odometry_getRight(1); lcd_setCursor(0,2); printf("O: %4d %4d", odoR,odoL); _delay_ms(100); } return 0; /* Diese Zeile ist eigentlich nicht![]()







Zitieren

Lesezeichen