#define true 1 #define false 0 #define interrpt PB2 // IN #define mainsvoltagefet PB0 // OUT #define LCDenable PA4 // OUT #define shutter PA6 // OUT #define statusled PA5 // OUT #define onoff PA7 // OUT #define time PA3 // IN #define brownoutdetect PA2 // IN-ADC #define LDR PA1 // IN-ADC #define OnOffDelay 1500 #define ShutterDelay 3950 #define voltagedrop 80 // Percent of initial voltage before switching off the device. #define KEY_DDR DDRA #define KEY_PORT PORTA #define KEY_PIN PINA #define daylight 1 #define night 2 // Function prototypes /*------------------------------------------------------------------*/ void init(); void setbatterystartvoltage(void); void warten(uint16_t Zeitintervall, uint8_t status); void helligkeitauslesen(); void signal(uint8_t counter); void interruptBewegungsmelder(); int main(); uint16_t ADC_Read(uint8_t channel); uint16_t ADC_Read_Avg(uint8_t channel, uint8_t average); void ADC_Init(void); void ADC_shutdown(void); void ON(void); void OFF(void); void Shutterrelease(void); void takepicture(void); void controlmainsvoltage( void ); /*------------------------------------------------------------------*/ uint8_t i = 0; uint16_t helligkeit, pause; volatile uint8_t key_state = 0; // debounced and inverted key state: bit = 1: key pressed volatile uint8_t key_press = 0; // key press detect volatile uint8_t intervall = 0; volatile uint8_t buttonpressed = false; volatile uint8_t startvoltage; uint16_t pausendauer_16[] PROGMEM = { 8, 11, 26, 56, 146, 296, 446, 896, 1796, 3596, 7196, 14396 }; /* timing tested for 1min 26 5min 146 10min 296 Each unit in pausendauer equals to 2s of waiting time. */