Mit Hilfe eines sehr einfachen Befehls kann man Töne / Musik mit dem Arduino UNO erzeugen:
tone(Pin, Tonhöhe, Länge)
Sofern man verhindern möchte, dass die Töne ohne Pause gespielt werden, mus man noch Delays einfügen. Für das folgende kleine Programm wurde ein dynamischer Lausprecher mit einem Vorwiderstand 470 Ohm an Pin 12 angeschlossen.
******************************************************
// Erzeugen von Tönen
// Autor: Niels Nikolaisen, Datum: 27. 2. 2017
// Der Anfang des beliebten Liedes "Alle meine Entchen"
#define LSP_PIN 12 // Anschluss für Lautsprecher
#define VIERTEL 400
#define HALBE 800
#define GANZE 1600
#define PAUSE 30
#define c1 261
#define d1 294
#define e1 329
#define f1 349
#define g1 392
#define a1 440
#define b1 493
#define c2 523
void setup() {
pinMode(13, OUTPUT); // Schaltet den Pin 13 auf Ausgang
}
void loop() {
// tone(Pin, Tonhöhe, Länge)
tone(LSP_PIN, c1, VIERTEL);
delay(PAUSE + VIERTEL);
tone(LSP_PIN, d1, VIERTEL);
delay(PAUSE + VIERTEL);
tone(LSP_PIN, e1, VIERTEL);
delay(PAUSE + VIERTEL);
tone(LSP_PIN, f1, VIERTEL);
delay(PAUSE + VIERTEL);
tone(LSP_PIN, g1, HALBE);
delay(PAUSE + HALBE);
tone(LSP_PIN, g1, HALBE);
delay(PAUSE + HALBE);
exit(0); // Programm beenden
}
******************************************************
Siehe auch:
https://www.arduino.cc/en/Tutorial/ToneMelody?from=Tutorial.Tone
https://www.arduino.cc/en/Reference/Tone
https://www.arduino.cc/en/Tutorial/ToneMelody?from=Tutorial.Tone
http://funduino.de/nr-08-toene-erzeugen
Arduino-Keyboard mit 3 Tasten
Damit lässt sich zwar noch nicht Klavier spielen - aber drei verschiedene Töne sind möglich.
Es muss ein dynamischer Lausprecher mit einem Vorwiderstand von 470 Ohm an Pin 2 angeschlossen werden. Bei Verwendung eines Piezo-Lautsprechers benötigt man keinen Vorwiderstand.
Piezomikrofon als Drumpad und Steuerung der Tonhöhe
// Steuerung der Tonhöhe und Ausgabe
// mit Lautsprecher
#define CURSORPOS 12
#define SCHWELLWERT 100
#define SAMPLES 100
#define LSP_PORT 8
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Messwert = 0;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
Messwert = analogRead(A0);
int MesswertAlt = Messwert;
if (Messwert > SCHWELLWERT)
{
for (int i = 0; i < SAMPLES; i++)
{
Messwert = analogRead(A0);
if ((MesswertAlt > Messwert) && (MesswertAlt > SCHWELLWERT)) Messwert = MesswertAlt;
}
for (int i = 0; i < 4; i++)
{
lcd.setCursor(CURSORPOS + i, 1);
lcd.print(" ");
}
// 0 = links, 1 = 2. Zeile
lcd.setCursor(CURSORPOS, 1);
lcd.print(Messwert);
Serial.println(Messwert);
tone(LSP_PORT, Messwert, 300);
delay(300);
}
}
.