Pages: [1]   Go Down
Author Topic: Melody Abspielen  (Read 553 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 153
Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich probiere gerade etwas rum und versuche auf Knopfdruck einen ton abspielen zu lassen.
Ich habe auch schon das gefunden
http://www.arduino.cc/en/Tutorial/Melody
, super Tutorial aber ich weiß nicht wie ich das:

Code:
int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

löschen kann und wenn

if(Green < 1){
    Serial.println("c");
  }

das dann der ton abgespielt wird, denn ich will ja keine reihe an noten sondern nur immer eine, hat jemand einen tipp?
Logged

Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Noten und die Pausen sind in Arrays abgelegt, in der void loop() Methode wird einfach über die Länge des Noten-Arrays geloopt.
Was Du vermutlich willst ist:
if(Green < 1)
{
   playNote('c', 300);
}

Dann spielt er 300 Mikrosek. lang die c Note.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 153
Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

das ist der code den ich benutze, einfach mal zusammen geschnibbelt weil ich mich mit Melody überhaupt nicht auskenne:

Code:
int speakerPin = 9;

void setup() {
  pinMode(speakerPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int Green = analogRead(A0);
  int Red = analogRead(A1);
  int Yellow = analogRead(A2);
  int Blue = analogRead(A3);
  int Orange = analogRead(A4);
  int Enter = analogRead(A5);
 
if(Green < 1){
   playNote('c', 300);
}
 
  if(Red < 1){
     playNote('d', 300);
  }
 
  if(Yellow < 1){
     playNote('e', 300);
  }
 
  if(Blue < 1){
     playNote('f', 300);
  }
 
  if(Orange < 1){
     playNote('g', 300);
  }
 
}

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

  // play the tone corresponding to the note name
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}

vielen dank! smiley
Logged

Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sehr gut.
Hier noch n kleines Details für den loop() und die Initialisierung der Variablen.
Code:
int speakerPin = 9;
int Green      = 1;
int Red        = 1;
int Yellow     = 1;
int Blue       = 1;
int Orange     = 1;
int Enter      = 1;
int tonLaenge  = 300;

void setup() {
  pinMode(speakerPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  Green  = analogRead(A0);
  Red    = analogRead(A1);
  Yellow = analogRead(A2);
  Blue   = analogRead(A3);
  Orange = analogRead(A4);
  Enter  = analogRead(A5);
 
  if(Green  < 1) playNote('c', tonLaenge);
  if(Red    < 1) playNote('d', tonLaenge);
  if(Yellow < 1) playNote('e', tonLaenge);
  if(Blue   < 1) playNote('f', tonLaenge);
  if(Orange < 1) playNote('g', tonLaenge); 
}

bei den if's brauchst Du die {}-Klammern nur wenn mehrere Befehle kommen. Wenn es nur ein einziger Befehl ist kannst Du diese weglassen.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 153
Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

danke! hier ein Keks! (^.^)/o

ich muss noch das mit dem < 1 ändern weil jetzt alle pins gleichzeitig auf 0 sind das werde ich glaube ich alleine schaffen.
Logged

Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht

Pages: [1]   Go Up
Jump to: