Hallo Weiti
Ich habe dein Program etwas umgestellt:
Code:
#include "asuro.h"
//#include <stdlib.h>
#define taste (!(PINC & (1<<PC4))) // Tastenabfrage
#define keine_taste (PINC & (1<<PC4))
void MSleep (int dauer) // 1/1000 sek
{
int z;
for (z = 0; z < dauer; z++)
Sleep (36); // bei der orginalen Library muss hier 72 stehen
}
int main(void)
{
Init();
StatusLED(RED); // vorwärts bis Hinderniss
BackLED(OFF,OFF);
MotorDir(FWD,FWD);
MotorSpeed(120,120);
while (keine_taste);
BackLED(ON,ON); // zurück
MotorDir(RWD,RWD);
MotorSpeed(120,120);
MSleep(1080); // 36*30
MotorSpeed(0,0);
Msleep(200);
MotorDir(RWD,RWD); // drehen
MotorSpeed(0,120);
MSleep(2000); // 250*36=9000?
MotorSpeed(0,0);
Msleep(200);
BackLED(OFF,OFF);
MotorDir(FWD,FWD); // vorwärts bis nächstes Hinderniss
MotorSpeed(120,120);
StatusLED(YELLOW);
while (keine_taste);
StatusLED(GREEN); // fertig
MotorSpeed(0,0);
while (1);
return(0);
}
Deine Version lief mit meinem asuro auch nicht. Msleep() benötigt als Parameter die Zeit in Millisekunden (1/1000). Der wiederholte Aufruf von MotorSpeed() könnte dazu führen, das die PWM-Register nicht richtig funktionieren. Deshalb keine Schleife, sondern erst Motor setzen und dann warten.
Gruß
mic
warum machst du nicht einfach:
Weil PollSwitch() nicht immer das erwartete zurückliefert
Lesezeichen