Hallo
Das Servo sollte schon ausreichen. Wenn du nur eine Led benötigst würde ich dafür die rote Statusled verwenden. Das würde keine andere Funktion behindern. Einzige Einschränkung wäre der vorsichtige Umgang mit StatusLED(), weil diese Funktion ein Servosignal an der roten StatusLED verändern würde. Die Ansteuerung wäre dafür sehr einfach:
Code:
#include "asuro.h"
char statusledgreen;
int i, p;
int main(void)
{
Init();
for(i=0; i<1000; i++) Sleep(72); // Pause eine Sekunde bei 72kHz-Library
// In asuro.h werden die Farben der StatusLED so definiert:
// #define GREEN 1
// #define RED 2
// #define YELLOW 3
// Zusätzlich wird noch dies definiert:
// #define OFF 0
// #define ON 1
// Da wir zum Setzen der grünen LED die Funktion StatusLED() nicht verwenden dürfen
// merken wir uns ihren Status in der Variablen statusledgreen und schalten sie aus
statusledgreen = OFF;
while (1)
{
for(i=0; i<50; i++) // Impuls 50 mal senden (1 Sekunde!)
{
StatusLED(RED+statusledgreen); // Implus high ausgeben
Sleep(54); // -45° 0,75ms
StatusLED(statusledgreen); // Implus low ausgeben
p=72*20-54; // Impulspause
while(p > 255)
{
Sleep(255);
p=p-255;
}
Sleep(p);
}
if(statusledgreen == ON) statusledgreen=OFF; // grüne StatusLED umschalten
else statusledgreen=ON;
for(i=0; i<50; i++)
{
StatusLED(RED+statusledgreen);
Sleep(72); // Mitte 1ms
StatusLED(statusledgreen);
p=72*20-72;
while(p > 255)
{
Sleep(255);
p-=255;
}
Sleep(p);
}
if(statusledgreen) statusledgreen=0;
else statusledgreen=1;
for(i=0; i<50; i++)
{
StatusLED(RED+statusledgreen);
Sleep(90); // +45° 0,125ms
StatusLED(statusledgreen);
p=72*20-90;
while(p > 255)
{
Sleep(255);
p-=255;
}
Sleep(p);
}
if(statusledgreen) statusledgreen=0;
else statusledgreen=1;
for(i=0; i<50; i++)
{
StatusLED(RED+statusledgreen);
Sleep(72);
StatusLED(statusledgreen);
p=72*20-72;
while(p > 255)
{
Sleep(255);
p-=255;
}
Sleep(p);
}
// if(statusledgreen) statusledgreen=0;
// else statusledgreen=1;
}
return(0);
}
ungetestet
Gruß
mic
Lesezeichen