#include #include #include #include "avr-hd44780/lcd.h" #include "i2c_peter/i2cmaster.h" #include uint8_t pgm = 0; uint8_t pvw = 0; typedef struct { uint8_t cam; uint8_t front_enabled; uint8_t pvw_enabled; } settings_t; uint8_t setting_limits[sizeof(settings_t)] = { 32, 2, 2 }; volatile union{ settings_t settings; uint8_t arr[sizeof(settings_t)]; } menu; void* EEMEM settings_saved; volatile uint8_t menu_state = 0; volatile uint8_t update = 1; #define SDI_SHIELD_ADDR 0x84 #define VF_BACK_PVW_TALLY_PIN 0 #define VF_BACK_PGM_TALLY_PIN 1 #define LENS_PGM_TALLY_PIN 2 #define VF_FRONT_PGM_TALLY_PIN 3 void enc_init(){ PORTC |= (1<<2) | (1 << 3); _delay_ms(10); PCMSK1 |= (1<> 8); i2c_write(val); i2c_stop(); } uint8_t sdi_shield_read(uint16_t addr){ i2c_start_wait(SDI_SHIELD_ADDR + I2C_WRITE); // set device address and write mode i2c_write(addr & 0xFF); i2c_write(addr >> 8); i2c_rep_start(SDI_SHIELD_ADDR + I2C_READ); // set device address and read mode uint8_t data = i2c_readNak(); i2c_stop(); return data; } int main(void){ DDRB |= 1< setting_limits[0]) menu.settings.cam = 0; enc_init(); btn_init(); lcd_init(); lcd_on(); lcd_clear(); i2c_init(); // initialize I2C library DDRC |= 1<<1; PORTB |= (1<