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:
Code:
void task_ACS(void);
die ACS funktion wird also hier auch aus der .h lib aufgerufen.
das habe ich bei mir mit void infrarotkollission(void); in dirks servolib.h gemacht, also genau gleich wie hier gemacht.
in der .c lib:
Code:
uint8_t obstacle_left;
uint8_t obstacle_right;
die variablen werden hier auch nicht als externe variablen deklariert.
also wie bei mir in servolib.c
dann das demoprogramm (Example_04_ACS):
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;
}
hier mein demoprogramm zum aufrufen meiner neuen acs funktion zum vergleich:
Code:
// 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;
}
da ich keinen grundlegenden unterschied zwischen meiner programmiervariante und der von der base feststellen kann, bei mir aber immer noch die fehlermeldung
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
kommt, hoffe ich nun, dass mir jemand aus dem forum helfen kann.
mfg andi
Lesezeichen