so, jetzt habe ich mir nochmal genau angeschaut, wie das mit dem obstacle_left() bzw obstacle_right() auf der base programmiert ist.
dabei konnte ich folgendes finden:
in der .h lib:
die ACS funktion wird also hier auch aus der .h lib aufgerufen.Code:void task_ACS(void);
das habe ich bei mir mit void infrarotkollission(void); in dirks servolib.h gemacht, also genau gleich wie hier gemacht.
in der .c lib:
die variablen werden hier auch nicht als externe variablen deklariert.Code:uint8_t obstacle_left; uint8_t obstacle_right;
also wie bei mir in servolib.c
dann das demoprogramm (Example_04_ACS):
hier mein demoprogramm zum aufrufen meiner neuen acs funktion zum vergleich:Code:// Uncommented Version of RP6Base_Stopwatches.c // written by Dominik S. Herwald // ------------------------------------------------------------------------------------------ // Another uncommented version - this time of RP6Base_ACS.c. // ------------------------------------------------------------------------------------------ #include "RP6RobotBaseLib.h" void acsStateChanged(void) { writeString_P("ACS state changed L: "); if(obstacle_left) writeChar('o'); else writeChar(' '); writeString_P(" | R: "); if(obstacle_right) writeChar('o'); else writeChar(' '); if(obstacle_right && obstacle_left) writeString_P(" MIDDLE!"); writeChar('\n'); if(obstacle_left && obstacle_right) statusLEDs.byte = 0b100100; else statusLEDs.byte = 0b000000; statusLEDs.LED5 = obstacle_left; statusLEDs.LED4 = (!obstacle_left); statusLEDs.LED2 = obstacle_right; statusLEDs.LED1 = (!obstacle_right); updateStatusLEDs(); } void bumpersStateChanged(void) { writeString_P("Bumpers state changed! BPL: "); if(bumper_left) writeChar('o'); else writeChar(' '); writeString_P(" | BPR: "); if(bumper_right) writeChar('o'); else writeChar(' '); writeChar('\n'); } int main(void) { initRobotBase(); writeString_P("\nRP6 ACS - Testprogram\n"); writeString_P("_____________________\n\n"); setLEDs(0b111111); mSleep(1000); setLEDs(0b001001); ACS_setStateChangedHandler(acsStateChanged); BUMPERS_setStateChangedHandler(bumpersStateChanged); powerON(); setACSPwrMed(); while(true) { task_RP6System(); } return 0; }
da ich keinen grundlegenden unterschied zwischen meiner programmiervariante und der von der base feststellen kann, bei mir aber immer noch die fehlermeldungCode:// Uncommented Version of RP6ControlServo.c // ------------------------------------------------------------------------------------------ #include "RP6ControlLib.h" #include "RP6ControlServoLib.h" #include "RP6I2CmasterTWI.h" #include "RP6Control_I2CMasterLib.h" //Servo 1 => PC2 //Servo 2 => PC3 //Servo 3=> PC4 //Servo 4=> PC5 //Servo 5=> PC6 void RP6_Bewegung(void) {if (ir_hindernis) {writeString_P("objekt erkannt\n");} } void servoansteuerung(void) {if (getStopwatch3() <1000) {servo3_position = 0; writeString_P("LEFT Touch\n");} if (getStopwatch3() >1000 && getStopwatch3() <2000) {servo3_position = 40; writeString_P("servo position 40\n");} if (getStopwatch3() >2000 && getStopwatch3() <3000) {servo3_position = 80;} if (getStopwatch3() >3000 && getStopwatch3() <4000) {servo3_position = RIGHT_TOUCH; writeString_P("Servo Right touch\n");} if (getStopwatch3() >4000 && getStopwatch3() <5000) {servo3_position = 80;} if (getStopwatch3() >5000 && getStopwatch3() <6000) {servo3_position = 40;} if (getStopwatch3() >6000 && getStopwatch3() <7000) {servo3_position = 0; writeString_P("LEFT Touch\n");} if (getStopwatch3() >7000) { setStopwatch3(0); writeString_P("stopwatch3 auf 0 zurück\n");} } int main(void) { initRP6Control(); I2CTWI_initMaster(100); initSERVO(SERVO3); startStopwatch3(); while(true) { servoansteuerung(); task_SERVO(); infrarotkollission(); RP6_Bewegung(); } return 0; }
kommt, hoffe ich nun, dass mir jemand aus dem forum helfen kann.Code:-------- begin -------- avr-gcc (WinAVR 20090313) 4.3.2 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiling: IR_Radar.c avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=IR_Radar.lst -I../../RP6Lib -I../../RP6Lib/RP6control -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/IR_Radar.o.d IR_Radar.c -o IR_Radar.o IR_Radar.c: In function 'RP6_Bewegung': IR_Radar.c:21: error: 'ir_hindernis' undeclared (first use in this function) IR_Radar.c:21: error: (Each undeclared identifier is reported only once IR_Radar.c:21: error: for each function it appears in.) make.exe: *** [IR_Radar.o] Error 1 > Process Exit Code: 2 > Time Taken: 00:05
mfg andi







Zitieren

Lesezeichen