3 different melodys for 3 different varaiables?

hey,
ich kenne mich nur mit den grundkenntnissen für das schreiben einer melody für einen sketch aus...
ist es möglich 3 verschidene melodien für drei verschieden variablen über ein piezo element in einem sketch zu spielen?
wenn ja wie?
hier ist mein sketch:

int button = 11;
int x = 0;
int ledPin = 6; 


void setup (){
  pinMode(button, INPUT);
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  ledPin == LOW;
}

void loop(){
  button = digitalRead(11);
  if ( button == HIGH){
    delay(1000);
   x ++;
   Serial.print(x);
  Serial.print("\n");
  }
  else{
  delay(1);
  x = 1;
  }
  
   if ( x == 2){
   
    button = digitalRead(11);
    if ( button == LOW){
 
   digitalWrite(ledPin, HIGH);
   delay(1000);
   digitalWrite(ledPin, LOW);
   delay(10);
   
   x = 1;
  
 if ( x == 5){
   
    button = digitalRead(11);
    if ( button == LOW){
 
   digitalWrite(ledPin, HIGH);
   delay(1000);
   digitalWrite(ledPin, LOW);
   delay(10);
   digitalWrite(ledPin, HIGH);
   delay(1000);
   digitalWrite(ledPin, LOW);
   delay(10);
   
   x = 1;
 
 
 }
 }
 
 if ( x == 10){
   
   button = digitalRead(11);
    if ( button == LOW){
 
   digitalWrite(ledPin, HIGH);
   delay(1000);
   digitalWrite(ledPin, LOW);
   delay(10);
   digitalWrite(ledPin, HIGH);
   delay(1000);
   digitalWrite(ledPin, LOW);
   delay(10);
   digitalWrite(ledPin, HIGH);
   delay(1000);
   digitalWrite(ledPin, LOW);
   delay(10);
   
   x = 1;
   
    }
 }
   
 else if (x < 5 );{
   
   digitalWrite(ledPin, LOW);
   
 if (x == 11){
   x = 1;
 }
 }
    }
   }
   
 
 }

kann man das bei den drei variablen einfügen?

Du meinst statt x==2, x==05, x==010 bei a==1, b==1 c==1?
Nicht so einfach wenn die Variablen gleichzeitig diese Werte annehmen.
aber prinzipiell:

if (a==1)
{
melodie 1;
a==0;}
if (b==1)
{
melodie 2;
b==0;}
...

Grüße Uwe

Elegant wäre es vielleicht auch, für jede Melodie ein array zu definieren, das die Töne als Integer-Variablen enthält und das jeweilige array dann einer zentralen Funktion, die nur für das Abspielen der Melodie zuständig ist, zu übergeben. Auf Seite 67 dieses (sehr empfehlenswerten) Tutorials gibt es ein Beispiel, das in diese Richtung geht:

http://www.earthshineelectronics.com/files/ASKManualRev5.pdf

@ UWE

wo sage ich dem arduino aber welche melodie die melodie 1 ist?
wie füge ich die drei versch. melodien hier ein?

hier ist zb eine melodie, die ich gerne eingebaut hätte:

// Project 11 - Melody Player
int speakerPin = 9;
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;
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);
}
}
}
void setup() {
pinMode(speakerPin, OUTPUT);
}
void loop() {
for (int i = 0; i < length; i++) {
if (notes[i] == ' ') {
delay(beats[i] * tempo); // rest
} else {
playNote(notes[i], beats[i] * tempo);
}
// pause between notes
delay(tempo / 2);
}
}

wo sage ich dass diese melodie melodie 1 ist?

Liess im Tutorial :slight_smile: Auf Seite 42 ist z.B. zu lesen, wie man ein Array deklariert bzw. initialisiert, auf Seite 58 siehst Du ein Beispiel einer Funktion mit Parameter-Übergabe. Ein bisschen programmieren lernen muss man schon, aber das macht ja auch Spaß :slight_smile:

Viel Erfolg und Gruß, Thomas