рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛ!
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рднрд░рдиреЗ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ
рд╕рд╛рде рдЕрдкрдиреА рдкрд┐рдЫрд▓реА
рдкреЛрд╕реНрдЯ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред

рд▓реБрди 1.0
рдкрд╣рд▓рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛: stm32vl- рдбрд┐рд╕реНрдХрд╡рд░реА, рдПрдХ рдкреНрд░рд╛рдЪреАрди рд░реЗрдбрд┐рдпреЛ-рдирд┐рдпрдВрддреНрд░рд┐рдд рдорд╢реАрди рд╕реЗ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ рдореЛрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП 2 рдЗрдирд╡рд░реНрдЯрд░ред рдпрджрд┐ рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдлрд░реНрдорд╡реЗрдпрд░ рдореЗрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд▓реЗрдЖрдЙрдЯ рдореЗрдВ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдерд╛ред рд╕рдм рдХреБрдЫ stm32vl- рдбрд┐рд╕реНрдХрд╡рд░реА рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХреЛрдб рдХреЛрдЗрдб рдореЗрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдХ рдХрдо рдзрдиреБрд╖ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдпрд╣ рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдореИрдВ рдПрд╡реАрдЖрд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЪрдврд╝ рд╕рдХрддрд╛ рдерд╛ред
рдкреНрд░рдмрдВрдзрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ред рдПрд╕рд╡реАрдкреА рдореЗрдВ, рддреАрди рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдФрд░ рдХрдВрд╕реЛрд▓ рдиреЗ рдХреЗрд╡рд▓ рджреЛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдХрд┐рд╕реА рддрд░рд╣ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдерд╛, "рдЖрдЧреЗ" рдмрдЯрди рдиреЗ рдХрд░реНрд╖рдг рдкреЗрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛, "рдмреИрдХ" рдмрдЯрди рдиреЗ рдкреЛрдд рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛, рдФрд░ рдЬрд╣рд╛рдЬ рдХреЛ рдбреАрдмрдЧ рдмреЛрд░реНрдб рдкрд░ рдмрдЯрди рджрдмрд╛рдХрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд░реНрдорд╡реЗрдпрд░#include <stm32f10x.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
#include <stm32f10x_tim.h>
# рдЕрд▓рдЧ рдХрд░реЗрдВ <misc.h>
рд╢реВрдиреНрдп init_leds ();
рд╢реВрдиреНрдп init_motors ();
рд╢реВрдиреНрдп init_timer ();
рд╢реВрдиреНрдп init_button ();
рд╢реВрдиреНрдп Delay_sig ();
int sec = 0;
int sm1 = 1000;
int m1 = 750;
int m2 = 750;
int i, l;
uint8_t r1 = 0, r2 = 0, r3 = 0, r4 = 0;
#define рдкрд╣рд▓реЗ_рдореЛрдЯрд░ GPIO_Pin_10
#define second_motor GPIO_Pin_12
#define рд╕рд░реНрд╡реЛ_рдореЛрдЯрд░ GPIO_Pin_11
#define blue_led GPIO_Pin_8
#define green_led GPIO_Pin_9
#define рд░реЗрдбрд┐рдпреЛ 4 GPIO_Pin_8
#define рд░реЗрдбрд┐рдпреЛ 3 GPIO_Pin_9
#define рд░реЗрдбрд┐рдпреЛ 2 GPIO_Pin_10
#define рд░реЗрдбрд┐рдпреЛ 1 GPIO_Pin_11
#define BUTTON GPIO_Pin_0
int main ()
{
init_leds ();
init_button ();
init_motors ();
init_timer ();
SysTick_Config (SystemCoreClock / 300);
рдХрд░рдирд╛
{
r1 = GPIO_ReadInputDataBit (GPIOA, radio1);
r2 = GPIO_ReadInputDataBit (GPIOA, radio2);
r3 = GPIO_ReadInputDataBit (GPIOA, рд░реЗрдбрд┐рдпреЛ 3);
r4 = GPIO_ReadInputDataBit (GPIOA, radio4);
} рдЬрдмрдХрд┐ (1);
}
рд╢реВрдиреНрдп SysTick_Handler ()
{
рд╕реНрдерд┐рд░ uint8_t btn_old_state = 0;
uint8_t btn_state = GPIO_ReadInputDataBit (GPIOA, BUTTON);
рдЕрдЧрд░ (btn_old_state == 0 && btn_state == 1)
{
if (m1 <1000) m1 = m1 + 50;
}
рдЕрдЧрд░ (r1 == 1)
{
if (sm1 <1600) sm1 = sm1 + 10;
}
рдЕрдиреНрдпрдерд╛
{
if (sm1> 1000) sm1 = sm1-10;
}
рдЕрдЧрд░ (r3 == 1)
{
рдПрдо 2 = 900;
}
рдЕрдиреНрдпрдерд╛
{
рдПрдо 2 = 750;
}
рдЕрдЧрд░ (r2 == 1)
{
if (sm1> 400) sm1 = sm1-10;
}
рдЕрдиреНрдпрдерд╛
{
if (sm1 <1000) sm1 = sm1 + 10;
}
рдЕрдЧрд░ (r4 == 1)
{
рдПрдо 1 = 750;
}
btn_old_state = btn_state;
}
рд╢реВрдиреНрдп init_leds ()
{
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC, рд╕рдХреНрд╖рдо);
GPIO_InitTypeDef gpio;
GPIO_StructInit (& gpio);
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Pin = blue_led | green_led;
GPIO_Init (GPIOC, & gpio);
GPIO_ResetBits (GPIOC, blue_led);
GPIO_ResetBits (GPIOC, green_led);
}
рд╢реВрдиреНрдп init_motors ()
{
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC, рд╕рдХреНрд╖рдо);
GPIO_InitTypeDef gpio;
GPIO_StructInit (& gpio);
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Pin = first_motor | second_motor | servo_motor
GPIO_Init (GPIOC, & gpio);
GPIO_ResetBits (GPIOC, first_motor);
GPIO_ResetBits (GPIOC, second_motor);
GPIO_ResetBits (GPIOC, рд╕рд░реНрд╡реЛ_рдореЛрдЯрд░);
}
рд╢реВрдиреНрдп init_button ()
{
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA, рд╕рдХреНрд╖рдо);
GPIO_InitTypeDef gpio;
GPIO_StructInit (& gpio);
gpio.GPIO_Mode = GPIO_Mode_IPD;
gpio.GPIO_Pin = BUTTON | Radio1 | Radio2 | radio3 | radio4 | BT_en |
gpio.GPIO_Speed тАЛтАЛ= GPIO_Speed_2MHz;
GPIO_Init (GPIOA, & gpio);
}
рд╢реВрдиреНрдп init_timer ()
{
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM6, рд╕рдХреНрд╖рдо);
TIM_TimeBaseInitTypeDef base_timer;
TIM_TimeBaseStructInit (& base_timer);
base_timer.TIM_Prescaler = 12000 - 1;
base_timer.TIM_Period = 20;
TIM_TimeBaseInit (TIM6, рдФрд░ base_timer);
TIM_ITConfig (TIM6, TIM_IT_Update, ENABLE);
TIM_Cmd (TIM6, рд╕рдХреНрд╖рдо);
NVIC_EnableIRQ (TIM6_DAC_IRQn);
}
рд╢реВрдиреНрдп рд╡рд┐рд▓рдВрдм_ ()
{
int int = 0;
for (us = 0; us <5000; us ++)
{
if (us == sm1) {GPIO_ResetBits (GPIOC, рдЗрдорджрд╛рджреА_рдореЛрдЯрд░)};
if (us == m1) {GPIO_ResetBits (GPIOC, first_motor);};
if (us == m2) {GPIO_ResetBits (GPIOC, second_motor);};
}
}
рд╢реВрдиреНрдп TIM6_DAC_IRQHandler ()
{
рдЕрдЧрд░ (TIM_GetITStatus (TIM6, TIM_IT_Update)! = RESET)
{
TIM_ClearITPendingBit (TIM6, TIM_IT_Update);
GPIO_SetBits (GPIOC, first_motor);
GPIO_SetBits (GPIOC, second_motor);
GPIO_SetBits (GPIOC, рд╕рд░реНрд╡реЛ_рдореЛрдЯрд░);
Delay_sig ();
}
}
рд▓реБрди 2.0
рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд░реЛрдмреЛрдЯ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХ рднрд╛рдЧ рдореЗрдВ рдмреИрд╕рд╛рдЦреА рдХрд╛ рдПрдХ рдкрд╣рд╛рдбрд╝ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд╣рд▓реА рдЪреАрдЬ рд╣рдордиреЗ рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, MPU-6050 рд╕реЗрдВрд╕рд░ рдФрд░ рдмреНрд▓реВрдЯреВрде рдореЙрдбреНрдпреВрд▓ HC-04 рдЦрд░реАрджреЗ рдЧрдПред
рдмреНрд▓реВрдЯреВрде рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдПрдХреНрд╕реАрд▓рд░реЛрдореАрдЯрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред рдкрд╣рд▓реЗ, рдСрдкрд░реЗрд╢рди рдХреЗ 10 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж, рд╡рд╣ рдмрдВрдж рд╣реЛ рдЧрдпрд╛, рдФрд░ рдлрд┐рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред
рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реА рд▓реЗрдЖрдЙрдЯ рдпреЛрдЬрдирд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛:

