#define PBA_DIR (*((volatile uint8_t*)0x24))
#define PB_DATA (*((volatile uint8_t*)0x25))
#define Adcsra (*((volatile uint8_t*)0x7A))
#define Admux (*((volatile uint8_t*)0x7C))
#define WDTCSR (*(volatile uint8_t*)0x60) // Watchdog Timer Control Register
#define MCUSR (*(volatile uint8_t*)0x54) // MCU Status Register
#define Aden 7
#define Adps0 0
#define Adps1 1
#define Adps2 2
#define Adsc 6
#define Refs0 6
// WDTCSR Bits
#define WDE 3 // Watchdog Enable
#define WDIE 6 // Watchdog Interrupt Enable
#define WDP0 0 // Watchdog Prescaler bit 0
#define WDP1 1 // Watchdog Prescaler bit 1
#define WDP2 2 // Watchdog Prescaler bit 2
#define WDP3 5 // Watchdog Prescaler bit 3
void delays(volatile long i){
i*=1000;
while(i--){}
}
void setup_watchdog() {
// Clear WDRF in MCUSR (Watchdog Reset Flag)
MCUSR &= ~(1 << 3);
// Write logical one to WDE and WDCE to enable changes to WDTCSR
WDTCSR |= (1 << WDE) | (1 << 4);
WDTCSR = (1 << WDE) | (1 << WDP3) | (1 << WDP0); // Set timeout to 8s
}
void reset_wtd() {
// Reset the watchdog timer (WDR)
asm volatile("wdr");
}
void adc_init(){
Adcsra |= (1<<Aden)|(1<<Adps0)|(1<<Adps1)|(1<<Adps2);
Admux |= (1<<Adsc);
}
void portB_pin_on(uint8_t pin) {
PB_DATA = pin;
}
int main(){
setup_watchdog();
Serial.begin(115200);
adc_init();
PBA_DIR |= (0xFF);
PB_DATA &= ~(0xFF);
uint8_t fans = 0x01;
uint8_t ventilation = 0x02;
uint8_t lights = 0x04;
uint8_t irrigation = 0x08;
uint8_t heater = 0x10;
while(1){
uint8_t channel = 0;
Admux = (Admux & 0xF0)|(channel & 0x0F);
Adcsra |= (1<<6);
while (Adcsra & (1 << 6));
uint16_t value = ADC;
Serial.println(value);
//PB_DATA = 0x00;
if(value>300 && value<=400){
portB_pin_on(fans);
}else if(value>400 && value<=500){
portB_pin_on(ventilation);
}else if(value>500 && value<=600){
portB_pin_on(lights);
}else if(value>600 && value<=700){
portB_pin_on(irrigation);
}else if(value>700 && value<=800){
portB_pin_on(heater);
}else if(value<300){
PB_DATA &= ~(0xFF);
}else if(value>800){
PB_DATA &= ~(0xFF);
}
reset_wtd();
}
}
Cooling_fans_PWM
Ventilation_RLY
Grow_lights_PWM
Irrigation_RLY
Heater_RLY