есть 2 экзампла для i2c oled 128x32 - плеер с иконками - вывод графиками синус и ЭКГ (не встроена пока в gfx библиотеку)
145 lines
3.4 KiB
C
145 lines
3.4 KiB
C
#include "menu_interface.h"
|
|
|
|
void Menu_Control_Init(PlayerTypeDef *player)
|
|
{
|
|
GPIO_Switch_Init(&player->SwTheme, GPIO_SwTheme, GPIO_Pin_SwTheme, SW_ON);
|
|
GPIO_Switch_Init(&player->SwPlay, GPIO_SwPlay, GPIO_Pin_SwPlay, SW_ON);
|
|
GPIO_Switch_Init(&player->SwForward, GPIO_SwForward, GPIO_Pin_SwForward, SW_ON);
|
|
GPIO_Switch_Init(&player->SwBackward, GPIO_SwBackward, GPIO_Pin_SwBackward, SW_ON);
|
|
GPIO_Switch_Init(&player->SwSpeed, GPIO_SwSpeed, GPIO_Pin_SwSpeed, SW_ON);
|
|
GPIO_Switch_Init(&player->SwLoop, GPIO_SwLoop, GPIO_Pin_SwLoop, SW_ON);
|
|
|
|
player->SwTheme.Sw_FilterDelay = 70;
|
|
player->SwPlay.Sw_FilterDelay = 70;
|
|
player->SwForward.Sw_FilterDelay = 70;
|
|
player->SwBackward.Sw_FilterDelay = 70;
|
|
player->SwSpeed.Sw_FilterDelay = 70;
|
|
player->SwLoop.Sw_FilterDelay = 70;
|
|
|
|
player->speed = 1;
|
|
|
|
}
|
|
|
|
extern int menu_white_theme;
|
|
void Menu_Control_ReadGPIO(PlayerTypeDef *player)
|
|
{
|
|
#ifdef GPIO_CONTROL
|
|
/* Обработка кнопки темы меню */
|
|
if(GPIO_Read_Swich(&player->SwTheme))
|
|
{
|
|
if(player->SwTheme.Sw_GrandPrevState == 0)
|
|
menu_white_theme ^= 1;
|
|
}
|
|
|
|
/* Обработка кнопки плей */
|
|
if(GPIO_Read_Swich(&player->SwPlay))
|
|
{
|
|
if(player->SwPlay.Sw_GrandPrevState == 0)
|
|
player->play ^= 1;
|
|
|
|
player->pressed_start = 1;
|
|
}
|
|
else
|
|
{
|
|
player->pressed_start = 0;
|
|
}
|
|
|
|
/* Обработка кнопки прокрутки вперед */
|
|
if(GPIO_Read_Swich(&player->SwForward))
|
|
{
|
|
player->pressed_forward = 1;
|
|
}
|
|
else
|
|
{
|
|
player->pressed_forward = 0;
|
|
}
|
|
|
|
/* Обработка кнопки прокрутки назад */
|
|
if(GPIO_Read_Swich(&player->SwBackward))
|
|
{
|
|
player->pressed_backward = 1;
|
|
}
|
|
else
|
|
{
|
|
player->pressed_backward = 0;
|
|
}
|
|
|
|
/* Обработка кнопки зацикливания */
|
|
if(GPIO_Read_Swich(&player->SwLoop))
|
|
{
|
|
if(player->SwLoop.Sw_GrandPrevState == 0)
|
|
player->loop ^= 1;
|
|
}
|
|
|
|
/* Обработка кнопки скорости */
|
|
if(GPIO_Read_Swich(&player->SwSpeed))
|
|
{
|
|
if(player->SwSpeed.Sw_GrandPrevState == 0)
|
|
player->speed += 0.5;
|
|
|
|
|
|
if(player->speed > 0.05)
|
|
player->speed = 0.5;
|
|
|
|
}
|
|
#endif
|
|
}
|
|
|
|
|
|
float sim_music_long_sec = 10;
|
|
float sim_music_step = 0;
|
|
void Menu_Control_Music(PlayerTypeDef *player)
|
|
{
|
|
if(player->currenttime > 1)
|
|
{
|
|
player->currenttime = 0;
|
|
if(player->loop == 0)
|
|
player->play = 0;
|
|
}
|
|
else if(player->currenttime < 0)
|
|
{
|
|
if(player->loop)
|
|
player->currenttime = 1;
|
|
else
|
|
player->currenttime = 0;
|
|
}
|
|
|
|
|
|
sim_music_step = 1/(sim_music_long_sec*100);
|
|
// если шкатулка запущена
|
|
if(player->play)
|
|
{
|
|
// если кнопки перемотки не нажаты, то подтягивает заданную скорость воспроизведения
|
|
if((player->pressed_backward == 0) && (player->pressed_forward == 0) )
|
|
{
|
|
sim_music_step *= player->speed;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sim_music_step = 0;
|
|
}
|
|
|
|
// перемотка назад
|
|
if((player->pressed_backward == 1) && (player->pressed_forward == 0) )
|
|
{
|
|
if(player->currenttime > 0)
|
|
{
|
|
sim_music_step = -1/(sim_music_long_sec*100);
|
|
}
|
|
}
|
|
|
|
// перемотка вперед
|
|
if((player->pressed_forward == 1) && (player->pressed_backward == 0) )
|
|
{
|
|
sim_music_step = 1/(sim_music_long_sec*100)*2;
|
|
}
|
|
|
|
|
|
static uint32_t prevtick = 0;
|
|
if(uwTick - prevtick > 10)
|
|
{
|
|
prevtick = uwTick;
|
|
player->currenttime += sim_music_step;
|
|
}
|
|
} |