#include #include "i2c.h" #include "pwm.h" #define I2C_ADDRESS 0x20 void send_data(void) { // read state of PWM from master and send to slave i2c_start(); i2c_write_byte(I2C_ADDRESS | I2C_WRITE); i2c_write_byte(0x00); i2c_start(); i2c_write_byte(I2C_ADDRESS | I2C_READ); uint8_t state = i2c_read_byte(0); i2c_stop(); // set PWM state if (state) { TCCR1B |= (1< 1.0) ? 1.0 : frequency; set_frequency(frequency); } void decrease_frequency(void) { // decrease PWM frequency by 20% float frequency = ICR1 * 0.8 / PWM_MAX_FREQ; set_frequency(frequency); } void set_duty_cycle(float duty_cycle) { // set PWM duty cycle pwm_set_duty_cycle(duty_cycle); } void increase_duty_cycle(void) { // increase PWM duty cycle by 10% float duty_cycle = OCR1A * 1.1 / ICR1; duty_cycle = (duty_cycle > 1.0) ? 1.0 : duty_cycle; set_duty_cycle(duty_cycle); } void decrease_duty_cycle(void) { // decrease PWM duty cycle by 10% float duty_cycle = OCR1A * 0.9 / ICR1; set_duty_cycle(duty_cycle); } int main(void) { // initialize I2C and PWM i2c_init(); pwm_init(); // set default PWM frequency and duty cycle set_frequency(1000); set_duty_cycle(0.5); // main loop while (1) { send_data(); // read buttons and execute actions if (!(PIND & (1<