Сделан хедер с мелодиями

This commit is contained in:
2026-04-18 17:02:00 +03:00
parent e5285479f9
commit ad9b951bdb
5 changed files with 150 additions and 46 deletions

View File

@@ -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
View 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},
};

View File

@@ -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();

View File

@@ -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>

View File

@@ -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>