Hi , bin Schüler (Arduino-Totalanfänger) , und habe die Aufgabe bekommen mit zwei "while"-Schleifen einen auf-und einen absteigenden Ton zu erzeugen....den Aufsteigenden krieg ich hin, aber Auf-und Abssteigend abwechselnd schaf ich nicht....
Bitte um Hilfe ! :o
Hier ist mein unnützer Code:
int lautPin = 2;
int frequenz;
void setup() {
frequenz = 400;
}
void melodie1()
{
while (frequenz <= 4000)
{
tone(lautPin, frequenz);
delay(100);
frequenz = frequenz + 100;
}
}
void melodie2()
{
tone(lautPin, frequenz);
delay(100);
frequenz = frequenz - 100;
}
void loop() {
melodie1();
delay(2000);
if (frequenz >= 4000)
{
melodie2();
delay(2000);
}
}
Hallo,
wo ist in der zweiten Funktion melodie2 die while-Schleife? Du hast nur eine while-Schleife in melodie1. Ergänze etwas wie while (frequenz >= 400) in der zweiten Funktion.
Das hab ich schon probiert und es gibt keinen Unterschied...Ton steigt an und springt zwischen 4000 und 4100 hin und her.... 
Hab jetzt gesehn das die Frequenz zwischen 4000 und 4100 hin und her wechselt....
Logikfehler soweit erkannt...., aber WIE behebe ich den? Scheinbar ist meine Logikschaltung im Gehirn auch fehlerhaft . Egal ob ich if oder while nehme , es kommt das gleiche raus
Katsumoto:
Hab jetzt gesehn das die Frequenz zwischen 4000 und 4100 hin und her wechselt....
Logikfehler soweit erkannt...., aber WIE behebe ich den? Scheinbar ist meine Logikschaltung im Gehirn auch fehlerhaft . Egal ob ich if oder while nehme , es kommt das gleiche raus
Wie wäre es denn, wenn du den aktuellen Sketch hier postest, dann können wir deine Fehler besser sehen.
Aber bitte diesmal in Code-Tags posten, dann ist der besser zu lesen.
Schaltfläche </> oben links im Editorfenster verwenden.
Beachte meinen Vorschlag oben
Theseus:
Ergänze etwas wie while(frequenz >= 400) in der zweiten Funktion.
Wenn das noch immer nicht läuft, poste deinen neuen Sketch mit Code-Flags (</>-Schaltfläche nutzen)
ok, keine Ahnung was "Code_Flags " sind....hab den Code zwischen diesen "Flags" gesetzt, hoffe das stimmt so:
int lautPin = 2;
int frequenz;
void setup() {
Serial.begin(9600);
frequenz = 400;
}
void loop() {
delay(100);
melodie1();
delay(2000);
if (frequenz >= 4000)
{
melodie2();
delay(2000);
}
}
void melodie1()
{
Serial.println("melodie1 Frequenz=");
Serial.println(frequenz);
delay(100);
while (frequenz <= 4000)
{
tone(lautPin, frequenz);
delay(100);
frequenz = frequenz + 100;
}
}
void melodie2()
{
Serial.println("melodie1 Frequenz=");
Serial.println(frequenz);
delay(100);
tone(lautPin, frequenz);
delay(100);
frequenz = frequenz - 100;
}
Katsumoto:
ok, keine Ahnung was "Code_Flags " sind....hab den Code zwischen diesen "Flags" gesetzt, hoffe das stimmt so:
Das verwechselst du wohl mit Cornflakes ?
Die heißen Code-Tags, ein Tag ist sowas wie eine Markierung.
Hast aber alles richtig gemacht. 
Ich sehe keine "while-Schleife" in deiner 2. Funktion.
Ja, ich weis, der Ton steigt an bis 4000 und bleibt auch dort. In der loop startet melodie immer wieder neu. Irgentwie muss ich melodie1 stopen nach einem Durchgang und nachdem melodie2 durch ist, wieder aktivieren.
Hab erst 3mal 1std. Unterricht gehabt , und dann so eine Aufgabe, hab keine Ahnung wie ich das mache, nicht mal auf youtube was gefunden... 
Die zweite zeigt er gar nicht an:
melodie1 Frequenz=
400
melodie1 Frequenz=
4100
melodie1 Frequenz=
4000
melodie1 Frequenz=
4100
melodie1 Frequenz=
4000
melodie1 Frequenz=
4100
melodie1 Frequenz=
4000
melodie1 Frequenz=
4100
melodie1 Frequenz=
4000
melodie1 Frequenz=
4100
melodie1 Frequenz=
4000
Ja, danke, jetzt seh ich melodie2 auch...
melodie1 Frequenz=
400
melodie2 Frequenz=
4100
melodie1 Frequenz=
4000
melodie2 Frequenz=
4100
melodie1 Frequenz=
4000
melodie2 Frequenz=
4100
melodie1 Frequenz=
4000
melodie2 Frequenz=
4100
melodie1 Frequenz=
4000
melodie2 Frequenz=
4100
melodie1 Frequenz=
4000
melodie2 Frequenz=
Theseus:
Beachte meinen Vorschlag oben
Beachte meinen Vorschlag oben
Theseus:
Ergänze etwas wie while(frequenz >= 400) in der zweiten Funktion.
Wenn das noch immer nicht läuft, poste deinen neuen Sketch mit Code-Flags (</>-Schaltfläche nutzen)
Wie oft soll ich denn noch schreiben, dass die zweite while-Schleife fehlt und du bitte while(frequenz >= 400) in der zweiten Funktion ergänzen sollst?
void melodie2()
{ while(frequenz >= 400){
Serial.println("melodie2 Frequenz=");
Serial.println(frequenz);
tone(lautPin, frequenz);
delay(100);
frequenz = frequenz - 100;
}
}
Jetzt gehts! Vielen Dank ! Keine Ahnung was ich vorher falsch gemacht hatte,
Im serial-monitor zeigt er mir nur den absteigenden ton an..warum auch immer, aber egal,vielen dank für die Hilfe
gruß Katsumoto
Jetzt passts auch mit dem serial-monitor, "Serial.println" gehört nach der "while"-Anweisung...
Habt Dank!
... und als Übung - und um Deinen Lehrer zu verblüffen - machen wir Das jetzt ohne while und delay(), statt Dessen mit switch und millis() 
Irgendwie habe ich das Gefühl, daß Dir gar nicht bewusst ist, was Du Da geschrieben hast und was Du eigentlich wolltest - somit wird Dir nun auch noch nicht klar sein, weshalb der Code nun funktioniert.
MfG