рдореБрдЦреНрдп рдирд┐рд░рд╛рд╢рд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдерд╛ рдХрд┐ CoIDE STM32F303 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ, рдЙрд╕реА рдЧреНрд░рд╣рдг рдХреА рдПрдХ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╕рднрд╛ - рдПрдЯреЛрд▓рд┐рдХ рдЯреНрд░реВрд╕реНрдЯреБрдбрд┐рдУ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓рд╛рдЗрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдХрд▓рд┐рдд рдлрд░реНрдорд╡реЗрдпрд░ (32KB рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ) рдХреЗ рдЖрдХрд╛рд░ рддрдХ рд╕реАрдорд┐рдд рдерд╛, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рдерд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреВрд╕рд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓реА рдЧрдИред
рдПрд╕рдЯреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░, рдЖрдк рдЗрд╕ рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рд╕рдиреНрди рдХрд┐рдпрд╛ред рд╕рдорд╕реНрдпрд╛ рддрдм рд╕рд╛рдордиреЗ рдЖрдИ рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреЛрдб рдХрд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдмрд╕ рдкрд┐рдЫрд▓реЗ рдлрд░реНрдорд╡реЗрдпрд░ рд╕реЗ рдХреЛрдб рдХреЛ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, STM32f3 рдореЗрдВ, STM32f100 рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ, рдХрдИ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЙрд╕ рд╕рдордп рд╣рдореЗрдВ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓реЗ, рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ рдмреЛрд░реНрдб рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдмрд┐рдХреНрд░реА рдкрд░ рдерд╛ред рд╕рдорд╕реНрдпрд╛рдПрдБ рддрдм рдЬреЛрдбрд╝реА рдЧрдИрдВ рдЬрдм рд╣рдордиреЗ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдореИрдВрдиреЗ рд▓реЗрдЦ
"STM32 + DHT11" рд╕реЗ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХреЛрдб рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд▓рд┐рдЦреЗ рдлрд░реНрдорд╡реЗрдпрд░ рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдпрд╣ рд╕рд┐рд░реНрдл рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдпрд╛ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдХреЛрдб рд╣рдардкреВрд░реНрд╡рдХ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рджреЛ рджрд┐рдиреЛрдВ рдФрд░ рдХрдИ рддрдВрддреНрд░рд┐рдХрд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╣рддреНрдпрд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА рдЬреЛ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА, рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлрд░реНрдорд╡реЗрдпрд░ рдХрд╛ рдЖрдХрд╛рд░ 32K рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рд▓рдЧрд╛, рдореБрдЭреЗ рдПрдХ рдирдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдереАред рдХреБрдЫ рд╕рдордп рдХреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рдЧреНрд░рд╣рдг-рдЖрдзрд╛рд░рд┐рдд рдЖрдИрдбреАрдИ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ
рд▓реЗрдЦ рдЖрдпрд╛ред рдпрд╣ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рдмреНрд▓реВрдЯреВрде рдореЙрдбреНрдпреВрд▓ рдХреА рдЦрд░реАрдж рдХреЗ рд╕рд╛рде, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рд╣реБрдЖред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрднреА рдЖрд╡реЗрджрди рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рдерд╛ред рдЖрд▓реЗрдЦреАрдп рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдмрдЯрди рдХреИрд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдЗрд╕рдХреА рдЧрд▓рддрдлрд╣рдореА рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдорд╛рдкрди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдерд╛ред
рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЗрдЖрдЙрдЯ рдХреЛ рдирдпрд╛ рд╕реНрд╡рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рд╕рдорд░реНрдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдзрдбрд╝, рд╕реНрдХрд░реНрдЯ рдФрд░ рдорд╕реНрддреВрд▓ред рдЗрдВрдЬрди рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрд╡рд┐рдЪрдмреЛрд░реНрдб рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдореИрдВ рд▓реЗрдЦ рдХреЗ рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рд▓рд╛рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреВрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдереЗред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ:
0. рд╕рд░реНрд╡реЛ рдФрд░ рдЗрдирд╡рд░реНрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
1. рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ;
2. рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ;
3. рдлреЛрди рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рднреЗрдЬреЗрдВ;
4. рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд░реЛрдХреЗрдВ рдпрд╛ рдЬрд╛рдПрдВ;
5. рдПрдХ рдЙрдкрдпреБрдХреНрдд рдорд╛рд░реНрдЧ рдЦреЛрдЬреЗрдВ;
6. рдкрд░рд┐рдзреАрдп рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ;
7. рдмреИрдЯрд░реА рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд╣рд░ рди рдЬрд╛рдиреЗ рджреЗрдВред
рдкреАрдбрдмреНрд▓реВрдПрдо рдкрд░ рддреАрди рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкреЙрдЗрдВрдЯ рдЬреАрд░реЛ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

