#include "servo.h" #include "../ard/pins.h" #include "../ard/util.h" #include #include #include #define MAX_SERVOS 8 #define SERVO_DELTA_MIN_US 1000 #define SERVO_DELTA_US 1000 Servo* servos[MAX_SERVOS]; unsigned char servo_n = 0, servo_i = 0; void servo_init(unsigned char pin, Servo* servo){ if(servo_n >= MAX_SERVOS){ return; } (*servo).no = servo_n; (*servo).pin = pin; servos[servo_n] = servo; servo_n++; pin_mode(pin, OUTPUT); servo_set(servo, 128); sei(); TCCR1A = 0x00; TCCR1B = (1< 0){ servo_i = 0; OCR1B = (*servos[0]).timer; digital_write((*servos[0]).pin, HIGH); } } ISR(TIMER1_COMPB_vect){ digital_write((*servos[servo_i]).pin, LOW); if(servo_i < servo_n-1){ servo_i++; OCR1B = (*servos[servo_i]).timer; digital_write((*servos[servo_i]).pin, HIGH); } }