#include "stm32c0xx.h"
#include <stdio.h>
#include <math.h>

// Пины для I2C
#define SDA_PIN 9   // PA9 (I2C SDA)
#define SCL_PIN 10  // PA10 (I2C SCL)

// Кнопка
#define BTN_PIN 3   // PA3 (цифровой вход)

// Глобальные переменные
float roll = 0, pitch = 0, yaw = 0;
uint8_t update_flag = 0;

// Функции
void init_gpio(void);
void init_i2c(void);
void read_mpu6050(float *roll, float *pitch, float *yaw);
void delay_ms(uint32_t ms);


int main(void) {
    init_gpio();
    init_i2c();

    while (1) {
        
        if (!(GPIOA->IDR & (1 << BTN_PIN))) {  
            read_mpu6050(&roll, &pitch, &yaw);
            
            delay_ms(200);  
        }
    }
}

// Инициализация GPIO (кнопка)
void init_gpio(void) {
    RCC->IOPENR |= (1 << 0); // Включаем тактирование GPIOA

    // Настраиваем кнопку как вход с Pull-Up
    GPIOA->MODER &= ~(3 << (BTN_PIN * 2));  // Вход (00)
    GPIOA->PUPDR |= (1 << (BTN_PIN * 2));   // Включаем Pull-Up (01)
}

// Инициализация I2C (MPU6050 и OLED)
void init_i2c(void) {
    RCC->APBENR1 |= RCC_APBENR1_I2C1EN;
    I2C1->TIMINGR = 0x00303D5B;  // Частота 100 кГц
    I2C1->CR1 |= I2C_CR1_PE;     // Включаем I2C
}

// Читаем данные с MPU6050
void read_mpu6050(float *roll, float *pitch, float *yaw) {
   // 
}


// Функция задержки
void delay_ms(uint32_t ms) {
    for (volatile uint32_t i = 0; i < ms * 500; i++);
}