guten Tag Gemeinde nach längerer suche ohne Erfolg.
Frage Ich hier.
Ich bekomme ein Bool 0 oder eins von einer Funktion
und möchte Serial "ein" oder "aus" ausgeben.
mit der if funktion kein problem
Jedoch sind es fast 40 Einträge mit jeweils if elses wird das echt lang
geht das auch einfacher das ich im serielen print 0 71 durch Ein Aus ersetzen kann .
result = 0;
result = wpBergfeld.readCoils(22, 1);
if (result == wpBergfeld.ku8MBSuccess) {
Serial.print("Tank Heizung Status: ");
bool weather_Depend = wpBergfeld.getResponseBuffer(0);
if (weather_Depend) {
Serial.println("Eingeschaltet");
} else {
Serial.println("Ausgeschaltet");
}
} else {
Serial.print("Error Reading Bit 22");
Serial.println(result);
kann ich #define 0 ="Aus"; #define 1 ="Ein";
Serial.print("Tank Heizung Status: ");
Serial.println(weather_Depend);
so dass das bool eine string ausgibt !
oder brauch ich da eine funktion die mir Ein aus zurückgibt ?
#define ist häßlich, und wurde in C gebraucht, als es noch kein C++ gab.
Aber du könntest es auch mit #define einigermaßen realisieren:
#define A "Aus"
#define E "Ein"
#define EA(x) x?(E):(A)
void setup() {
bool weather_Depend = true;
Serial.begin(9600);
Serial.println(EA(weather_Depend));
}
In C++ wurde der Hinweis inline erfunden, um dem Compiler den Tip zu geben, dass es zwar wie eine Funktion aussieht, es aber evtl. besser ist, das ohne Funktionsaufruf zu realisieren.
Mit dem #define sieht es übrigens auch wie eine Funktion aus.
wie es die gezeigten Vorschläge schon gezeigt haben, solltest du auf kleinen AVR Microcontrollern für die Serielle Ausgabe von Fixtexten das F-Makro verwenden.
Serial.print(F("Error Reading Bit 22"));
abgesehen davon, dass es sehr wahrscheinlich nicht Bit 22 ist, sondern die Adresse/Register.
wenn du dir das Ergebnis in HEX ausgibst, dann hast du genau den Fehler in der Darstellung, wie es auch in der ModbusMaster lLibrary definiert ist, und z.B. echte massive Fehler scheinen dann als E0, E1, E2 auf ...