Sinus signal mit variable frequenz

@Doc: Volle Zustimmung!
Habe das Drama bis hierhin nur lesend verfolgt und mir einen ähnlichen Kommentar wie Deinen erspart (getippt hatte ich ihn aber schon) .

Möge der/die Studierende nun in die Strümpfe kommen...


Gruß Walter

Hallo,

Danke für deinen Kommentar. Manchmal denkt man ja man wäre zu streng oder setzt zu viel voraus oder so. Ich liege demnach zumindestens nicht ganz falsch mit meiner Meinung. Manchmal sollen klare Meinungsäußerungen schon geholfen haben. :wink:

Ja, die ursprüngliche Bedeutung des studere = sich bemühen geht immer mehr verloren und wird ersetzt durch "Macht mal meine Arbeit, aber flott und enthaltet Euch jeglicher Kritik an mir"

Gruß Tommy

@Deltaflyer hat das ja vor 3 Wochen sehr passend zusammengefasst: Team
:slight_smile:

Hallo! ich wollte dich auf dem laufenden halten..
Ich versuche das gerade zu setzen. Ich habe eine for schleife gemacht , die läuft von 45 bis 55. (erstmal Inkrementieren)
Nun habe ich das Problem dass man Phasendelta nicht als Funktion aufrufen kann.
Ich wird jetzt versuchen ein Funktion daraus zu machen.

Hallo,

okay, der erste Schritt ...
Nur um das Phasendelta etc. brauchst du dich und sollst du dich überhaupt nicht kümmern. Deine aktuelle Aufgabe war und ist den Frequenzwert zwischen 45 und 55 pendeln zu lassen. Und nur diesen. Konzentriere dich auf die Aufgabe. Ich habe die Aufgabe bewusst klein gehalten. Überprüfe am Ende deinen Code mittels serieller Ausgabe.

Falls das Forum irgendwann deinen Code testen möchte oder soll, dann keine Bilder zeigen.

Weitermachen und am Ball bleiben ...

alles klar danke.

void loop(){
for( FREQUENCY=45 ; FREQUENCY<= 55 ; FREQUENCY++){
if (FREQUENCY <= 55){
for ( FREQUENCY = 55; FREQUENCY <= 45 ; FREQUENCY--){
}
}
delay (2000);
}
}

stimmt das so ?

Lass Dir doch einfach mal den Wert von FREQUENCY auf dem seriellen Monitor ausgeben, dann msiehst Du genau, was Dein Sketch macht.

Gruß Tommy

dafür muss mein code fehlerfrei sein. und so lange ich die Funktion nicht in meiner for schleife aufrufen kann, wird nicht der fall sein.
oder gibt es einen weg wo man nur die Frequenz bzw einen bestimmten wert überprüfen kann?

Hallo,

was hindert dich daran den Wert von FREQUENCY serial auszugeben?
Bau dir in die for Schleife eine serielle Ausgabe rein.
Und warum verwendest du keine Codetags für den Code?

Poste deinen Code bitte in Code-Tags. Es wird sich hier niemand die Mühe machen, deinen Code aus irgendwelchen Screenshots abzutippen. Auch unformatierten Code ohne Einrückungen zu lesen ist ausgesprochen lästig.

Falls du mit Funktion "PHASENDELTA" meinst, das ist keine Funktion, sondern ein vorzeichenloser Integer mit 16 Bit - als solchen hast du ihn zumindest deklariert. Deshalb kannst du ihn auch nicht als Funktion aufrufen.

Der Code ordentlich formatiert und in Code-Tags und mit Ausgaben für den seriellen Monitor verziert:

uint16_t FREQUENCY;

void setup()
{
  Serial.begin(115200);
  Serial.println(__FILE__);
}

void loop()
{
  for ( FREQUENCY = 45 ; FREQUENCY <= 55 ; FREQUENCY++)
  {
    if (FREQUENCY <= 55)
    {
      for ( FREQUENCY = 55; FREQUENCY <= 45 ; FREQUENCY--)
      {
        Serial.print(F("Frequency: "));
        Serial.println(FREQUENCY);
      }
    }
    delay (2000);
  }
}

Ausgabe des seriellen Monitors:

