Сделан хедер с мелодиями
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
#include "melody.h"
|
#include "melody.h"
|
||||||
|
|
||||||
#define FIXED_ARR 10 // фиксированный период таймера
|
#define FIXED_ARR 1000 // фиксированный период таймера
|
||||||
|
#define FIXED_VOLUME 2 // фиксированный период таймера
|
||||||
|
|
||||||
// Конвертирует длительность ноты в миллисекунды
|
// Конвертирует длительность ноты в миллисекунды
|
||||||
static uint32_t _duration_to_ms(MelodyHandle* mh, float duration) {
|
static uint32_t _duration_to_ms(MelodyHandle* mh, float duration) {
|
||||||
@@ -31,7 +32,7 @@ static void _set_freq(MelodyHandle* mh, uint32_t freq) {
|
|||||||
// Фиксированный период
|
// Фиксированный период
|
||||||
__HAL_TIM_SET_AUTORELOAD(mh->htim, FIXED_ARR);
|
__HAL_TIM_SET_AUTORELOAD(mh->htim, FIXED_ARR);
|
||||||
// Скважность 50% для чистого тона
|
// Скважность 50% для чистого тона
|
||||||
__HAL_TIM_SET_COMPARE(mh->htim, mh->channel, FIXED_ARR / 2);
|
__HAL_TIM_SET_COMPARE(mh->htim, mh->channel, FIXED_VOLUME);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Melody_Init(MelodyHandle* mh, TIM_HandleTypeDef* htim, uint32_t channel, uint32_t timer_clock_hz) {
|
void Melody_Init(MelodyHandle* mh, TIM_HandleTypeDef* htim, uint32_t channel, uint32_t timer_clock_hz) {
|
||||||
|
|||||||
124
Core/Clock/songs.h
Normal file
124
Core/Clock/songs.h
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "melody.h"
|
||||||
|
|
||||||
|
#define song_length(song_arr) sizeof(song_arr)/sizeof(song_arr[0]);
|
||||||
|
|
||||||
|
const Note Polyphia_OD[] = {
|
||||||
|
//1 ТАКТ
|
||||||
|
{FA1s, NOTE_SIXTEENTH},
|
||||||
|
{LA1, NOTE_SIXTEENTH},
|
||||||
|
{DO2s, NOTE_SIXTEENTH},
|
||||||
|
{FA2s, NOTE_SIXTEENTH},
|
||||||
|
{NOTE_REST, NOTE_QUARTER},
|
||||||
|
|
||||||
|
{FA1s, NOTE_SIXTEENTH},
|
||||||
|
{LA1, NOTE_SIXTEENTH},
|
||||||
|
{DO2s, NOTE_SIXTEENTH},
|
||||||
|
{RE2, NOTE_SIXTEENTH},
|
||||||
|
{FA1, NOTE_SIXTEENTH},
|
||||||
|
{SOL1s, NOTE_SIXTEENTH},
|
||||||
|
{SI1, NOTE_SIXTEENTH},
|
||||||
|
{FA2s, NOTE_EIGHTH},
|
||||||
|
|
||||||
|
//2 ТАКТ
|
||||||
|
{SOL2s, NOTE_SIXTEENTH},
|
||||||
|
{RE2, NOTE_SIXTEENTH},
|
||||||
|
{SI1, NOTE_SIXTEENTH},
|
||||||
|
{DO1s, NOTE_SIXTEENTH},
|
||||||
|
{FA1, NOTE_SIXTEENTH},
|
||||||
|
{SOL1s, NOTE_SIXTEENTH},
|
||||||
|
{DO2s, NOTE_SIXTEENTH},
|
||||||
|
{FA2, NOTE_THIRTYSECOND},
|
||||||
|
{FA2s, NOTE_THIRTYSECOND},
|
||||||
|
{FA2, NOTE_SIXTEENTH},
|
||||||
|
{DO2s, NOTE_SIXTEENTH},
|
||||||
|
{SI1, NOTE_SIXTEENTH},
|
||||||
|
{SOL1s, NOTE_SIXTEENTH},
|
||||||
|
{FA1, NOTE_SIXTEENTH},
|
||||||
|
{DO3s, NOTE_SIXTEENTH},
|
||||||
|
|
||||||
|
//3 ТАКТ
|
||||||
|
{FA1s, NOTE_SIXTEENTH},
|
||||||
|
{LA1, NOTE_SIXTEENTH},
|
||||||
|
{DO2s, NOTE_SIXTEENTH},
|
||||||
|
{FA2s, NOTE_SIXTEENTH},
|
||||||
|
{NOTE_REST, NOTE_QUARTER},
|
||||||
|
|
||||||
|
{FA1s, NOTE_SIXTEENTH},
|
||||||
|
{LA1, NOTE_SIXTEENTH},
|
||||||
|
{DO2s, NOTE_SIXTEENTH},
|
||||||
|
{RE2, NOTE_SIXTEENTH},
|
||||||
|
{FA1, NOTE_SIXTEENTH},
|
||||||
|
{SOL1s, NOTE_SIXTEENTH},
|
||||||
|
{SI1, NOTE_SIXTEENTH},
|
||||||
|
{FA2s, NOTE_EIGHTH},
|
||||||
|
|
||||||
|
//4 ТАКТ
|
||||||
|
{SOL2s, NOTE_SIXTEENTH},
|
||||||
|
{RE2, NOTE_SIXTEENTH},
|
||||||
|
{SI1, NOTE_SIXTEENTH},
|
||||||
|
{LA1, NOTE_SIXTEENTH},
|
||||||
|
{DO2s, NOTE_SIXTEENTH},
|
||||||
|
{FA2s, NOTE_SIXTEENTH},
|
||||||
|
{LA2, NOTE_SIXTEENTH},
|
||||||
|
|
||||||
|
{SI1, NOTE_SIXTEENTH},
|
||||||
|
{SI0, NOTE_SIXTEENTH},
|
||||||
|
{RE2, NOTE_SIXTEENTH},
|
||||||
|
{SOL2s, NOTE_SIXTEENTH},
|
||||||
|
{LA1, NOTE_SIXTEENTH},
|
||||||
|
{LA2, NOTE_SIXTEENTH},
|
||||||
|
{FA2s, NOTE_SIXTEENTH},
|
||||||
|
|
||||||
|
//5 ТАКТ
|
||||||
|
{SI1, NOTE_SIXTEENTH},
|
||||||
|
{RE2, NOTE_SIXTEENTH},
|
||||||
|
{FA2s, NOTE_SIXTEENTH},
|
||||||
|
{SI2, NOTE_SIXTEENTH}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const Note Polyphia_PlayingGod[] = {
|
||||||
|
//1 ТАКТ
|
||||||
|
{SOL2, NOTE_QUARTER},
|
||||||
|
{MI3, NOTE_EIGHTH},
|
||||||
|
{SI3, NOTE_EIGHTH},
|
||||||
|
{MI4, NOTE_EIGHTH},
|
||||||
|
{SI3, NOTE_EIGHTH},
|
||||||
|
{SOL3, NOTE_EIGHTH},
|
||||||
|
{SI3, NOTE_EIGHTH},
|
||||||
|
{DO4, NOTE_EIGHTH_DOT},
|
||||||
|
{LA3, NOTE_SIXTEENTH},
|
||||||
|
{SI3, NOTE_EIGHTH},
|
||||||
|
{SI2, NOTE_EIGHTH_DOT},
|
||||||
|
{DO2, NOTE_SIXTEENTH},
|
||||||
|
{SI3, NOTE_EIGHTH},
|
||||||
|
{MI3, NOTE_QUARTER},
|
||||||
|
|
||||||
|
//2 ТАКТ
|
||||||
|
{RE3s, NOTE_QUARTER},
|
||||||
|
{SI2, NOTE_EIGHTH},
|
||||||
|
{LA2, NOTE_EIGHTH},
|
||||||
|
{LA3, NOTE_EIGHTH},
|
||||||
|
{SI3, NOTE_SIXTEENTH},
|
||||||
|
{LA3, NOTE_EIGHTH},
|
||||||
|
{RE3, NOTE_SIXTEENTH},
|
||||||
|
{FA4s, NOTE_SIXTEENTH},
|
||||||
|
{LA4, NOTE_SIXTEENTH},
|
||||||
|
{RE3s, NOTE_EIGHTH},
|
||||||
|
{LA3, NOTE_SIXTEENTH},
|
||||||
|
{RE3s, NOTE_EIGHTH},
|
||||||
|
|
||||||
|
{SI4, NOTE_SIXTEENTH},
|
||||||
|
{FA4s, NOTE_SIXTEENTH},
|
||||||
|
{RE3s, NOTE_THIRTYSECOND},
|
||||||
|
{NOTE_REST, NOTE_THIRTYSECOND},
|
||||||
|
{RE3s, NOTE_EIGHTH},
|
||||||
|
{MI3, NOTE_EIGHTH},
|
||||||
|
|
||||||
|
{DO3, NOTE_SIXTEENTH},
|
||||||
|
{SI2, NOTE_SIXTEENTH},
|
||||||
|
{MI3, NOTE_SIXTEENTH},
|
||||||
|
};
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "segment.h"
|
#include "segment.h"
|
||||||
#include "melody.h"
|
#include "melody.h"
|
||||||
|
#include "songs.h"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
@@ -79,49 +80,11 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
|
|||||||
Segment_Process();
|
Segment_Process();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MelodyHandle melody;
|
MelodyHandle melody;
|
||||||
const Note mySong[] = {
|
#define curr_song Polyphia_OD
|
||||||
// //1 ÒÀÊÒ
|
Note *mySong = (Note *)curr_song;
|
||||||
// {SOL2, NOTE_QUARTER},
|
int mySong_length = song_length(curr_song);
|
||||||
// {MI3, NOTE_EIGHTH},
|
|
||||||
// {SI3, NOTE_EIGHTH},
|
|
||||||
// {MI4, NOTE_EIGHTH},
|
|
||||||
// {SI3, NOTE_EIGHTH},
|
|
||||||
// {SOL3, NOTE_EIGHTH},
|
|
||||||
// {SI3, NOTE_EIGHTH},
|
|
||||||
// {DO4, NOTE_EIGHTH_DOT},
|
|
||||||
// {LA3, NOTE_SIXTEENTH},
|
|
||||||
// {SI3, NOTE_EIGHTH},
|
|
||||||
// {SI2, NOTE_EIGHTH_DOT},
|
|
||||||
// {DO2, NOTE_SIXTEENTH},
|
|
||||||
// {SI3, NOTE_EIGHTH},
|
|
||||||
// {MI3, NOTE_QUARTER},
|
|
||||||
|
|
||||||
//2 ÒÀÊÒ
|
|
||||||
{RE3s, NOTE_QUARTER},
|
|
||||||
{SI2, NOTE_EIGHTH},
|
|
||||||
{LA2, NOTE_EIGHTH},
|
|
||||||
{LA3, NOTE_EIGHTH},
|
|
||||||
{SI3, NOTE_SIXTEENTH},
|
|
||||||
{LA3, NOTE_EIGHTH},
|
|
||||||
{RE3, NOTE_SIXTEENTH},
|
|
||||||
{FA4s, NOTE_SIXTEENTH},
|
|
||||||
{LA4, NOTE_SIXTEENTH},
|
|
||||||
{RE3s, NOTE_EIGHTH},
|
|
||||||
{LA3, NOTE_SIXTEENTH},
|
|
||||||
{RE3s, NOTE_EIGHTH},
|
|
||||||
|
|
||||||
{SI4, NOTE_SIXTEENTH},
|
|
||||||
{FA4s, NOTE_SIXTEENTH},
|
|
||||||
{RE3s, NOTE_THIRTYSECOND},
|
|
||||||
{NOTE_REST, NOTE_THIRTYSECOND},
|
|
||||||
{RE3s, NOTE_EIGHTH},
|
|
||||||
{MI3, NOTE_EIGHTH},
|
|
||||||
|
|
||||||
{DO3, NOTE_SIXTEENTH},
|
|
||||||
{SI2, NOTE_SIXTEENTH},
|
|
||||||
{MI3, NOTE_SIXTEENTH},
|
|
||||||
};
|
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
@@ -168,10 +131,9 @@ int main(void)
|
|||||||
Menu_Init();
|
Menu_Init();
|
||||||
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
|
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
|
||||||
HAL_TIM_Base_Start_IT(&htim2);
|
HAL_TIM_Base_Start_IT(&htim2);
|
||||||
// Èíèöèàëèçàöèÿ ñ BPM = 120
|
|
||||||
Melody_Init(&melody, &htim1, TIM_CHANNEL_1, 72000000);
|
Melody_Init(&melody, &htim1, TIM_CHANNEL_1, 72000000);
|
||||||
|
|
||||||
Melody_Play(&melody, mySong, sizeof(mySong)/sizeof(mySong[0]), 80);
|
Melody_Play(&melody, mySong, mySong_length, 134);
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
Menu_Process();
|
Menu_Process();
|
||||||
|
|||||||
@@ -663,6 +663,18 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>5</GroupNumber>
|
||||||
|
<FileNumber>33</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\Core\Clock\songs.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>songs.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
|||||||
@@ -807,6 +807,11 @@
|
|||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<FilePath>..\Core\Clock\melody.h</FilePath>
|
<FilePath>..\Core\Clock\melody.h</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>songs.h</FileName>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<FilePath>..\Core\Clock\songs.h</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
|||||||
Reference in New Issue
Block a user