, рдЬрд╣рд╛рдВ рд▓рдВрдмрд╡рдд рдПрдХ рд╕реЗрд▓ 0.4 рд╡реЛрд▓реНрдЯ рд╣реИ, рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рдПрдХ рд╕реЗрд▓ 2.5 рдПрдордПрд╕ рд╣реИред
PWM рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
рд╢реВрдиреНрдп TIM_Init ()
{
uint16_t Channel1Pulse = 139, Channel2Pulse = 104, Channel3Pulse = 104;
TIM_Config ();
/ * TIM1 рдШрдбрд╝реА рд╕рдХреНрд╖рдо рдХрд░реЗрдВ * /
RCC_APB2PeriphClockCmd (RCC_APB2Periph_TIM1, ENABLE);
/ * рд╕рдордп рдЖрдзрд╛рд░ рд╡рд┐рдиреНрдпрд╛рд╕ * /
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t) ((SystemCoreClock / 100000));
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = (1000);
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit (TIM1, & TIM_TimeBaseStructure);
/ * рдЪреИрдирд▓ 1, рдкреАрдбрдмреНрд▓реВрдПрдо рдореЛрдб рдореЗрдВ 2,3 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди * /
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init (TIM1, & TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse = Channel2Pulse;
TIM_OC2Init (TIM1, & TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse = Channel3Pulse;
TIM_OC3Init (TIM1, & TIM_OCInitStructure);
/ * TIM1 рдХрд╛рдЙрдВрдЯрд░ рд╕рдХреНрд╖рдо * /
TIM_Cmd (TIM1, рд╕рдХреНрд╖рдо);
/ * TIM1 рдореБрдЦреНрдп рдЖрдЙрдЯрдкреБрдЯ рд╕рдХреНрд╖рдо * /
TIM_CtrlPWMOutputs (TIM1, рд╕рдХреНрд╖рдо);
}
рдЧрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:
TIM_OCInitStructure.TIM_Pulse = n;
TIM_OC1Init (TIM1, & TIM_OCInitStructure);
рдкрд╣рд▓рд╛ рдмрд┐рдВрджреБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рдВ, рдореИрдВ рдбреЗрдЯрд╛ рд▓реЗ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛ред


рдЧреНрд░рд╛рдлрд╝ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рд░реАрдбрд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдПрдХ рд░реЛрд▓ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рдкрд┐рдЪ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕реА рд╕рдордп рд░реЛрд▓ рдФрд░ рдкрд┐рдЪ рджреЛрдиреЛрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛, рдЕрдЧрд░ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдПрдХ рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЕрднреА рднреА рдореМрдЬреВрдж рдереЗ, рддрд╛рдХрд┐ рд╕реБрдзрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдП, рддреАрдиреЛрдВ рд╕реЗрдВрд╕рд░ рдХреЛ рдЦреЛрдЬрд╛ рдЬрд╛рдирд╛ рдерд╛ред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ (
AHRS ,
IMU ,
Quaternion ,
Euler Corners ,
Kalman Filter ) рдкрдврд╝рдиреЗ рдХреЗ рдХрдИ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж, рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛, рджреЗрдЦрдирд╛ рдФрд░ рд▓реЗрдЦ рдХреЛрдб рдФрд░ рдордВрдЪреЛрдВ рдХреЛ рдкрдврд╝рдирд╛, рд░реВрдбреЛрд▓реНрдл рдПрдорд┐рд▓ рдХрд▓рдореИрди рдиреЗ рд╕реНрд╡рдпрдВ рдореЗрд░реЗ рд╕рдкрдиреЗ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдФрд░
рдмреНрд░рд┐рдЯрд┐рд╢ рдХрдВрдкрдиреА рдХреА рдПрдХ рдХрдбрд╝реА рддрдп рдХреА
, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓рдЧреА рд╣реБрдИ рдереАред рдореЗрд░реЗ рдЬреИрд╕рд╛ рд╣реА рдпрд╣ рдЙрдирдХреЗ рд╕рд╛рде рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЬрд╛рд╕реВрд╕реА рдХреАред рд╡рд╣рд╛рдВ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдЖрд╡реЗрджрди рдХреА рд╡рд┐рдзрд┐ рднреА рд╣реИред рдЗрд╕рдореЗрдВ рд╕реЗ рдореИрдВрдиреЗ рд░реЛрд▓, рдкрд┐рдЪ рдФрд░ рдпрд╡ рдХреЗ quaternions рд╕реЗ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рд▓рд┐рдпрд╛ред
рдлреНрд▓реЛрдЯ getPitch ()
{
рд╡рд╛рдкрд╕реА atan2 (2 * (q2 * q3 + q0 * q1), q0 * q0 - q1 * q1 - q2 * q2 + q3 * q3);
}
рдлреНрд▓реЛрдЯ рдЧреЗрдЯрд╡рд╛рдИрд╡ ()
{
рд░рд┐рдЯрд░реНрди рдЕрд╕рд┐рди (-2 * (q1 * q3 - q0 * q2));
}
рдлреНрд▓реЛрдЯ getRoll ()
{
рд╡рд╛рдкрд╕реА atan2 (2 * (q1 * q2 + q0 * q3), q0 * q0 + q1 * q1 - q2 * q2 - q3 * q3);
}
рдЬрдм рдПрд╕рд╡реАрдкреА рдкрд╛рдареНрдпрдХреНрд░рдо рд╕реБрдзрд╛рд░ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
nullkorr = getRoll () * DegToRadIMU;
рдЕрдЧрд▓рд╛, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмреАрдЪ рдХреЗ рдХреЛрдг рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдлреНрд▓реЛрдЯ рд░реЗрдЯрдВрдЧрд▓ (рдлреНрд▓реЛрдЯ рдП, рдлреНрд▓реЛрдЯ рдмреА)
{
рдП + = 180;
рдмреА + = 180;
int r1 = 0;
r1 = ab;
r1 = r1% 360;
if (r1 <0) r1 + = 360;
if (r1> 180) рд╡рд╛рдкрд╕реА - (360 - r1);
рдФрд░ рд╡рд╛рдкрд╕реА r1;
}
рдХреЛрдг рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рдХреЛ рдЗрдорджрд╛рджреА рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реБрдзрд╛рд░ рдХреЛрдг рд╡рд░реНрддрдорд╛рди рд░реЛрдЯреЗрд╢рди рдХреЛрдг рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреАрд╕рд░реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, UART рдХреЗ рд╕рд╛рде рдпрд╛ HC-04 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдЪреМрдереЗ рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкрд░реЗрд╢рд╛рдирд┐рдпрд╛рдВ рдереАрдВ, рдЕрд▓реНрдЯреНрд░рд╛рд╕реЛрдирд┐рдХ рд╕реЗрдВрд╕рд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕рдВрд╡реЗрджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЖрдпрд╛ рдерд╛, рдФрд░ рдореИрдВ рдПрдХ рдирдП рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╣рд╛рдВ, рдФрд░ рд╕реЗрдВрд╕рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдиреЗ рдореЗрд░реЗ рдЧреБрд▓рд╛рдмреА рд╕рдкрдиреЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕реАрдзреЗ рд╕рдВрдХреАрд░реНрдг рдмреАрдо рдореЗрдВ рдЯрдХрд░рд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдФрд░ рд╕рддрд╣ рдХреЗ рд░реЛрдЯреЗрд╢рди рдХреЗ рдХреЛрдг рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд╛рдкрд╕ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдПрдордХреЗ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдкрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕
рдЬрдЧрд╣ рдЗрд╕ рдЕрдЪреНрдЫреЗ
рдЖрджрдореА рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛
рд╣реИ ред рдореБрдЭреЗ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдирдпрд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдорд░ STM32f3 рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЧрдпрд╛ред
рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд┐рдХрд▓реНрдк
/ **
** ==================================================== ===========================
**
** рд╕рд╛рд░: рдЕрд▓реНрдЯреНрд░рд╛рд╕реЛрдирд┐рдХ рд╕реЗрдВрд╕рд░ рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░
**
** ==================================================== ===========================
* /
рд╢реВрдиреНрдп EXTI3_IRQHandler (рд╢реВрдиреНрдп)
{
// рдпрджрд┐ рдЖрдкрдиреЗ рдПрдХ рдЙрднрд░рддрд╛ рд╣реБрдЖ рдореЛрд░реНрдЪрд╛ рдкрдХрдбрд╝рд╛ рд╣реИ
рдЕрдЧрд░ (рдХреИрдЪ_рд╕реНрдЯреИрдЯрд╕)
{
// рдкрд▓реНрд╕ рдЕрд╡рдзрд┐ рдХреА рдЧрд┐рдирддреА рд╢реБрд░реВ рдХрд░реЗрдВ
TIM6-> CR1 | = TIM_CR1_CEN;
// рдЧрд┐рд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рдирд╛рд░реЗ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
catcher_status = 1;
EXTI-> RTSR & = ~ EXTI_RTSR_TR3;
EXTI-> FTSR | = EXTI_FTSR_TR3;
}
// рдЕрдЧрд░ рдЧрд┐рд░рддреА рд╣реБрдИ рдзрд╛рд░
рдЕрдиреНрдпрдерд╛
{
TIM6-> CR1 & = ~ TIM_CR1_CEN; // рдЯрд╛рдЗрдорд░ рдмрдВрдж рдХрд░реЛ
рдЕрдЧрд░ (TIM6-> CNT> 58)
{
рдЕрд╡рдзрд┐ = TIM6-> CNT; // рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ рдЕрд╡рдзрд┐ рдкрдврд╝реЗрдВ
рдЕрдЧрд░ (рдЕрд╡рдзрд┐ <5800 && korr <25 && korr> -25 && stepmode == 5)
{
рдПрдо 1 = 0;
Upper_ctrl (m1); // рдореЛрдЯрд░ рдмрдВрдж
рдмреА рдмреА рдПрдл = 0;
stepmode = 1;
}
smas [scnum] = TIM6-> CNT;
}
TIM6-> CNT = 0; // рд╢реВрдиреНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛рдЙрдВрдЯрд░
// рдмрдврд╝рддреЗ рдХрд┐рдирд╛рд░реЗ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
catcher_status = 0;
EXTI-> FTSR & = ~ EXTI_FTSR_TR3;
EXTI-> RTSR | = EXTI_RTSR_TR3;
// 50 рдПрдордПрд╕ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ 6 рд╢реБрд░реВ рдХрд░реЗрдВ
TIM6-> DIER | = TIM_DIER_UIE; // рдЯрд╛рдЗрдорд░ рд╡реНрдпрд╡рдзрд╛рди рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
TIM6-> CR1 | = TIM_CR1_CEN; // рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░реЗрдВ
}
EXTI-> рдкреАрдЖрд░ | = 0x01; // рдзреНрд╡рдЬ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ
}
/ **
** ==================================================== ===========================
**
** рд╕рд╛рд░: рдЕрд▓реНрдЯреНрд░рд╛рд╕реЛрдирд┐рдХ рд╕реЗрдВрд╕рд░ рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░
** TIM7 рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░
** рдЯрд╛рдЗрдорд░ рдХреЗ рдмрд╛рдж рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ 7 рд╕рд┐рдЧреНрдирд▓ рдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП 10 ╬╝s рдЧрд┐рдирд╛ рдЧрдпрд╛ рд╣реИ
** ==================================================== ===========================
* /
рд╢реВрдиреНрдп TIM7_IRQHandler (рд╢реВрдиреНрдп)
{
TIM7-> SR & = ~ TIM_SR_UIF; // UIF рдлреНрд▓реИрдЧ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ
GPIOD-> ODR рдФрд░ = ~ GPIO_Pin_2; // рд╕рд┐рдЧреНрдирд▓ рдЖрд╡реЗрдЧ рдХреЛ рд░реЛрдХреЗрдВ
TIM7-> DIER & = ~ TIM_DIER_UIE; // рдЯрд╛рдЗрдорд░ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ 7
}
/ **
** ==================================================== ===========================
**
** рд╕рд╛рд░: рдЕрд▓реНрдЯреНрд░рд╛рд╕реЛрдирд┐рдХ рд╕реЗрдВрд╕рд░ рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░
** рдмрд╛рдзрд┐рдд рд╣реИрдВрдбрд▓рд░ TIM6_DAC
** рдЯрд╛рдЗрдорд░ 6 рдХреЗ рдмрд╛рдж рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрдХреНрд░ рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП 50 ╬╝s рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
** ==================================================== ===========================
* /
рд╢реВрдиреНрдп TIM6_DAC_IRQHandler (рд╢реВрдиреНрдп)
{
TIM6-> SR & = ~ TIM_SR_UIF; // UIF рдлреНрд▓реИрдЧ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ
рдпрджрд┐ (рд╕реНрдХреИрдирд┐рдВрдЧ == 2)
{
рдЕрдЧрд░ (smas [scnum]> 800)
{
scnum ++;
US_servo_ctrl (scnum);
рдЕрдЧрд░ (scnum> = 160)
{
scnum = 0;
рд╕реНрдХреИрди рдХрд░рдирд╛ = 3;
US_servo_ctrl (80);
}
}
рдЕрдиреНрдпрдерд╛
{
scd ++;
рдЕрдЧрд░ (scd> 3)
{
scd = 0;
smas [scnum] = 23200;
scnum ++;
US_servo_ctrl (scnum);
}
}
}
GPIOD-> ODR | = GPIO_Pin_2; // рд╕рд┐рдЧреНрдирд▓ рдкрд▓реНрд╕ рдЪрд╛рд▓реВ рдХрд░реЗрдВ
// 10 рдПрдордПрд╕ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ 7 рд╢реБрд░реВ рдХрд░реЗрдВ
TIM7-> DIER | = TIM_DIER_UIE; // рдЯрд╛рдЗрдорд░ рдЗрдВрдЯрд░рдкреНрдЯ 7 рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
TIM7-> CR1 | = TIM_CR1_CEN; // рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░реЗрдВ
}
рд╢реВрдиреНрдп USsensor_init ()
{
// ====================================================== ========================
// рд╕реЗрдЯ рдЯрд╛рдЗрдорд░ 6
// 2 рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
// 1) рдЗрдХреЛ рдкрд▓реНрд╕ рдХреА рдЕрд╡рдзрд┐ рдХреА рдЧрд┐рдирддреА (150 ╬╝s - 25 ms)
// 2) рдЪрдХреНрд░ рдЕрд╡рдзрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдЧрд┐рдирддреА - рд╕рдордп,
// рдЗрдХреЛ рд▓рд╛рдЗрди рдореЗрдВ рдЕрд╡рд╢рд┐рд╖реНрдЯ рджреЛрд▓рдиреЛрдВ рдХреЗ рдХреНрд╖реАрдгрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ
// ====================================================== ========================
// рдЯрд╛рдЗрдорд░ рдЯрд╛рдЗрдорд┐рдВрдЧ рдЪрд╛рд▓реВ рдХрд░реЗрдВ
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM6, рд╕рдХреНрд╖рдо);
// рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдордХ рд╕реЗрдЯ рдХрд░реЗрдВ
TIM6-> PSC = 72 - 1;
// рдЯреНрд░рд┐рдЧрд░ рд╕реАрдорд╛ - 50 рдПрдордПрд╕ = 50,000 ╬╝s
TIM6-> ARR = 50000;
// TIM6_IRQn рд╡реНрдпрд╡рдзрд╛рди рд╕рдХреНрд╖рдо рдХрд░реЗрдВ - рдЪрдХреНрд░ рдЕрд╡рдзрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ
NVIC_SetPyerity (TIM6_DAC_IRQn, 3);
NVIC_EnableIRQ (TIM6_DAC_IRQn);
// ====================================================== ========================
// рд╕реЗрдЯ рдЯрд╛рдЗрдорд░ 7
// ====================================================== ========================
// рдЯрд╛рдЗрдорд░ рдЯрд╛рдЗрдорд┐рдВрдЧ рдЪрд╛рд▓реВ рдХрд░реЗрдВ
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM7, рд╕рдХреНрд╖рдо);
// рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдордХ рд╕реЗрдЯ рдХрд░реЗрдВ
TIM7-> PSC = 72 - 1;
// рдкреНрд░рддрд┐рд╕рд╛рдж рд╕реАрдорд╛ - 10 ╬╝s
TIM7-> ARR = 10;
// рд╕рд┐рдЧреНрдирд▓ рдкрд▓реНрд╕ рдХреЛ рдЧрд┐рдирдиреЗ рдХреЗ рд▓рд┐рдП TIM7_IRQn рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
NVIC_SetPyerity (TIM7_IRQn, 2);
NVIC_EnableIRQ (TIM7_IRQn);
// ====================================================== ========================
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_SYSCFG, рд╕рдХреНрд╖рдо);
RCC_AHBPeriphClockCmd (RCC_AHBPeriph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed тАЛтАЛ= GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init (GPIOD, рдФрд░ GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed тАЛтАЛ= GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init (GPIOD, рдФрд░ GPIO_InitStructure);
SYSCFG_EXTILineConfig (EXTI_PortSourceGPIOD, EXTI_PinSource3);
/ * EXTI3 рд▓рд╛рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ * /
EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = рд╕рдХреНрд╖рдо;
EXTI_Init (& EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPyerity = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd = рд╕рдХреНрд╖рдо;
NVIC_Init (& NVIC_InitStructure);
}
рдпрд╣ рдХреЛрдб PORTD.3 рдкрд░ рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп PORTD рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рддреАрд╕рд░реЗ рдкрд┐рди рдкрд░ рд╕рднреА рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдкрд░ рд╡реНрдпрд╡рдзрд╛рди рдХреНрдпреЛрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реАрдзреЗ рд╡реНрдпрд╡рдзрд╛рди рд╕реЗрдЯрд┐рдВрдЧ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд░рд┐рдгрд╛рдо "0" рд╣реИ рдпрд╛ рдХреЛрдИ рд░реБрдХрд╛рд╡рдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдпрд╣ рд╕рднреА рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдкрд░ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рд╕рдордЭрд╛рддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рд╣реЛрдЧреА, рддреЛ рдЖрдк рдмрд╣реБрдд рдЖрднрд╛рд░реА рд╣реЛрдВрдЧреЗред
рдкрд╛рдВрдЪрд╡реЗрдВ рдмрд┐рдВрджреБ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЫрдареЗ рдореЗрдВ рдПрдбреАрд╕реА рдХреЗ рдЯреНрдпреВрдирд┐рдВрдЧ рдиреЗ рдХреБрдЫ рд╕рд┐рд░рджрд░реНрдж рдкреИрджрд╛ рдХрд┐рдпрд╛ред
рдлрд┐рд░, рдЙрджрд╛рд╣рд░рдг, рдХреЛрдИ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ, рдЙрджрд╛рд╣рд░рдг рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡реЗ рдПрдХ рдПрдбреАрд╕реА рдЪреИрдирд▓ рд╕реЗ рдкрдврд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рдереЗ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рдЪрд╛рд░ рд╣реИрдВред рдЪреИрдирд▓реЛрдВ, рдирд┐рдпрдорд┐рдд рд╕рдореВрд╣реЛрдВ, рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╕рдореВрд╣реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛рд╢реАрдЯ рдХреЗ рд╕рдВрдХреЗрддред рд╕реАрдорд┐рдд рд╕рдордп рдХреЗ рдХрд╛рд░рдг, рдкреБрд░рд╛рдиреА "рджрд╛рджрд╛рдЬреА" рдкрджреНрдзрддрд┐ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛:
- рдЪреИрдирд▓ рдХрд╛ рдЖрдирдВрдж;
рдПрдХ рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреА рд╢реБрд░реБрдЖрдд;
- рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛;
'рдмрд╛рд░-рдмрд╛рд░ред
рдПрдбреАрд╕реА рдиреЗ рдкрдврд╝рд╛
рд╢реВрдиреНрдп ADC1_2_IRQHandler (рд╢реВрдиреНрдп)
{
ADC_ClearITPendingBit (ADC1, ADC_IT_EOC);
ADC1ConvertedValue = ADC_GetConversionValue (ADC1);
/ * рд╡реЛрд▓реНрдЯреЗрдЬ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ * /
ADC1ConvertedVoltage = (ADC1ConvertedValue * 3300) / 0xFFF;
adcp [iadc] = ADC1ConvertedVoltage;
iadc ++;
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА = 1;
}
рд╢реВрдиреНрдп рд╕реЗрдЯреИрдбрдЪреИрдиреЗрд▓ ()
{
/ * ADC рдЪреИрдирд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ * /
numadc [0] = 7; // рдмреАрдЯреА
numadc [1] = 16; // рдХрд┐рд▓реЛрдореАрдЯрд░
numadc [2] = 6; // рдмреИрдЯрд░реА рд╡реЛрд▓реНрдЯреЗрдЬ
numadc [3] = 3; // рдЧреИрд╕ рд╕реЗрдВрд╕рд░
kadc = 4; // рд░рд╛рд╢рд┐ рдЪреИрдирд▓
}
рд╢реВрдиреНрдп getADC (uint8_t рдЪреИрдирд▓)
{
рдпрджрд┐ (ADCready == 1)
{
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА = 0;
ADC_RegularChannelConfig (ADC1, рдЪреИрдирд▓, 1, ADC_SampleTime);
ADC_StartConversion (ADC1);
}
}
uint8_t ADC_init ()
{
uint16_t рдХреИрд▓рд┐рдмреНрд░реЗрд╢рди_рд╡рд▓реНрдпреВ = 0;
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/ * ADC рдШрдбрд╝реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ * /
RCC_ADCCLKConfig (RCC_ADC12PLLCLK_Div2);
/ * ADC1 рдШрдбрд╝реА рд╕рдХреНрд╖рдо рдХрд░реЗрдВ * /
RCC_AHBPeriphClockCmd (RCC_AHBPeriph_ADC12, рд╕рдХреНрд╖рдо);
/ * рдПрдбреАрд╕реА рдЪреИрдирд▓ рд╡рд┐рдиреНрдпрд╛рд╕ * /
/ * GPIOC рдкреЗрд░рд┐рдлрд╝ рдШрдбрд╝реА рд╕рдХреНрд╖рдо рдХрд░реЗрдВ * /
RCC_AHBPeriphClockCmd (RCC_AHBPeriph_GPIOC, ENABLE);
RCC_AHBPeriphClockCmd (RCC_AHBPeriph_GPIOA, ENABLE);
/ * ADC Channel7 рдХреЛ рдЕрдиреБрд░реВрдк рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ * /
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init (GPIOC, рдФрд░ GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init (GPIOA, рдФрд░ GPIO_InitStructure);
ADC_StructInit (& ADC_InitStructure);
/ * рдЕрдВрд╢рд╛рдВрдХрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ * /
ADC_VoltageRegulatorCmd (ADC1, рд╕рдХреНрд╖рдо);
/ * рджреЗрд░реА рджреЗрд░реА рдХреЗ рдмрд░рд╛рдмрд░ * /
рд╡рд┐рд▓рдВрдм (15);
ADC_SelectCalibrationMode (ADC1, ADC_CalibrationMode_Single);
ADC_StartCalibration (ADC1);
рдЬрдмрдХрд┐ (ADC_GetCalibrationStatus (ADC1)! = RESET);
calibration_value = ADC_GetCalibrationValue (ADC1);
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Dadabled;
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_OneShot;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 1000;
ADC_CommonInit (ADC1, рдФрд░ ADC_CommonInitStructure);
ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Disable;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;
ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_OverrunMode = ADC_OverrunMode_Disable;
ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable;
ADC_InitStructure.ADC_NbrOfRegChannel = 1;
ADC_Init (ADC1, рдФрд░ ADC_InitStructure);
ADC_RegularChannelSequencerLengthConfig (ADC1,1);
/ * ADC1 рдирд┐рдпрдорд┐рдд рдЪреИрдирд▓ 7 рд╡рд┐рдиреНрдпрд╛рд╕ * /
ADC_RegularChannelConfig (ADC1, ADC_Channel_7, 1, ADC_SampleTime);
ADC_TempSensorCmd (ADC1, рд╕рдХреНрд╖рдо);
/ * ADC1 рд╕рдХреНрд╖рдо рдХрд░реЗрдВ / /
ADC_Cmd (ADC1, рд╕рдХреНрд╖рдо);
/ * ADRDY рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ * /
рдЬрдмрдХрд┐ (ADC_GetFlagStatus (ADC1, ADC_FLAG_RDY));
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = рд╕рдХреНрд╖рдо;
NVIC_Init (& NVIC_InitStructure);
ADC_ITConfig (ADC1, ADC_IT_EOC, рд╕рдХреНрд╖рдо);
рд╡рд╛рдкрд╕реА 1;
}
/ * рдФрд░ рдХрд╣реАрдВ рдореБрдЦреНрдп рдЬрдЧрд╣ рдкрд░
рдЕрдЧрд░ (iadc <kadc)
{
getADC (numadc [iadc]);
}
рдЕрдиреНрдпрдерд╛
{
iadc = 0;
}
* /
рдЬрдм рдореИрдВрдиреЗ рдПрдбреАрд╕реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рддрдм рд╕рд╛рддрд╡реЗрдВ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рджрд┐рдХреНрдХрдд рдирд╣реАрдВ рд╣реБрдИред
рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдФрд░ рдиреБрдХрд╕рд╛рди рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирд╛рдпрд╛ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмрдЯрди рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ) рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдмреНрд▓реВрдЯреВрде рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдФрд░ рдЗрд╕
рд▓реЗрдЦ рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд░реНрдЧ рдиреЗ рдЙрдВрдЧрд▓реА рдХреЛ рдКрдкрд░ рд▓реЗ рдЬрд╛рдХрд░ рдкреЛрдд рдХреА рдЧрддрд┐ рдФрд░ рджрд┐рд╢рд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ред рд╕реНрдХреНрд░реАрди рдкрд░ / рдиреАрдЪреЗ рдФрд░ рджрд╛рдПрдВ / рдмрд╛рдПрдВред
рдХреБрдЫ рд╣рдж рддрдХ рдХрдХреНрд╖рд╛
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ
рдкреЗрдВрдЯ рдкреЗрдВрдЯ;
int [] рдПрдХреНрд╕;
int [] рд╡рд╛рдИ;
рдЕрдВрддрд┐рдо рд╕реНрдерд┐рд░ int рддреНрд░рд┐рдЬреНрдпрд╛ = 50;
int PointerCount;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЫ рджреГрд╢реНрдп (рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн, рдЧреБрдгрдирд┐рд╖реНрда рдЧреБрдг)
{
рд╕реБрдкрд░ (рд╕рдВрджрд░реНрдн, рдЧреБрдг);
рдкреЗрдВрдЯ = рдирдпрд╛ рдкреЗрдВрдЯ ();
рдкреЗрдВрдЯ.рд╕реЗрдЯрдХреЛрд▓рд░ (Color.RED);
рдкреЗрдВрдЯ.рд╕реЗрдЯрд╕реНрд▓реЗ (Style.STROKE);
рдкреЗрдВрдЯ.рд╕реЗрдЯрд╕реНрдЯреНрд░реЛрдХрд╡рд┐рде (3);
рдкреЙрдЗрдВрдЯрд░рдХрд╛рдЙрдВрдЯ = 0;
X = рдирдпрд╛ int [10]; // рдпреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреЗ (рд╣рдо 10 рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рддрдХ рдЕрдиреБрднрд╡ рдХрд░реЗрдВрдЧреЗ)
рд╡рд╛рдИ = рдирдпрд╛ рдЗрдВрдЯ [10];
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓рд┐рдпрди onTouchEvent (MotionEvent рдИрд╡реЗрдВрдЯ)
{
StringBuilder рдкрд░рд┐рдгрд╛рдо = рдирдпрд╛ StringBuilder (300);
PointerCount = event.getPointerCount ();
for (int i = 0; рдореИрдВ <PointerCount; i ++)
{
int ptrId = event.getPointerId (i);
X [i] = (int) event.getX (i); // рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдпрд╛рдж рд░рдЦреЗрдВ
Y [i] = (int) event.getY (i);
MainActivity.flag = 1;
MainActivity.setX (X [i], Y [i], ptrId);
}
рд╕рдЪ рд▓реМрдЯрдирд╛;
}
рд╕рдВрд░рдХреНрд╖рд┐рдд рд╢реВрдиреНрдп onDraw (рдХреИрдирд╡рд╛рд╕ рдХреИрдирд╡рд╛рд╕)
{
for (int i = 0; рдореИрдВ <PointerCount; i ++)
{
if (Y [i] <(MainActivity.height / 4)) Y [i] = MainActivity.height / 4;
if (Y [i]> (MainActivity.height * 0.75) -75) Y [i] = (int) (MainActivity.height * 0.75) -75;
рдХреИрдирд╡рд╕.рдЯреНрд░реИрдХрдХреИрд░рд▓ (рдПрдХреНрд╕ [i], рд╡рд╛рдИ [i], рд░реЗрдбрд┐рдпрд╕, рдкреЗрдВрдЯ);
рдХреИрдирд╡рд╕ред рд╡рд┐рдерд▓рд╛рдЗрди (MainActivity. рдЙрдкрд▓рдмреНрдзрддрд╛ / 2, (int) (MainActivity.height * 0.75) -25, X [i], Y [i], рдкреЗрдВрдЯ);
рдХреИрдирд╡рд╕.рд╡рд┐рдЯреНрд░рд▓рд╛рдЗрди (0, (int) (MainActivity.height / 4) -50, MainActivity. рдЙрдкрд▓рдмреНрдзрддрд╛, (int) (MainActivity.height / 4) -50, рдкреЗрдВрдЯ);
рдХреИрдирд╡рд╕.рд╡рд┐рдЯреНрд░рд▓рд╛рдЗрди (0, (int) (MainActivity.height * 0.75) -25, MainActivity. рдЙрдкрд▓рдмреНрдзрддрд╛, (int) (MainActivity.height * 0.75) -25, рдкреЗрдВрдЯ);
}
рдЕрдорд╛рдиреНрдп ();
}
}
рдФрд░ рд╕реЗрдВрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DialogFragment рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рд╕рдВрд╡рд╛рдж рд╡рд░реНрдЧ
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдбрд╛рдпрд▓реЙрдЧ рдбрд╛рдпрд▓реЙрдЧрдлреНрд░реИрдЧрдореЗрдВрдЯ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ OnClickListener {
рдЕрдВрддрд┐рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ LOG_TAG = "myLogs";
android.widget.TextView рдбрд╛рдЪ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рджреГрд╢реНрдп onCreateView (рд▓реЗрдЖрдЙрдЯрдЗрдиреНрдлреНрд▓реИрдЯрд░ рдЗрдирдлреНрд▓реЛрдЯрд░, рд╡реНрдпреВрдЧреНрд░реБрдк рдХрдВрдЯреЗрдирд░,
рдмрдВрдбрд▓ рдХреЛ рдмрдЪрд╛рдпрд╛ рдЧрдпрд╛
getDialog ()ред setTitle ("рд╕реЗрдВрд╕рд░ рд░реАрдбрд┐рдВрдЧ");
рджреЗрдЦреЗрдВ v = inflater.inflate (R.layout.dialog, null);
v.findViewById (R.id.btnYes) .setOnClickListener (рдпрд╣);
datch = (android.widget.TextView) v.findViewById (R.id.textView1);
datch.setText (MainActivity.mesdat);
рд╡рд╛рдкрд╕реА v;
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ (рджреЗрдЦреЗрдВ v) {
Log.d (LOG_TAG, "рдбрд╛рдпрд▓реЙрдЧ:" + ((рдмрдЯрди) v) .getText ());
рдЦрд╛рд░рд┐рдЬ ();
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп onDismiss (DialogInterface рд╕рдВрд╡рд╛рдж) {
super.onDismiss (рд╕рдВрд╡рд╛рдж);
Log.d (LOG_TAG, "рд╕рдВрд╡рд╛рдж: onDismiss");
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп onCancel (DialogInterface рд╕рдВрд╡рд╛рдж) {
super.onCancel (рд╕рдВрд╡рд╛рдж);
Log.d (LOG_TAG, "рд╕рдВрд╡рд╛рдж: onCancel");
}
}
рдЕрдВрддрднрд╛рд╖рдг
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╡рд░ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдкреНрд░рдмрдВрдзрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред , ┬л ┬╗ . .