diff options
| -rw-r--r-- | door_lock/servo.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/door_lock/servo.c b/door_lock/servo.c index c3a5f5e..5154e11 100644 --- a/door_lock/servo.c +++ b/door_lock/servo.c @@ -5,9 +5,10 @@ #include "cmd.h" #include "serial.h" -#define PWM_MIN 500 -#define PWM_MID 1500 -#define PWM_MAX 2500 +#define PWM_MIN 500 +#define PWM_MID 1500 +#define PWM_MAX 2500 +#define PWM_TOP 20000 #define PWM_LOCK PWM_MID #define PWM_UNLOCK PWM_MAX - 50 @@ -16,27 +17,18 @@ #define LOCK_BTN PD6 #define UNLOCK_BTN PD7 -static inline void servo_init(void) -{ - DDRB |= (1 << SERVO_PIN); - - TCCR1A |= (1 << WGM11) | (1 << COM1A1); - TCCR1B |= (1 << WGM13) | (1 << CS11); - - ICR1 = 20000; - - DDRD &= ~((1 << LOCK_BTN) | (1 << UNLOCK_BTN)); - PORTD |= (1 << LOCK_BTN) | (1 << UNLOCK_BTN); -} - static inline void lock(void) { OCR1A = PWM_LOCK; + _delay_ms(100); + OCR1A = PWM_TOP; } static inline void unlock(void) { OCR1A = PWM_UNLOCK; + _delay_ms(100); + OCR1A = PWM_TOP; } static inline int is_btn_pressed(unsigned char btn) @@ -55,6 +47,19 @@ static inline void pcint2_init(void) PCMSK2 |= ((1 << PCINT22) | (1 << PCINT23)); } +static inline void servo_init(void) +{ + DDRB |= (1 << SERVO_PIN); + + TCCR1A |= (1 << WGM11) | (1 << COM1A1); + TCCR1B |= (1 << WGM13) | (1 << CS11); + + ICR1 = PWM_TOP; + + DDRD &= ~((1 << LOCK_BTN) | (1 << UNLOCK_BTN)); + PORTD |= (1 << LOCK_BTN) | (1 << UNLOCK_BTN); +} + int main(void) { cli(); |
