double readTemperature() {
// read temperature from LM35 sensor
int val = analogRead(TEMP_SENSOR_PIN);
double mv = (val / 1024.0) * 5000;
double cel = mv / 10;
return cel;
}
void ADC_init() {
// initialize ADC
ADMUX |= (1 << REFS0); // use AVcc as reference voltage
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // set prescaler to 128
ADCSRA |= (1 << ADEN); // enable ADC
}
void PWM_init() {
// initialize PWM
TCCR1A |= (1 << COM1A1) | (1 << WGM11); // set non-inverting mode and Fast PWM mode with TOP=ICR1
TCCR1B |= (1 << WGM12) | (1 << WGM13) | (1 << CS11); // set Fast PWM mode with TOP=ICR1 and prescaler to 8
ICR1 = 255; // set TOP value
}