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
+