Anda di halaman 1dari 4

MEMBUAT PIANO DARI ARDUINO ATMEGA8

Membuat Piano Dari Arduino ATMEGA8


By
DewataElektronik
April 23, 2011Posted

in: Arduino / Erulduino, Rangkaian Elektronika

Pia
no adalah salah satu alat musik digital yang memiliki tombol tombol sebagai penentu nada mana
yang akan kita keluarkan. Setiap nada yang dihasilkan memiliki frekwensi yang berbeda sesuai tinggi
rendahnya nada.
Pada kesempatan kali ini, salah satu admin Dewata Elektronik yaitu Aput mencoba membuat sebuah
piano dengan memanfaatkan arduino ATMEGA8 yang lebih murah dari ATMEGA328 bawaan arduino
duemilanove. Piano sederhana ini dibuat dari tombol yang pada umumnya digunakan pada panel
televisi tabung. dan beberapa resistor piano sederhana ini sudah dapat beraksi dengan sangat baik.

Konfigurasi Arduino
Piano yang kita buat kali ini tidak hanya dapat bersuara jika ditekan tombolnya, namun piano ini dapat
merekam nada yang telah kita buat dan memutarnya kembali dengan benar serta menampilkan led
yang telah kita tekan nadanya pada sebelumnya.
Cara pengoprasiannya sangat mudah, anda hanya perlu menekan nada yang diinginkan lalu jika
sudah selesai maka anda hanya tinggal menekan tombol yang paling pinggir sendiri sebagai tanda
selesai maka buzzer akan menampilkan ulang suara yang tadi ditekan.

Source Code :
1 /*
2 Author: Kenny Z
License: Creative Commons Attribution Share-Alike
3 Description: A small keyboard that can play tones from
4 c7 to C8, with auto record, and a button for playback.
5 */
6 #define SPK 13
#define PLAYBACK_BTN 12
7 #define BUFFERSIZE 160
8 int keys[] = {2,3,4,5,6,7,8,9};
9 //int tones[] = {2093,1976,1760,1568,1397,1319,1175,1047};
10int tones[] = {1047,1175,1319,1397,1568,1760,1976,2093};
11int length = sizeof keys/sizeof *keys;
12
13// for recording
14int count = 0;
15int recorder[BUFFERSIZE];
16unsigned long interval[BUFFERSIZE];
17unsigned long pauseInterval[BUFFERSIZE];
18
19void setup() {
20pinMode(SPK,OUTPUT);
21pinMode(PLAYBACK_BTN,INPUT);
22for(int i=0; i<length; i++){

23pinMode(keys[i],INPUT);
24}
}
25
26
void loop() {
27
unsigned long startTime;
28
static unsigned long pauseTime;
29
static int playback_btn=0;
30
31int lastState = LOW;
32// prevent buffer overflow
33if(count>=BUFFERSIZE) count=0;
34
35// playback button
36if(digitalRead(PLAYBACK_BTN)==HIGH){
37playback();
playback_btn=1;
38}
39
40// for each keyboard key
41for(int i=0; i<length; i++){
42//startTime = micros();
43startTime = millis();
44while(digitalRead(keys[i])==HIGH){
if(playback_btn){
45// reset count after playback
46playback_btn = 0;
47count=0;
48}
49recorder[count]=i;
tone(SPK,tones[i]);
50delay(200); // debounce
51lastState=HIGH;
52}
53if(lastState==HIGH){
lastState=LOW;
54noTone(SPK);
55interval[count]=millis()-startTime;
56if(count)
57pauseInterval[count-1]=millis()-pauseTime;
58pauseTime=millis();
count++;
59}
60}
61}
62
63void playback(){
64int index, key;
65for(int i=0; i<length; i++){
66pinMode(keys[i],OUTPUT);
67}
68for(int i=0; i<count; i++){
index = recorder[i];
69key = keys[index];
70digitalWrite(key,HIGH);
71tone(SPK,tones[index]);
72delay(interval[i]);

73
74
75
76
77
78digitalWrite(key,LOW);
79noTone(SPK);
80delay(pauseInterval[i]);
81}
82for(int i=0; i<length; i++){
83pinMode(keys[i],INPUT);
}
84
85
86
87
88
89

Anda mungkin juga menyukai