Syntax-Frage: while(true) am Ende von if-Statement

Hallo :slight_smile:

Ich habe eine kurze Frage zu einer bestimmten Syntax beim Programmieren. Ich habe dieses einfache Programm, bei dem mit dem DFPlayer Mini je nachdem, welcher kapazitive Sensor berührt wurde, eine andere .mp3-Datei wiedergegeben wird:

#include <CapacitiveSensor.h>
#include "Arduino.h" // Audio
#include "SoftwareSerial.h" // Audio
#include "DFRobotDFPlayerMini.h" // Audio

CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);
CapacitiveSensor cs_4_6 = CapacitiveSensor(4,6);
SoftwareSerial mySoftwareSerial(11, 12);
DFRobotDFPlayerMini myDFPlayer;

void setup() {
  Serial.begin(9600);
  mySoftwareSerial.begin(9600);
  cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
  cs_4_6.set_CS_AutocaL_Millis(0xFFFFFFFF);

  if (!myDFPlayer.begin(mySoftwareSerial)) {
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  
  myDFPlayer.volume(30);
}

void loop() {
  long total1 = cs_4_2.capacitiveSensor(30);
  long total2 = cs_4_6.capacitiveSensor(30);
  if(total1 > 1000) {
    myDFPlayer.playMp3Folder(1);
  }
  if(total2 > 1000) {
    myDFPlayer.playMp3Folder(2);
  }
}

Konkret geht es um diesen Teil, der aus dem Demo-Code für den Player stammt:

if (!myDFPlayer.begin(mySoftwareSerial)) {
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
}

Wenn ich diesen Teil weglasse, funktioniert das Programm nicht mehr. Was auch funktioniert, ist, wenn ich einfach nur “myDFPlayer.begin(mySoftwareSerial);” schreibe.

Was ich nicht ganz verstehe, ist die Syntax von diesem “if”-Statement. Was macht z. B. das “while(true)” am Ende davon? Bedeutet das, dass das “if”-Statement so lange ausgeführt wird, bis der Befehl “myDFPlayer.begin(mySoftwareSerial);” korrekt ausgeführt werden kann?

Danke schon mal im voraus und liebe Grüße

while(true); // Endlosschleife

(mit leerem Anweisungsblock mittlerweile verboten(?))

Sorry, ich weiß nicht genau, was du meinst. Ich weiß, dass while(true); normalerweise eine Endlosschleife ist, ich verstehe aber irgendwie nicht genau, wie in dem Fall die if-Schleife abläuft. Das Programm funktioniert auf jeden Fall.

Alternative ist, einfach die if-Schleife wegzulassen und nur "myDFPlayer.begin(mySoftwareSerial);" zu schreiben. Das funktioniert auch.

Apollo_M:
Wenn ich diesen Teil weglasse, funktioniert das Programm nicht mehr. Was auch funktioniert, ist, wenn ich einfach nur "myDFPlayer.begin(mySoftwareSerial);" schreibe.

Was ich nicht ganz verstehe, ist die Syntax von diesem "if"-Statement. Was macht z. B. das "while(true)" am Ende davon? Bedeutet das, dass das "if"-Statement so lange ausgeführt wird, bis der Befehl "myDFPlayer.begin(mySoftwareSerial);" korrekt ausgeführt werden kann?

„Ordentlich“ sollte man IMO programmieren:

bool blablubb=myDFPlayer.begin(mySoftwareSerial);
if(blablubb==false)
{
  // Meldung ausgeben, Programm stoppen
}

Der Punkt ist, dass die begin()-Methode auf jeden Fall ausgeführt werden muss, damit myDFPlayer „funktioniert“. Die Rückgabe dieser Methode ist entweder wahr oder falsch. Wenn begin() also nicht funktioniert wird das Programm gestoppt, das while() ist eine Endlosschleife.

Gruß

Gregor

Es gibt keine if-Schleife.
Wenn der DF-Player nicht initialisiert werden kann, kommt die Meldung und dann läuft nur noch die leere Endlosschleife.

@combie: Mein Compiler frisst while(true); noch.

Gruß Tommy

gregorss:
„Ordentlich“ sollte man IMO programmieren:

bool blablubb=myDFPlayer.begin(mySoftwareSerial);

if(blablubb==false)
{
  // Meldung ausgeben, Programm stoppen
}

Was soll daran ordentlich(er) sein?

Gruß Tommy

Ich weiß, dass while(true); normalerweise eine Endlosschleife ist, ich verstehe aber irgendwie nicht genau, wie in dem Fall die if-Schleife abläuft.

if-Schleife

Wenn du weißt, dass das while(true); eine Endlosschleife ist, dann bitte ich dich dir das zu glauben.
Denn es ist so.
Das Leben des Programms endet an der Stelle.

@combie: Mein Compiler frisst while(true); noch.

Meiner auch.

Tommy56:
Was soll daran ordentlich sein?

Es ist verständlicher.

Gruß

Gregor

Ahhh, danke euch vielmals. Jetzt hab ich's verstanden :slight_smile: