void onResourceInitialization(void) { for (unsigned i = 0; i < c_servo_count; ++i) { enableServo(i); actuateServo(i, 0); } }
void setServoPosition(void) { uint32_t elapsedMinutes; /* using 32 bits b/c elapsedMinutes * PULSE_RANGE will overflow 16 bits */ elapsedMinutes = (hours - START_TIME) * 60 + minutes; OCR1A = PULSE_MIN + elapsedMinutes * PULSE_RANGE / (HOURS_RANGE * 60); enableServo(); }
void everyMinute(void) { minutes++; if (minutes > 59) { minutes = 0; everyHour(); } // If during business hours, set servo to new minute // Otherwise, don't need to move moter when laser is off if ((hours >= START_TIME) && (hours < STOP_TIME)) { setServoPosition(); enableServo(); LASER_PORT |= (1 << LASER); /* make sure laser is on */ } else { LASER_PORT &= ~(1 << LASER); /* make sure laser is off */ } }