inspektors/src/main.c

66 lines
1.0 KiB
C
Raw Normal View History

2017-11-24 13:29:36 +02:00
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "ds18b20.h"
#include "main.h"
#include "io.h"
2017-11-24 17:24:12 +02:00
#ifdef DEBUG
#include "debug.h"
#endif /* DEBUG */
2017-11-24 13:29:36 +02:00
void initIO()
{
2017-11-24 22:14:50 +02:00
/* Servos */
SET_HIGH(DDRB, SERVO_L);
2017-11-24 22:14:50 +02:00
/* Phase Correct PWM, 9-bit; Inverting mode */
TCCR1A |= 1 << WGM11 | 1 << COM1A1 | 1 << COM1A0;
/* "Clear Timer on Compare match" mode; Prescaler = 1 */
TCCR1B |= 1 << WGM13 | 1 << WGM12 | 1 << CS10;
ICR1 = 19999; // F_CPU / 50Hz - 1
/* LED */
SET_HIGH(DDRD, LED_1);
2017-11-24 13:29:36 +02:00
}
void readTemp()
{
double d;
sei();
for (;;) {
d = ds18b20_gettemp();
if (d >= 21)
SET_HIGH(PORTD, LED_1);
2017-11-24 13:29:36 +02:00
else
SET_LOW(PORTD, LED_1);
2017-11-24 13:29:36 +02:00
_delay_ms(500);
}
}
2017-11-24 22:14:50 +02:00
void runServos()
{
/* Stop */
OCR1A = ICR1 - 1500;
_delay_ms(1500);
/* Reverse */
OCR1A = ICR1 - 2000;
_delay_ms(1500);
/* Forwards */
OCR1A = ICR1 - 1000;
_delay_ms(1500);
}
2017-11-24 13:29:36 +02:00
int main(void)
{
initIO();
2017-11-24 22:14:50 +02:00
runServos();
2017-11-24 13:29:36 +02:00
readTemp();
2017-11-24 22:14:50 +02:00
2017-11-24 13:29:36 +02:00
return 0;
}