Ok das mit dem Msleep(zeit); hat sich geklärt, da ich noch die Standart lib hatte.
Nun mein neues Problem:
Code:
#include "asuro.h"
#include <stdlib.h>
void Msleep(int dauer)
{
int z;
for(z=0;z<dauer;z++) Sleep(72);
}
unsigned int zaehler;
unsigned int zaehler2;
unsigned char ir1;
int main (void)
{
unsigned int lData[2];
unsigned int oData[2];
unsigned int oldO1;
unsigned int oldO2;
unsigned char sw, speed;
unsigned char ir;
unsigned char ir2;
Init();
OdometrieData(oData);
oldO1 = oData[0] + 500;
oldO2 = oData[1] + 500;
DDRD |= (1 << DDD1); // Port D1 als Ausgang
PORTD &= ~(1 << PD1); // PD1 auf LOW
OCR2 = 0xFC;
speed=130;
for(;;)
{
ir=PIND & (1 << PD0);
FrontLED(ON);
LineData(lData);
OdometrieData(oData);
if (ir || ir1)
{
if(lData[1] <= 50 && lData[1] >= 10)
{
BackLED(ON,ON);
StatusLED(GREEN);
MotorDir(RWD, RWD);
MotorSpeed(190, 190);
Msleep(500);
MotorDir(BREAK, RWD);
MotorSpeed(0, 150);
Msleep(500);
}
else if (PollSwitch() != 0)
{
Sleep(281);
if(PollSwitch() != 0)
{
BackLED(ON,ON);
StatusLED(GREEN);
MotorDir(RWD, RWD);
MotorSpeed(150, 150);
Msleep(1000);
MotorDir(BREAK, RWD);
MotorSpeed(0, 150);
Msleep(500);
}
else
{
FrontLED(ON);
BackLED(OFF,OFF);
StatusLED(RED);
MotorDir(FWD, FWD);
MotorSpeed(130, 130);
}
}
else
{
FrontLED(ON);
BackLED(OFF,OFF);
StatusLED(RED);
MotorDir(FWD, FWD);
MotorSpeed(130, 130);
}
if(oData[0] >= oldO1 - 1 && oData[0] <= oldO1 + 1)
{
zaehler++;
if(zaehler >= 100)
{
zaehler = 0;
BackLED(ON,ON);
StatusLED(GREEN);
MotorDir(RWD, RWD);
MotorSpeed(150, 150);
Msleep(750);
MotorDir(BREAK, RWD);
MotorSpeed(0, 150);
Msleep(400);
}
}
else
{
zaehler = 0;
oldO1 = oData[0];
}
if(oData[1] >= oldO2 - 1 && oData[1] <= oldO2 + 1)
{
zaehler2++;
if(zaehler2 >= 100)
{
zaehler2 = 0;
BackLED(ON,ON);
StatusLED(GREEN);
MotorDir(RWD, RWD);
MotorSpeed(150, 150);
Msleep(800);
MotorDir(BREAK, RWD);
MotorSpeed(0, 150);
Msleep(400);
}
}
else
{
zaehler2 = 0;
oldO2 = oData[1];
}
}
else
{
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(speed,speed);
if (speed > 0) Msleep(500);
MotorDir(BREAK,RWD);
MotorSpeed(0,speed);
if (speed > 0) Msleep(500);
}
ir1=ir;
ir2=ir1;
sw = PollSwitch();
if (sw & 0x04)
{
OCR2 = 0xFC;
}
if (sw & 0x08)
{
OCR2 = 0xFB;
}
}
return 0;
}
Also der ASURO sollte eine Tischkante erkennen, was auch funktioniert (das tut er leider auch bei schwarz).
Zudem sollten die Taster überprüft werden, was auch funktioniert.
Er sollte auch noch über IR-Sensoren gegenstände schon aus der entfernung erkennen und merken wann ein Rad stehen bleibt(wenn er hängt), über die Odometriesensoren, was beides leider nicht funktioniert.
Es kommt eine Warnung bei mir und zwar folgende:
test.c:58: warning: large integer implicitly truncated to unsigned type
Was aber nichts damit zu tun haben sollte, dass dies nicht funktioniert.
Danke schonmal im vorraus.
Lesezeichen