
#include "stm32f10x.h"
#include "rotate_motor.h"
#include "walking_motor.h"
#include "uart_log.h"
#include "common.h"
#include "pneumatic_solenoid.h"
#include "ds18b20.h"
#include "parking_sensor.h"


int main(void) {


    Total_GPIO_Init();

    Total_EXTI_Init();

    Serial_Init();

    TIM7_Init();



    // 定义步进电机结构体
    RotateMotor motor = {
        .base={
            .stepcount = 0,          // 初始步数
            .direction = 1,          // 初始方向（1：顺时针）
            .curSpeed = 0,           // 初始速度为0
            .desSpeed = 0,           // 目标速度
            .maxSpeed = 9375,        // 最大转速（假设值）
            .speedStatus = SPEED_NONE, // 初始速度状态
            .stepcountMode =ABSOLUTE_COUNT,      // 脉冲计数模式
            .curlocation = 0,        // 当前位置
            .deslocation = 0,        // 目标位置
            .acceleration = 1000,    // 加速度 (步/秒^2)
            .deceleration = 1000,    // 减速度 (步/秒^2)
            .psc = 71,               // 预分频器
            .arr = 999               // 自动重装载寄存器
        }
    };

    // 初始化定时器 TIM3
    TIM3_CH1_Init(motor.base.psc, motor.base.arr);
    TIM3_CH2_Init(motor.base.psc, motor.base.arr);

    SystemState currentState = STATE_IDLE;
    // 设置初始方向（例如顺时针）
    Rotate_SetDirection(motor.base.direction);

    // 使能步进电机
    Rotate_Enable_Rotate(true);

    Walking_SetDirection(motor.base.direction);

    // 使能或禁用旋转电机
    Walking_Enable_Rotate(true);



    Pneumatic_Solenoid_Control(0,1);


    Buzzer_On();

    // 配置 PE14 为推挽输出
    Configure_PE_Pin(14, 0x3);

    // 初始化 TIM2 捕获模式
    TIM2_Capture_Init();


    SendTriggerSignal(14);



    float temperature;;

    while(DS18B20_Init())
    {
        Serial_Print("DS18B20 checked failed!!!\r\n");
    }
    float temperature=DS18B20_Get_Temperature();


    if(temperature < 0)
        Serial_Printf("temperature = -%.2f degree\r\n",temperature/10);
    else
        Serial_Printf("temperature = %.2f degree\r\n",temperature/10);





    // 主循环
    while (1) {
        StateMachineHandler(currentState);
        Serial_Print("main: 启动\n");


//		GPIOC->ODR |= (1 << 4);  // 设置低电平
//			Delay(2000); // 延时1秒
        GPIOC->ODR &= ~(1 << 4);    //设置高电平
//			Delay(2000); // 延时1秒
//			GPIOC->ODR |= (1 << 4);  // 设置高电平
//			Delay(2000); // 延时1秒
//			GPIOC->ODR &= ~(1 << 4);
//			Delay(2000); // 延时1秒
//			GPIOC->ODR |= (1 << 4);  // 设置高电平
//			Delay(2000); // 延时1秒
//			GPIOC->ODR &= ~(1 << 4);
//			Delay(2000); // 延时1秒
//			GPIOC->ODR |= (1 << 4);  // 设置高电平
//			Delay(2000); // 延时1秒
        // 例子：加速到目标速度
        Update_Motor_Status(&motor, SPEED_ACC, 9375, 1000); // 以1000 RPM/s的加速度加速到9375 RPM

        // 保持匀速一段时间
        Delay(5000,'s'); // 延时5秒

        // 例子：减速到停止
        Update_Motor_Status(&motor, SPEED_DEC, 0, 1000); // 以1000 RPM/s的减速度减速到停止

        // 保持停止一段时间
        Delay(5000,'s'); // 延时5秒
    }
}

