Go Down

Topic: Melody Abspielen (Read 1 time) 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?

Signal

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! :)

Signal

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.

Go Up