Katse 6

katse 6 Katse Buzzer

Töö kirjeldus:

Looda Pieso muusikat mängida

Komponendid:

Pieso
Juhtmed 4 tk

Ühendus skeem:

Programm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// Этот скетч использует зуммер для воспроизведения мелодий.
 
// Команда Arduino tone() будет издавать звуки определенной частоты.
 
// Мы создаем функцию, которая сопоставляет символ нотной гаммы
 
// ("До-ре-ми-фа...До") соответствующей частоте из следующей таблицы:
 
// 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;
 
// Мы создали массив с нотами, которые хотим воспроизвести, измените эти значения, чтобы создать свои мелодии!
 
// Длина должна равняться общему количеству нот и пауз
 
const int songLength = 18;
 
// Обозначение нот представляет собой массив из текстовых символов,
 
// соответствующим нотам в песне. Пробел означает паузу (пустую ноту)
 
char notes[] = "cdfda ag cdfdg gf "; // пробелы означают паузы
 
// Ритм задается массивом из длительности нот и пауз между ними.
 
// "1" - четвертная нота, "2" - половинная, и т.д.
 
// Не забывайте, что пробелы должны быть тоже определенной длинны.
 
int beats[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2};
 
// "tempo" это скорость проигрывания мелодии.
 
// Для того, чтобы мелодия проигрывалась быстрее, вы
 
// должны уменьшить следующее значение.
 
int tempo = 150;
 
void setup()
 
{
 
  pinMode(buzzerPin, OUTPUT);
 
}
 
void loop()
 
{
 
  int i, duration;
 
  for (i = 0; i < songLength; i++) // пошаговое воспроизведение из массива
 
  {
 
    duration = beats[i] * tempo;  // длительность нот/пауз в ms   
 
    if (notes[i] == ' ')          // если нота отсутствует?
 
    {
 
      delay(duration);            // тогда не большая пауза
 
    }
 
    else                          // в противном случае играть
 
    {
 
      tone(buzzerPin, frequency(notes[i]), duration);
 
      delay(duration);            // ждать пока проигрывается
 
    }
 
    delay(tempo/10);              // маленькая пауза между нотами
 
  }
 
  // Мы хотим, чтобы мелодия проиграла всего один раз, так что здесь остановимся окончательно:
 
  while(true){}
 
  // Если же вы хотите, чтобы мелодия играть снова и снова, Удалить вышеуказанное заявление
 
}
 
int frequency(char note)
 
{
 
  // Эта функция принимает символ ноты (a-g), и возвращает
 
  // частоту в Гц для функции tone().
 
  int i;
 
  const int numNotes = 8// количество хранимых нот
 
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
 
  int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523};
 
  // Теперь мы будем искать во всем массиве, символ ноты и если находим, возвращаем частоту для этой ноты. 
 
  for (i = 0; i < numNotes; i++// пошаговый перебор нот
 
  {
 
    if (names[i] == note)         // если находим
 
    {
 
      return(frequencies[i]);     // возвращаем частоту
 
    }
 
  }
 
  return(0);  // Поиск символа не дал результата? Но, необходимо  вернуть какое-то значение, так вернем 0.
 
}

Foto:

Pieso mängid heli

Ülesanne 6 Muusikaline piiksutaja

Töö kirjeldus:

Muusikaline piiksutaja mängib muusikat

Komponendid:

Arduino Uno
Arendusplaat
Potentsioometr 1tk
LCD ekraan 1602
Nupp
Pieso
Takisti 220 Om
Juhtmed 20 tk

Ühendus skeem:

https://www.tinkercad.com/things/8xTd8AjlyFf-ingenious-bigery/editel?sharecode=S9KX4ia9GYvcUdpK1N12vtoAcTPlTu7vkbUuBBqa–w

Seletus:

Pieso mängib alguses 1 muusikat, nuppu all hoides ja vabastades vahetab muusikat, LCD ekraan näitab praegu muusika ja number

Programm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int piezoPin = 7;
const int buttonPin = 6;
 
int mode = 1; // Alg režiim
int currentTrack = 0;
 
// Määrame siin oma muusikapalad
const int tracks[][8] = {
  // Music 1
  {
    261, 196, 196, 220, 196, 0, 247, 261 // Hz
  },
  // Music 2
  {
    329, 329, 349, 392, 392, 349, 329, 293 // Hz
  },
  // Music 3
  {
    261, 329, 392, 523, 392, 329, 261, 196 // Hz
  }
};
 
// Määrame muusikapalade iga noodi kestus
const int durations[][8] = {
  // Muusikapala 1 kestused
  {
    4, 8, 8, 4, 4, 4, 4, 4
  },
  // Muusikapala 2 kestused
  {
    8, 8, 4, 4, 4, 4, 4, 4
  },
  // Muusikapala 3 kestust
  {
    4, 4, 4, 4, 4, 4, 4, 4
  }
};
 
