Komponendid:
- 4 Juhtmed ;
- 1 Piezo;
- 1 Breadboard Small ;
- 1 Arduino Uno R3.

// Meloodiate mängimine.
// Käsk Arduino tone() - noote tihedus.
// Noodid:
// note frequency
// c 262 Hz
// d 294 Hz
// e 330 Hz
// f 349 Hz
// g 392 Hz
// a 440 Hz
// b 494 Hz
// C 523 Hz
const int buzzerPin = 9;
// pikkus on nootide ja pausite koguste summa
const int songLength = 18;
char notes[] = "cdfda ag cdfdg gf "; // tähed on noodid ja tühik on paus
// Rütmi seadistamine.
int beats[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2};
// "tempo" meloodia kiirus. Kui väiksem tempo_ siis suurem kiirus.
int tempo = 150;
void setup()
{
pinMode(buzzerPin, OUTPUT);
}
void loop()
{
int i, duration;
for (i = 0; i < songLength; i++)
{
duration = beats[i] * tempo;
if (notes[i] == ' ') // kui noot puudub
{
delay(duration);
}
else
{
tone(buzzerPin, frequency(notes[i]), duration);
delay(duration);
}
delay(tempo/10); // väike paus nootide vahel
}
while(true){}
}
int frequency(char note)
{
int i;
const int numNotes = 8; // nootide kogus
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523};
// kui noot on olemas, siis tagastame selle tiheduse
for (i = 0; i < numNotes; i++)
{
if (names[i] == note)
{
return(frequencies[i]);
}
}
return(0);
}
Ülesanne 6 Buzzeri kasutamine
Komponeendid:
- Arduino Uno R3
- Breadboard Small
- 1 Potentsiomeeter
- 18 Juhtmed
- 1 Piezo
- 1 Resistor
- 1602 LCD ekraan
Tinkercad skeem:

