// Этот скетч использует зуммер для воспроизведения мелодий.
// Команда 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.
}

Ülesanne 6 Музыкальная пищалка

https://www.tinkercad.com/things/fY8d7udYTrr-copy-of-neat-trug/editel?sharecode=csMXffF1gjFdi4gdl7RutRcJJd3z73-0W6YHhv7RYKA

const int buzzerPin = 9;
const int songLength = 18;
char notes[] = "cdfda ag cdfdg gf "; // пробелы означают паузы
int beats[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2};
int tempo = 150;
int Value_new;
int sensorPin=A0;
const int songLengthi = 34;
char notesi[] = "e e e C e e e C e g C d e f e d C ";
int beatsi[] = {1,1,1,1,4,4,2,4,4,4,4,4,2,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
const int songLengtha = 37;
char notesa[] = "g f e d e f g g f e d e f g g f e d e";
int beatsa[] = {4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,4,2,2,4,2,2,2,2,2,2,2,1,1,1,1,1,1,1};
int currentMelody = 1;
void setup() {
  pinMode(buzzerPin, OUTPUT);
  pinMode(sensorPin, OUTPUT);
}
void loop() {
    Value_new = analogRead(sensorPin);
  Value_new=map(Value_new,0,1023,1,3);
  Value_new=constrain(Value_new,1,3);
  if (currentMelody == 1) {
    playMelody(notes, beats, songLength);
  } else if (currentMelody == 2) {
    playMelody(notesi, beatsi, songLengthi);
  }else if (currentMelody == 3) {
    playMelody(notesa, beatsa, songLengtha);
  }
}
int frequency(char note) {
  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;
}
void playMelody(char melodyNotes[], int melodyBeats[], int melodyLength) {
  int i, duration;
  for (i = 0; i < melodyLength; i++) {
    duration = melodyBeats[i] * tempo;
    if (melodyNotes[i] == ' ') {
      delay(duration);
    } else {
      tone(buzzerPin, frequency(melodyNotes[i]), duration);
      delay(duration);
    }
    delay(tempo / 10);
  }
  currentMelody++;
  if (currentMelody > 2) {
    currentMelody = 1;
  }
}

Oli kasutatud:
juhtmed 7 tk
arduino uno R3 1 tk
arendusplaat 1tk
Buzzer 1tk
potentsial 1 tk

Töö kirjeldus:

Programmi alguses deklareeritakse kõik vajalikud muutujad ja konstandid, sealhulgas vilepuhuja ja anduri viigud, samuti massiivid nootide ja kestustega iga hääle jaoks.
Funktsioon setup() seab vilepuhuja ja anduri viigude režiimid.
Funktsioon loop() loeb andurilt väärtuse ja teisendab selle map() ja constrain() abil vahemikku 1 kuni 3.
Sõltuvalt valitud meloodia currentMelody väärtusest kutsutakse funktsioon playMelody() koos sobivate parameetritega nootide, kestuse ja meloodia pikkuse jaoks.
Funktsioon frequency() määrab iga noodi helisageduse.
Funktsioon playMelody() mängib meloodiat. See läbib nootide ja kestuste massiivi iga elemendi, pausides või mängides noote delay() ja tone() abil.

Helisignaal rakendused:

Helisignaal kasutatakse akustiliste signaalide või meloodiate genereerimiseks. Seda saab kasutada erinevates seadmetes ja süsteemides hoiatamiseks, signaalimiseks, teatud sündmuste tähistamiseks või kasutaja tähelepanu äratamiseks. Piiksutid võivad olla lihtsad elektromehaanilised seadmed või kasutada helide loomiseks elektroonilisi signaaligeneraatoreid. Neid kasutatakse laialdaselt autodes, tarbeelektroonikas, turvasüsteemides, mänguasjades jne.