Go Down

Topic: Melody Abspielen (Read 718 times) previous topic - next topic

vedel26

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: [Select]

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?
Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht

Radar

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.

vedel26

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

Code: [Select]

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! :)
Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht

Radar

Sehr gut.
Hier noch n kleines Details für den loop() und die Initialisierung der Variablen.
Code: [Select]

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.

vedel26

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.
Ich wuerde so gerne die Welt veraendern, doch Gott gibt mir den Quelltext nicht

Go Up