Senaryo:
Motor değeri %0 ile %100 arasında değişir.
Butona her basıldığında motor değeri %5 artar.
Motor değeri %100'e ulaştığında sıfırlanır.
Motor değeri aralığına göre LED'ler yanar:
%0 - %25: 1. LED, parlaklık 10.
%25 - %50: 2. LED, parlaklık 20.
%50 - %75: 3. LED, parlaklık 30.
%75 - %100: 4. LED, parlaklık 40.
A0 butonuna basıldıkça motor değeri %5 artar.
İlgili Kod ;
unsigned int period;
int i = 0;
void main()
{
period = PWM_TIM4_Init(10000);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL1);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL2);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL3);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL4);
PWM_TIM4_Start(_PWM_CHANNEL1, &_GPIO_MODULE_TIM4_CH1_PD12);
PWM_TIM4_Start(_PWM_CHANNEL2, &_GPIO_MODULE_TIM4_CH2_PD13);
PWM_TIM4_Start(_PWM_CHANNEL3, &_GPIO_MODULE_TIM4_CH3_PD14);
PWM_TIM4_Start(_PWM_CHANNEL4, &_GPIO_MODULE_TIM4_CH4_PD15);
GPIO_Digital_Input(&GPIOA_IDR, _GPIO_PINMASK_0);
while (1)
{
if (GPIOA_IDR.B0 == 1)
{
i += 5; // Motor değerini %5 artır
if (i > 100)
{
i = 0; // %100'ü geçtiyse sıfırla
}
if (i > 0 && i <= 25)
{
PWM_TIM4_Set_Duty((period / 100) * 10, _PWM_NON_INVERTED, _PWM_CHANNEL1);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL2);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL3);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL4);
}
else if (i > 25 && i <= 50)
{
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL1);
PWM_TIM4_Set_Duty((period / 100) * 20, _PWM_NON_INVERTED, _PWM_CHANNEL2);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL3);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL4);
}
else if (i > 50 && i <= 75)
{
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL1);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL2);
PWM_TIM4_Set_Duty((period / 100) * 30, _PWM_NON_INVERTED, _PWM_CHANNEL3);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL4);
}
else if (i > 75 && i <= 100)
{
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL1);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL2);
PWM_TIM4_Set_Duty(0, _PWM_NON_INVERTED, _PWM_CHANNEL3);
PWM_TIM4_Set_Duty((period / 100) * 40, _PWM_NON_INVERTED, _PWM_CHANNEL4);
}
delay_ms(10);
}
}
}