C:\Users\wno\Documents\Arduino\forum\sketch_oct20a\sketch_oct20a\sketch_oct20a.ino

Sieht nicht so aus.

Ein paar Minuten später... ich habe Code, der das tut was wir erwarten. Der bleibt aufgrund meiner sadistischen Ader vorerst geheim.

Hier die Ausgabe des Monitors:

C:\Users\wno\Documents\Arduino\forum\sketch_oct20a\sketch_oct20b\sketch_oct20b.ino
Frequency: 45
Frequency: 46
Frequency: 47
Frequency: 48
Frequency: 49
Frequency: 50
Frequency: 51
Frequency: 52
Frequency: 53
Frequency: 54
Frequency: 55
Frequency: 54
Frequency: 53
Frequency: 52
Frequency: 51
Frequency: 50
Frequency: 49
Frequency: 48
Frequency: 47
Frequency: 46
Frequency: 45
Frequency: 46
Frequency: 47

Streng DIch an - wenn Du Dein Studium jemals erfolgreich abschließen willst, musst Du Dich jetzt wenigstens einmal durchbeißen.

Wenn Du das nicht mit dem seriellen Monitor machen willst:
Geh Deinen Code Zeile für Zeile durch, schreibe Dir für jede einzelne Zeile auf ein Blatt Papier welchen Wert Deine einzige Variable FREQUENCY hat und ob Bedingungen zutreffen oder nicht.

Wieso? Gerade die seriellen Ausgaben helfen Dir, logische Fehler zu finden.

Gruß Tommy

Hallo,

vielleicht hilft es dem TO das auf die Sprünge.
Danach wie schon wno158 schreibt Zeile für Zeile durchgehen warum das so ist wie es ist.

uint16_t FREQUENCY;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  for (FREQUENCY = 45 ; FREQUENCY <= 55 ; FREQUENCY++)
  {
    Serial.print(F("Frequency++: "));
    Serial.println(FREQUENCY);
    
    if (FREQUENCY <= 55)
    {
      for (FREQUENCY = 55; FREQUENCY <= 45 ; FREQUENCY--)
      {
        Serial.print(F("Frequency--: "));
        Serial.println(FREQUENCY);
      }
    }
    
    delay (2000);
  }
}

Lese nochmal im Buch nach was im Schleifenkopf alles passiert ... bzw. gehe nochmal einen Schritt zurück. Nimm den if Block raus und schaue was passiert. Überlege warum das so ist wie es ist.

Auch wenn dir hier gezeigt wird, dass du das nicht brauchst...
Ich fände es schon gut, wenn du lernst, wie du eine Funktion schreiben kannst, die du dann auch aufrufen kannst.

Allerdings frage ich mich, was diese Funktion PHASENDELTA() machen soll, und ob sie einen Wert zurückliefern soll.

Nachtrag
Doc's Beispiel finde ich übrigens merkwürdig:

  • if (FREQUENCY <= 55) ist meiner Ansicht nach immer erfüllt.
  • In einer Schleife die Laufvariable zu verändern, und dann noch innerhalb einer inneren Schleife, bei der es darauf ankommt, welchen Wert diese Variable am Ende der inneren Schleife hat: Kann man machen, aber wenn ich es nicht auf Anhieb verstehe, ist es Mist :stuck_out_tongue:

Was mich am meisten in Foren nervt ist, wenn Leute immer nur die letzte Antwort lesen und sich dann alles darauf bezieht ohne das sie den Thread gelesen haben.

DAS IST NICHT MEIN BEISPIEL!!!

Ich habe nur im Bsp. des TO's eine serielle Ausgabe ergänzt. Damit er überhaupt etwas sieht und sich wundern kann warum das so ist. Der TO muss nun das Problem verstehen und sein Programm ändern.

Hallo,

so kurz wie du habe ich es nicht. Soviel dazu. Aber du hast jetzt leider vorgegriffen und meine Bemühungen zu Nichte gemacht. Danke. Jetzt kannst du auch den Rest zusammensetzen. Der TO hat sein Ziel erreicht.

Uii - so war das natürlich nicht gedacht; dann nehme ich es mal wieder weg.
Allerdings habe ich wenig Hoffnung, dass das hier jemals etwas wird.

Das bringt nix, das ist alles noch zu lesen.

Gruß Tommy