KT25-1015_AC695x_SDK310/apps/kaotings/kt_fan_ac.c
2026-04-20 14:50:04 +08:00

109 lines
3.2 KiB
C

#include "kt_fan_ac.h"
#include "asm/mcpwm.h"
#include "tone_player.h"
typedef struct _kt_fan_ac_var_ {
kt_fan_level_type front_fan_level; //前风扇档位
kt_fan_level_type rear_fan_level; //后风扇档位
kt_fan_level_type lr_fan_level; //左右风扇档位
kt_ac_level_type ac_level; //空调档位
} _kt_fan_ac_var;
static _kt_fan_ac_var kt_fan_ac_var;
#define __this (&kt_fan_ac_var)
const u32 fan_level_duty[7] = {0, 1500, 4000, 6000, 7000, 8000, 10000};
const u32 ac_level_duty[3] = {0, 1500, 8000};
const char *front_fan_level_tone[7] = {TONE_FFAN_L0, TONE_FFAN_L1, TONE_FFAN_L2, TONE_FFAN_L3, TONE_FFAN_L4, TONE_FFAN_L5, TONE_FFAN_L6};
const char *rear_fan_level_tone[7] = {TONE_BFAN_L0, TONE_BFAN_L1, TONE_BFAN_L2, TONE_BFAN_L3, TONE_BFAN_L4, TONE_BFAN_L5, TONE_BFAN_L6};
const char *lr_fan_level_tone[7] = {TONE_CFAN_L0, TONE_CFAN_L1, TONE_CFAN_L2, TONE_CFAN_L3, TONE_CFAN_L4, TONE_CFAN_L5, TONE_CFAN_L6};
const char *ac_level_tone[3] = {TONE_AC_L0, TONE_AC_L1, TONE_AC_L2};
void kt_fan_ac_init(void)
{
//50KHz
//前风扇 PB5 TIMER3 硬件引脚
//后风扇 PB6
//左右风扇 PA10
//空调 PA11
__this->front_fan_level = fan_level_0;
__this->rear_fan_level = fan_level_0;
__this->lr_fan_level = fan_level_0;
__this->ac_level = ac_level_0;
timer_pwm_init(JL_TIMER3, 50000, 0, IO_PORTB_05, 0); //前风扇
timer_pwm_init(JL_TIMER2, 50000, 0, IO_PORTB_06, 1); //后风扇
timer_pwm_init(JL_TIMER1, 50000, 0, IO_PORTA_10, 2); //左右风扇
timer_pwm_init(JL_TIMER0, 50000, 0, IO_PORTA_11, 3); //空调
}
void kt_fan_level_tone_play(kt_fan_type fan)
{
if (fan == fan_type_front)
{
tone_play(front_fan_level_tone[__this->front_fan_level], 0);
}
else if (fan == fan_type_rear)
{
tone_play(rear_fan_level_tone[__this->rear_fan_level], 0);
}
else if (fan == fan_type_lr)
{
tone_play(lr_fan_level_tone[__this->lr_fan_level], 0);
}
else
{
tone_play(ac_level_tone[__this->ac_level], 0);
}
}
void kt_fan_level_change(kt_fan_type fan)
{
if (fan == fan_type_front)
{
__this->front_fan_level++;
if (__this->front_fan_level > fan_level_6)
{
__this->front_fan_level = fan_level_0;
}
kt_fan_level_tone_play(fan_type_front);
set_timer_pwm_duty(JL_TIMER3, __this->front_fan_level * 1000);
}
else if (fan == fan_type_rear)
{
__this->rear_fan_level++;
if (__this->rear_fan_level > fan_level_6)
{
__this->rear_fan_level = fan_level_0;
}
kt_fan_level_tone_play(fan_type_rear);
set_timer_pwm_duty(JL_TIMER2, __this->rear_fan_level * 1000);
}
else if (fan == fan_type_lr)
{
__this->lr_fan_level++;
if (__this->lr_fan_level > fan_level_6)
{
__this->lr_fan_level = fan_level_0;
}
kt_fan_level_tone_play(fan_type_lr);
set_timer_pwm_duty(JL_TIMER1, __this->lr_fan_level * 1000);
}
else
{
__this->ac_level++;
if (__this->ac_level > ac_level_2)
{
__this->ac_level = ac_level_0;
}
kt_fan_level_tone_play(fan_type_ac);
set_timer_pwm_duty(JL_TIMER0, __this->ac_level * 1000);
}
}