Tinkercad proekt: https://www.tinkercad.com/things/7tZZi73eyw4-buzzer?sharecode=A6Dhkr464ssdZHxNhpjp4q_5_J__hWGXSfUVkYHQL2I
Video:
https://drive.google.com/file/d/1Y-0zDI9X9b-hyTM_3XVZXdvdXHksTW4X/view?usp=drivesdk
Kood:
#include <LiquidCrystal.h>
int sensorPin = 0;
int buzzerPin = 9;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte packman1[8] = {
0b11100,
0b11110,
0b11111,
0b11111,
0b11111,
0b11111,
0b11110,
0b11100
};
byte packmanEat[8] = {
0b00011,
0b00111,
0b01110,
0b00011,
0b00001,
0b00001,
0b00011,
0b00111
};
byte tort[8] = {
0b00000,
0b10101,
0b10101,
0b11111,
0b11111,
0b11111,
0b00000,
0b00000
};
byte man[8] = {
0b01110,
0b01110,
0b00100,
0b11111,
0b10101,
0b00100,
0b01110,
0b01010
};
byte treeL[8] = {
0b00001,
0b00001,
0b00011,
0b00111,
0b00011,
0b00111,
0b00011,
0b00101
};
byte treeR[8] = {
0b10000,
0b10000,
0b11000,
0b11100,
0b11000,
0b11100,
0b11000,
0b10100
};
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.createChar(1, packman1);
lcd.createChar(2, packmanEat);
lcd.createChar(3, tort);
lcd.createChar(4, man);
lcd.createChar(5, treeL);
lcd.createChar(6, treeR);
}
void pacman()
{
int notes[] = {
264, 330, 264, 264, 330, 264, 0, 220, 264, 220, 0, 175,
209, 0, 220, 264, 0, 175, 209, 0, 220, 264, 0, 175,
175, 0, 175, 220, 0, 146, 175, 0, 175, 220, 0, 146,
175, 0, 146, 196, 0, 123, 146, 0, 146, 196, 0, 123,
131, 0, 131, 175, 0, 110, 131, 0, 131, 175, 0, 110,
131, 0, 110, 147, 0, 88, 110, 0, 110, 147, 0, 88,
88, 0, 88, 117, 0, 70, 88, 0, 88, 117, 0, 70,
88, 0, 70, 117, 0, 88, 88, 0, 88, 117, 0, 70
};
int times[] = {
150, 150, 150, 150, 150, 150, 100, 300, 150, 150, 100, 300,
150, 100, 300, 150, 100, 300, 150, 100, 300, 150, 100, 300,
150, 100, 300, 150, 100, 300, 150, 100, 300, 150, 100, 300,
150, 100, 300, 150, 100, 300, 150, 100, 300, 150, 100, 300,
150, 100, 300, 150, 100, 300, 150, 100, 300, 150, 100, 300,
150, 100, 300, 150, 100, 300, 150, 100, 300, 150, 100, 300,
150, 100, 300, 150, 100, 300, 150, 100, 300, 150, 100, 300,
150, 100, 300, 150, 100, 300, 150, 100, 300, 150, 100, 300
};
for (int i = 0; i < 96; i++){
tone(buzzerPin, notes[i], times[i]);
delay(times[i]);
}
noTone(buzzerPin);
}
void happyBirthday()
{
int notes[] = {262, 262, 294, 262, 349, 330, 262, 262, 294, 262, 392, 349, 262, 262, 523, 440, 349, 330, 294, 466, 466, 440, 349, 392, 349};
int times[] = {400, 400, 800, 400, 800, 800, 400, 400, 800, 400, 800, 800, 400, 400, 800, 400, 400, 800, 400, 800, 400, 200, 200, 400, 400};
for (int i = 0; i < 25; i++) {
tone(buzzerPin, notes[i], times[i]);
delay(times[i]);
}
noTone(buzzerPin);
}
void mario()
{
int notes[] = {
1318, 1318, 1318, 1046, 1318, 1568, 784,
1046, 784, 659, 880, 987, 932, 880, 784,
1318, 1568, 1750, 1396, 1568, 1318, 1046, 1174, 987,
1046, 784, 659, 880, 987, 932, 880,
784, 1318, 1568, 1750, 1396, 1568, 1318, 1046, 1174, 987,
1568, 1480, 1396, 1244, 1318, 830, 880, 1046, 880, 1046, 1174,
};
int times[] = {
150, 300, 150, 150, 300, 600, 600,
450, 150, 300, 300, 150, 150, 300, 210,
210, 150, 300, 150, 150, 300, 150, 150, 450,
450, 150, 300, 300, 150, 150, 300,
210, 210, 150, 300, 150, 150, 300, 150, 150, 450,
150, 150, 150, 300, 150, 150, 150, 150, 150, 150, 150,
};
int delays[] = {
150, 300, 300, 150, 300, 600, 600,
450, 450, 450, 300, 300, 150, 300, 210,
210, 150, 300, 150, 300, 300, 150, 150, 450,
450, 450, 450, 300, 300, 150, 300,
210, 210, 150, 300, 150, 300, 300, 150, 150, 600,
150, 150, 150, 300, 300, 150, 150, 300, 150, 150, 150,
300, 150, 150, 150, 300, 300, 300, 150, 600,
150, 150, 150, 300, 300, 150, 150, 300, 150, 150, 450, 450, 450, 1200,
};
int min_length = min(min(sizeof(notes) / sizeof(notes[0]), sizeof(times) / sizeof(times[0])), sizeof(delays) / sizeof(delays[0]));
for (int i = 0; i < min_length; i++){
tone(buzzerPin, notes[i], times[i]);
delay(delays[i]);
}
noTone(buzzerPin);
}
void londonBridge()
{
int notes[] = {330, 294, 262, 294, 330, 330, 330, 294, 294, 294, 330, 392, 392, 330, 294, 262, 294, 330, 330, 330, 294, 294, 330, 294, 262};
int times[] = {400, 400, 400, 400, 400, 400, 800, 400, 200, 200, 400, 400, 800, 400, 400, 400, 400, 400, 400, 800, 400, 200, 200, 400, 400};
for (int i = 0; i < 25; i++) {
tone(buzzerPin, notes[i], times[i]);
delay(times[i]);
}
noTone(buzzerPin);
}
void christmas_tree()
{
int notes[] = {
262, 440, 440, 392,
440, 349, 262, 262,
262, 440, 440, 466,
392, 523, 0, 523, 294,
294, 466, 466, 440,
392, 349, 262, 440,
440, 392, 440, 349
};
int times[] = {
400, 400, 400, 400,
400, 400, 400, 400,
400, 400, 400, 400,
400, 600, 20, 400, 400,
400, 400, 400, 400,
400, 400, 400, 400,
400, 400, 400, 600
};
for (int i = 0; i < 29; i++) {
tone(buzzerPin, notes[i], times[i]);
delay(times[i]);
}
noTone(buzzerPin);
}
void loop()
{
int val = analogRead(sensorPin);
val = map(val, 0, 1023, 1, 2);
val = constrain(val, 1, 2);
if (val == 1) {
lcd.clear();
lcd.setCursor(13, 0);
lcd.write(byte(1));
lcd.setCursor(12, 0);
lcd.write(byte(2));
lcd.setCursor(4, 0);
lcd.print("Pac-man");
pacman();
delay(2000);
lcd.clear();
lcd.setCursor(8, 1);
lcd.write(byte(3));
lcd.setCursor(1, 0);
lcd.print("Happy Birthday!");
happyBirthday();
delay(2000);
lcd.clear();
lcd.setCursor(11, 0);
lcd.write(byte(4));
lcd.setCursor(5, 0);
lcd.print("Mario");
mario();
delay(2000);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("London Bridge");
londonBridge();
delay(2000);
lcd.clear();
lcd.setCursor(7, 1);
lcd.write(byte(5));
lcd.setCursor(8, 1);
lcd.write(byte(6));
lcd.setCursor(0, 0);
lcd.print("Christmas tree");
christmas_tree();
delay(2000);
}
if (val == 2) {
lcd.clear();
}
}
Tööpõhimõte:
- Potentsiomeeter sisaldab ja lülitab LCD-ekraani välja
- Piezo teeb häält (meloodia)
- Siis mängivad meloodiad ja LCD-monitoril kirjutatakse meloodia nimi ja joonis
- Koostas skeemi ja salvestas koodi keskkonda «tinkercad.com»
Kasutatud koodi selgitus:
notes[]
– Massiiv, kus tähed esindavad muusikapala noote ja tühikud pausi. See sätestab muusikalise järjestuse.beats[]
– Massiiv, mis määrab iga noodi kestuse meloodias, mõjutades rütmi.tempo
– Muutuja, mis reguleerib meloodia kiirust, kus väiksem väärtus tähendab suuremat kiirust.songLength
– Konstant, mis määrab muusikapala pikkuse täisarvuna, aidates määratleda meloodia lõppu.duration
– Muutuja, mis tähistab helisignaali kestust millisekundites.frequency
– Muutuja, mis salvestab helisignaali sageduse väärtuse.