void playMusic(const int* notes, const int* durations, int numNotes) {
  for (int i = 0; i < numNotes; i++) {
    int noteDuration = 1000 / durations[i];
    tone(piezoPin, notes[i], noteDuration);
    delay(noteDuration * 1.30); // Lisame rütmi jaoks väike viivitus nootide vahele
    noTone(piezoPin);
  }
}
 
void setup() {
  lcd.begin(16, 2);
  pinMode(buttonPin, INPUT_PULLUP);
}
 
void loop() {
  int buttonState = digitalRead(buttonPin);
 
  if (buttonState == LOW) {
    mode++;
    if (mode > 3) {
      mode = 1; //  Tagasi esimesse režiimi
    }
    delay(100); // Tagasilöögi viivitus
  }
 
  switch (mode) {
    case 1:
      currentTrack = 0;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Playing track:");
      lcd.setCursor(0, 1);
      lcd.print("Track 1");
      playMusic(tracks[0], durations[0], sizeof(tracks[0]) / sizeof(tracks[0][0]));
      break;
    case 2:
      currentTrack = 1;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Playing track:");
      lcd.setCursor(0, 1);
      lcd.print("Track 2");
      playMusic(tracks[1], durations[1], sizeof(tracks[1]) / sizeof(tracks[1][0]));
      break;
    case 3:
      currentTrack = 2;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Playing track:");
      lcd.setCursor(0, 1);
      lcd.print("Track 3");
      playMusic(tracks[2], durations[2], sizeof(tracks[2]) / sizeof(tracks[2][0]));
      break;
    default:
      break;
  }
 
  delay(100); // LCD-ekraani uuendamine
}

Video:

https://drive.google.com/drive/folders/1QIIOFeZJeWjZsU1fwYtt2furDs4VmduP

Kus seda võib kasutada:

Mp3 mängija
Nutikõlar
Mikrolaineahi

Variant mis töötas videos:

Ühendamis skeem:

https://www.tinkercad.com/things/5sXckwXUeNS-spectacular-leelo/editel?sharecode=n3ABPI410VUxPRqtlTZdznvJ0BNlsPFKEuCCDgotwkg

Seletus:

Potentsiomeetri väärtuse vahetamisel alam, kesk ja kõrg muusika pala vahetab vastavalt potentsimeetri väärtusele, ehk alam – pala 1, kesk – pala 2, kõrg – pala3. Iga pala mängimisel põleb oma LED diood, et saame näha mis pala praegu mängib.

Programm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const int RedPin = 10;
const int YellowPin = 9;
const int GreenPin = 8;
const int Potentiometer = A0;
const int PiezoPin = 6;
 
int currentTrack = 0;
 
// Määratleme muusikapalad
const int tracks[][8] = {
  // Music 1
  {
    261, 196, 196, 220, 196, 0, 247, 261 // Hz
  },
  // Music 2
  {
    329, 329, 349, 392, 392, 349, 329, 293 // Hz
  },
  // Music 3
  {
    261, 329, 392, 523, 392, 329, 261, 196 // Hz
  }
};
 
// Määrame lugude iga noodi kestused
const int durations[][8] = {
  // Muusika 1 pikkus
  {
    4, 8, 8, 4, 4, 4, 4, 4
  },
  // Muusika 2 pikkus
  {
    8, 8, 4, 4, 4, 4, 4, 4
  },
  // Muusika 3 pikkus
  {
    4, 4, 4, 4, 4, 4, 4, 4
  }
};
 
void setup() {
  pinMode(RedPin, OUTPUT);
  pinMode(YellowPin, OUTPUT);
  pinMode(GreenPin, OUTPUT);
  pinMode(Potentiometer, INPUT);
  pinMode(PiezoPin, OUTPUT);
 
  // Initsialiseerime jadaside
  Serial.begin(9600);
}
 
void loop() {
  // Loeme potentsiomeetri väärtust
  int potValue = analogRead(Potentiometer);
 
  // Printime potentsiomeetri väärtus serial monitorile
  Serial.println(potValue);
 
  // Määrame praegune rada potentsiomeetri väärtuse põhjal
  if (potValue < 341) {
    currentTrack = 0;
  } else if (potValue >= 341 && potValue < 682) {
    currentTrack = 1;
  } else {
    currentTrack = 2;
  }
 
  // Seadistame LED-viigud praeguse raja alusel
  digitalWrite(RedPin, currentTrack == 0);
  digitalWrite(YellowPin, currentTrack == 1);
  digitalWrite(GreenPin, currentTrack == 2);
 
  // Mängime muusikapala
  playTrack(currentTrack);
 
  delay(100); // Viivitus sujuvamaks tööks
}
 
void playTrack(int trackIndex) {
  // Korrame määratud loo noote ja kestus
  for (int i = 0; i < 8; i++) {
    int note = tracks[trackIndex][i];
    int duration = durations[trackIndex][i];
 
    // Mängime noot
    tone(PiezoPin, note, duration * 100);
 
    // Viivitus nootide vahel
    delay(duration * 100);
  }
 
  // Pärast loo esitamist lülitage pieso välja
  noTone(PiezoPin);
}