[BASIC] 005 SOUND PLAY JINGLE BELLS (เล่นเพลง จิงเกิลเบลส์)
สวัสดีครับ สำหรับหัวข้อบทเรียนพื้นฐานบนบอร์ด HONEYLemon ที่ใช้งานผ่าน arduino library โดยเป็นการใช้งานเกี่ยวกับเสียง โดยการเล่นเป็นเพลงตามตัวโน๊ต ต่างๆ
อ่านข้อมูลเพิ่มเติมในการประยุกต์ใช้คำสั่งเกี่ยวกับเสียงได้ที่นี่
บทความนี้เป็นการประยุกต์ใช้คำสั่ง lemon.tone() และ lemon.noTone() ในกระบวนการแรกของการสั่งให้เล่นดนตรีเป็นเพลงนั้นจะต้องมีข้อมูลตัวโน๊ตก่อนว่า ตัวโน๊ตแต่ละตัวมีความถี่อะไรและเราจะเอามาต่อกันเป็น Melody
จากตารางข้างต้นเราจะได้ตัวโน๊ตและความถี่ของเสียงแล้ว หลังจากนั้นเราก็แปลงโน๊ตเป็นความถี่กันครับ เช่น C จะได้ความถี่ 523 เป็นต้น
เมื่อครบทุกตัวอักษรแล้วเราก็มาสร้างอาเรย์เก็บตัวโน๊ตต่างๆ กันครับ
1
...
2
// สร้างอาเรย์สำหรับเก็บข้อมูลตัวโน๊ต
3
int notes[]={
4
659, 659, 659, -1, 659, 659, 659, -1, 659, 784, 523,
5
587, 659, -1, 698, 698, -1, 698, 698, -1, 698, 659,
6
659, 659, 659, -1, 659, 587, 587, 659, 587, 784
7
};
8
...
Copied!
เมื่อได้เป็นเพลงแล้วเราก็เริ่มสั่งให้โปรแกรมทำงานเล่นเพลงนี้กันเลย โดยให้เล่นทีละตัวโน๊ตไปเรื่อยๆ จนกว่าจะครบทุกตัว
1
...
2
// วนอ่านข้อมูลตัวโน๊ตแต่ละตัวในอาเรย์ notes[]
3
for(int i=0;i<(sizeof(notes)/sizeof(int *));i++){
4
lemon.tone(notes[i],400); // สั่งให้เล่นตัวโน๊ต
5
}
6
...
Copied!
อธิบายคำสั่งเพิ่มเติม
1
for(
2
int i=0; // สร้าง i เป็นตัวแปร int เพื่อเป็น index ให้ array ของตัวโน๊ต
3
i<(sizeof(notes)/sizeof(int *)); // ตรวจสอบว่าตอนนี้ที่เล่นอยู่เป็นตัวสุดท้ายหรือยัง
4
i++) // ถ้าไม่ใช่ตัวสุดท้ายให้เล่นโน๊ตตัวถัดไป
Copied!
ภายในคำสั่งวนลูป หรือทำซ้ำ ( for ) นั้นใช้คำสั่ง lemon.tone() เพื่อให้เล่นตัวโน๊ตนั้นๆ
1
lemon.tone(notes[i],400);
2
// อธิบายเพิ่มเติม
3
lemon.tone( // คำสั่งสำหรับเล่นตัวโน๊ตตามความถี่ต่างๆ
4
notes[i], // เลือกตัวโน๊ตจาก array โดยอ้างอิงจากตัวที่ i เช่น i=0 หมายถึงตัวแรก
5
400 // เล่นนานเป็นระยะเวลา 400 มิลลิวินาที (0.4 วินาที) แล้วหยุดเล่น
6
);
Copied!
ดังนั้นเมื่อทำงานร่วมกันแล้วสิ่งที่เกิดขึ้นคือ…
1
int notes[]={
2
659, 659, 659, -1, 659, 659, 659, -1, 659, 784, 523,
3
587, 659, -1, 698, 698, -1, 698, 698, -1, 698, 659,
4
659, 659, 659, -1, 659, 587, 587, 659, 587, 784
5
};
6
7
for(int i=0;i<(sizeof(notes)/sizeof(int *));i++){
8
lemon.tone(notes[i],400); // สั่งให้เล่นตัวโน๊ต
9
}
10
11
// 1.สร้างตัวแปร array ชื่อ notes เพื่อจัดเก็บความถี่ของโน๊ตดนตรี ประกอบกันเป็น melody
12
// 2.ใช้คำสั่งทำซ้ำ loop โดยให้เล่นตั้งแต่โน๊ตตัวแรก (0) ไปจนถึงตัวสุดท้าย
13
// 3.โน๊ตแต่ละตัวเล่นนานระยะเวลา 0.4 วินาที แล้วจึงเล่นตัวถัดไป
Copied!
ตัวอย่าง source code
1
/*
2
Basic : การเขียนโปรแกรมกับการใช้งานเสียงดนตรีเพลง Jingle bells บนบอร์ดไมโครคอนโทรลเลอร์ HONEYLemon
3
*/
4
#include <HONEYLemon.h>
5
6
void setup()
7
{
8
lemon.begin(); // เรียกใช้งานฟังก์ชั่นเริ่มต้นของบอร์ด HONEYLemon
9
10
Serial.begin(115200); // เรียกใช้งาน Serial
11
lemon.debug(Serial); // ขอดู debug ของบอร์ด HONEYLemon ผ่าน Serial
12
}
13
14
void loop()
15
{
16
// สร้างอาเรย์สำหรับเก็บข้อมูลตัวโน๊ต
17
int notes[]={
18
659, 659, 659, -1, 659, 659, 659, -1, 659, 784, 523,
19
587, 659, -1, 698, 698, -1, 698, 698, -1, 698, 659,
20
659, 659, 659, -1, 659, 587, 587, 659, 587, 784
21
};
22
23
// วนอ่านข้อมูลตัวโน๊ตแต่ละตัวในอาเรย์ notes[]
24
for(int i=0;i<(sizeof(notes)/sizeof(int *));i++){
25
lemon.tone(notes[i],400); // สั่งให้เล่นตัวโน๊ต
26
}
27
28
lemon.noTone(); // สั่งให้หยุเล่นเสียง
29
delay(1000); // รอ 10000 มิลลิวินาที (10 วินาที)
30
}
Copied!
Last modified 1yr ago
Copy link