Code:
#include "asuro.h"
#include "ultrasonic.h"
#define TRIGGERLEVEL 600
#define HYSTERESIS 10
#define LOW 0
#define HIGH 1
int main(void)
{
int abstand, sw, sw0, sw1, sw2;
unsigned char ocr = 0;
unsigned char ocr1 = 0;
unsigned int data[2];
signed int status[2]={0,0};
signed int difference=0;
Init();
while(1)
{
sw0=PollSwitch();
sw1=PollSwitch();
sw2=PollSwitch();
if ((sw0==sw1) && (sw0==sw2)) sw=sw0; else sw=0;
{
StatusLED(GREEN);
MotorDir(FWD, FWD);
MotorSpeed(150, 150);
}
abstand = Chirp();
StatusLED(YELLOW);
if (sw==32)
{
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
MotorDir(FWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
}
if (sw==16)
{
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
MotorDir(FWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
}
if (sw==8)
{
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
MotorDir(FWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
}
if (sw==1)
{
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
MotorDir(RWD,FWD);
MotorSpeed(150, 150);
Msleep(600);
}
if (sw==2)
{
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
MotorDir(RWD,FWD);
MotorSpeed(150, 150);
Msleep(600);
}
if (sw==4)
{
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
MotorDir(RWD,FWD);
MotorSpeed(150, 150);
Msleep(600);
}
else if (abstand<15)
{
ocr = TCNT2;
ocr1 =ocr/2;
ocr1 *=2;
if (ocr == ocr1){
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
MotorDir(RWD,FWD);
MotorSpeed(150, 150);
Msleep(600);
}
else
{
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
MotorDir(FWD,RWD);
MotorSpeed(150, 150);
Msleep(600);
}
}
else
{
OdometrieData(data);
if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
status[0]=HIGH;
difference++;
}
if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
status[0]=LOW;
difference++;
}
if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
status[1]=HIGH;
difference--;
}
if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
status[1]=LOW;
difference--;
}
if (difference<-155) difference=-155;
if (difference>155) difference=155;
StatusLED(status[0]+status[1]*2);
if (difference>0) MotorSpeed(155-difference,155);
else MotorSpeed(155,155+difference);
}
}
return 0;
}
Mein ASURO verhält sich jetzt viel natürlicher (wie ein Hamster)
Lesezeichen