Ich hab ein Problem damit das ACS zu benutzen. Es funktioniert eigentlich gut, nur eben immer nur einmal im Programmablauf. Also einmal wird "gescannt" und dann nur noch vorwärts gefahren...
Gibt es eine Möglichkeit das ACS mehrere Male hintereinander abzufragen und die neuen Werte zu benutzen?
Code:
#define PWM_IR 35
#define IR_left 27
#define IR_right 29
#define TSOP 26
byte ACS_R, ACS_L;
void main(void)
{
PRO_BOT128_INIT();
ACS_INIT(5);
ENC_LED_ON();
DRIVE_ON();
do
{
Check_Left(); //Check IR Sensor "ACS" left
Check_Right(); //Check IR Sensor "ACS" right
if((ACS_LEFT()==1)&&(ACS_RIGHT()==1)) Forward();
if((ACS_LEFT()==0)&&(ACS_RIGHT()==0)) Backward();
if((ACS_LEFT()==1)&&(ACS_RIGHT()==0)) Turn_Left();
if((ACS_LEFT()==0)&&(ACS_RIGHT()==1)) Turn_Right();
}while(1);
}
void Forward(void)
{
GO_TURN(+10,0,250);
AbsDelay(150);
}
void Backward(void)
{
GO_TURN(-10,0,250);
AbsDelay(150);
}
void Turn_Left(void)
{
GO_TURN(0,-90,250);
AbsDelay(150);
}
void Turn_Right(void)
{
GO_TURN(0,+90,250);
AbsDelay(150);
}
void Check_Right(void)
{
Port_WriteBit(IR_left,PORT_OFF); //Check right side
Port_WriteBit(IR_right,PORT_ON);
AbsDelay(5);
ACS_R = Port_ReadBit(TSOP);
Port_WriteBit(IR_right,PORT_OFF);
}
void Check_Left(void)
{
Port_WriteBit(IR_right,PORT_OFF); //Check left side
Port_WriteBit(IR_left,PORT_ON);
AbsDelay(5);
ACS_L = Port_ReadBit(TSOP);
Port_WriteBit(IR_left,PORT_OFF);
}
Lesezeichen