Hallo
Nur zeitgesteuert (und ungetestet!) ist das eine echte Herausforderung:
Code:
#include "asuro.h"
#define BWD RWD // Rückwards bedeutet Backwards
#define pwm_links 130
#define pwm_rechts 117
void Msleep_(uint16_t pause) // Funktion muss bei Libs mit 36kHz entfernt werden!
{
if(pause) while(pause--) Sleep(72);
}
uint8_t taste(void)
{
uint8_t t1, t2;
t1=PollSwitch();
t2=PollSwitch();
if(t1==t2) return(t1); // Wert gültig
return(0);
}
void vorwaerts(void)
{
StatusLED(GREEN);
MotorSpeed(pwm_links, pwm_rechts);
MotorDir(FWD,FWD);
}
void bremsen(void)
{
StatusLED(RED);
BackLED(OFF, OFF);
MotorSpeed(0,0);
MotorDir(BREAK, BREAK);
Msleep(50); // Bremszeit bis zum Stillstand
}
void rueckwaerts(void)
{
BackLED(ON, ON);
MotorSpeed(pwm_links, pwm_rechts);
MotorDir(BWD,BWD);
Msleep(500);
}
void linksdrehen(void)
{
BackLED(ON, OFF);
MotorSpeed(pwm_links, pwm_rechts);
MotorDir(BWD,FWD);
Msleep(300); // Zeit für 90°
bremsen();
}
void rechtsdrehen(void)
{
BackLED(OFF, ON);
MotorSpeed(pwm_links, pwm_rechts);
MotorDir(FWD,BWD);
Msleep(300); // ditto
bremsen();
}
uint8_t testen(void)
{
uint8_t temp=10; // Anzahl der Versuche
vorwaerts();
FrontLED(ON);
while(--temp && !taste()) Msleep(20); // 20ms pro Versuch weiterfahren
if(temp) bremsen();
FrontLED(OFF);
return(temp); // Wenn temp != null wurde eine Taste gedrückt = Wand erkannt
}
int main(void)
{
uint8_t schritt=0;
Init();
while(1)
{
vorwaerts(); // Vorwärts bis Hinderniss erkannt wird
while(!taste());
bremsen();
rueckwaerts();
bremsen();
if(schritt++<3) // dreimal zuerst links abbiegen...
{
linksdrehen();
if(testen())
{
rechtsdrehen();
rechtsdrehen();
if(testen()) rechtsdrehen();
}
}
else
{
rechtsdrehen();
if(testen())
{
linksdrehen();
linksdrehen();
if(testen()) linksdrehen();
}
schritt=0;
}
}
return 0;
}
Wenn beim Kompilieren die Funktion Msleep() angemotzt wird, dann muss man diese umbenennen oder entfernen. Die Zeiten für die Drehungen, das Zurücksetzen und das Bremsen muss man anpassen. Das gilt auch für die PWM-Werte der Motoren.
Keine Ahnung ob das halbwegs funktioniert...
Gruß
mic
Lesezeichen