Ich habe den Code auf 3 Servos erweitert:
Code:
#include "asuro.h"
unsigned char i, j, k, servo_stellzeit;
void servo1(unsigned char winkel)
{
unsigned int count=0;
do{
count++;
if (ON) {
DDRB |= (1 << PB0);
PORTB |= (1 << PB0);
}
Sleep(winkel);
if (!OFF) PORTB &= ~(1 << PB0);
Sleep(255); Sleep(255); Sleep(255);
}while (count<servo_stellzeit);
}
void servo2(unsigned char winkel)
{
unsigned int count=0;
do{
count++;
if (ON) {
DDRB |= (1 << PB1);
PORTB |= (1 << PB1);
}
Sleep(winkel);
if (!OFF) PORTB &= ~(1 << PB1);
Sleep(255); Sleep(255); Sleep(255);
}while (count<servo_stellzeit);
}
void servo3(unsigned char winkel)
{
unsigned int count=0;
do{
count++;
if (ON) {
DDRB |= (1 << PB2);
PORTB |= (1 << PB2);
}
Sleep(winkel);
if (!OFF) PORTB &= ~(1 << PB2);
Sleep(255); Sleep(255); Sleep(255);
}while (count<servo_stellzeit);
}
int main(void) {
Init();
do{
servo_stellzeit=35;
servo1(51);
servo2(51);
servo3(51);
servo1(90);
servo2(90);
servo3(90);
servo1(51);
servo2(51);
servo3(51);
servo1(15);
servo2(15);
servo3(15);
servo_stellzeit=2;
for (i=15; i<88; i+=2) servo1(i);
for (j=15; j<88; j+=2) servo2(j);
for (k=15; k<88; k+=2) servo3(k);
for (i=90; i>17; i-=2) servo1(i);
for (j=90; j>17; j-=2) servo2(j);
for (k=90; k>17; k-=2) servo3(k);
}while (1);
return 0;
}
Nun arbeiten alle 3 Servos brav nacheinander ihre Drehpostitionen ab. Einen Weg dass z.B. 2 Servos nahezu gleichzeitig drehen habe ich noch keinen gefunden.
Lesezeichen