Hier noch einmal den Code zum Linienfolgenprogramm:
Code:
#include "asuro.h"
int main(void)
{
Init();
unsigned char l;
int data[2];
FrontLED(ON);
l=108;
Sleep(255);
Sleep(255);
MotorDir(FWD,FWD);
MotorSpeed(130,130);
int servo(unsigned char l) {
BackLED(ON,OFF);
Sleep(l);
BackLED(OFF,OFF);
Sleep(144);Sleep(72);Sleep(144);Sleep(144);Sleep(144);Sleep(144);Sleep(144);Sleep(144);Sleep(144);
return 0;}
while(1) {
LineData(data);
if(data [0] < data[1])
{l=l+4;
MotorSpeed(100,140);}
else if(data[0] == data[1])
{l=l;}
else
{l=l-4;
MotorSpeed(140,100);}
servo(l);
if(l > 120)
{l=120;}
else if(l < 80)
{l=80;}
else
{l=l;}
}
return 0;
}
Nun möchte ich meine Servofunktion so gestalten, das sie den PWM wie bei der MotorSpeed) Funktion funktioniert. Mit anderen Worten: Ich möchte der servo()Funktion einen Wert übergeben, der so lange ausgeführt wird, bis er geändert wird, damit der Servo einen Hebel gegen einen Federdruck halten kann.
Bisher ist das ja so, das der Servo zwar in der richtigen Stellung bleibt, wenn servo() nicht mehr while schleife andauernd ausgeführt wird, aber inaktiv ist und damit verdrahbar.
Lässt sich das mit dem Atmel umsetzen oder braucht man dafür multitaskting?
Lesezeichen