From ad9b951bdbf9a1ec73648ed39317dab90c2757f9 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Sat, 18 Apr 2026 17:02:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=20=D1=85?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D1=80=20=D1=81=20=D0=BC=D0=B5=D0=BB=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D1=8F=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Clock/melody.c | 5 +- Core/Clock/songs.h | 124 +++++++++++++++++++++++++++++++++++++++++++ Core/Src/main.c | 50 +++-------------- MDK-ARM/lamp.uvoptx | 12 +++++ MDK-ARM/lamp.uvprojx | 5 ++ 5 files changed, 150 insertions(+), 46 deletions(-) create mode 100644 Core/Clock/songs.h diff --git a/Core/Clock/melody.c b/Core/Clock/melody.c index 5678433..d04d957 100644 --- a/Core/Clock/melody.c +++ b/Core/Clock/melody.c @@ -1,6 +1,7 @@ #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) { @@ -31,7 +32,7 @@ static void _set_freq(MelodyHandle* mh, uint32_t freq) { // Фиксированный период __HAL_TIM_SET_AUTORELOAD(mh->htim, FIXED_ARR); // Скважность 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) { diff --git a/Core/Clock/songs.h b/Core/Clock/songs.h new file mode 100644 index 0000000..af214a2 --- /dev/null +++ b/Core/Clock/songs.h @@ -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}, +}; \ No newline at end of file diff --git a/Core/Src/main.c b/Core/Src/main.c index 828216a..857a748 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -28,6 +28,7 @@ #include "menu.h" #include "segment.h" #include "melody.h" +#include "songs.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -79,49 +80,11 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { Segment_Process(); } } + MelodyHandle melody; -const Note mySong[] = { -// //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}, -}; +#define curr_song Polyphia_OD +Note *mySong = (Note *)curr_song; +int mySong_length = song_length(curr_song); /* USER CODE END 0 */ @@ -168,10 +131,9 @@ int main(void) Menu_Init(); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); HAL_TIM_Base_Start_IT(&htim2); - // BPM = 120 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) { Menu_Process(); diff --git a/MDK-ARM/lamp.uvoptx b/MDK-ARM/lamp.uvoptx index 9a534b3..44795ff 100644 --- a/MDK-ARM/lamp.uvoptx +++ b/MDK-ARM/lamp.uvoptx @@ -663,6 +663,18 @@ 0 0 + + 5 + 33 + 5 + 0 + 0 + 0 + ..\Core\Clock\songs.h + songs.h + 0 + 0 + diff --git a/MDK-ARM/lamp.uvprojx b/MDK-ARM/lamp.uvprojx index 066d24e..584f007 100644 --- a/MDK-ARM/lamp.uvprojx +++ b/MDK-ARM/lamp.uvprojx @@ -807,6 +807,11 @@ 5 ..\Core\Clock\melody.h + + songs.h + 5 + ..\Core\Clock\songs.h +