#include <stdarg.h>
//
// Definition Textkonstanten
//
const char txt00[] = " ";
const char txt01[] = ",";
const char txt02[] = "ab";
const char txt03[] = "auf";
const char txt04[] = "gerundet";
const char txt05[] = "minus";
const char txt06[] = "Max";
const char txt07[] = "Min";
const char txt08[] = "negativ";
const char txt09[] = "plus";
const char txt10[] = "positiv";
const char txt11[] = "Abstand";
const char txt12[] = "Anzahl";
const char txt13[] = "Fehler";
const char txt14[] = "Korrektur";
const char txt15[] = "Regel";
const char txt16[] = "Step";
const char txt17[] = "Zahl";
const char txt18[] = "Zahn";
//
// Zeigerarray auf die Textkonstanten
//
const char* const pTxt[] = {txt00,txt01,txt02,txt03,txt04,txt05,txt06,txt07,txt08,txt09,txt10,txt11,txt12,
txt13,txt14,txt15,txt16,txt17,txt18};
//
// Anonymes enum für die INDEX Bezeichner zur besseren Lesbarkeit des
// Programmcodes
//
enum {SPACE,KOMMA,AB,AUF,GERUNDET,MINUS,MAX,MIN,NEGATIV,PLUS,POSITIV,ABSTAND,ANZAHL,FEHLER,
KORREKTUR,REGEL,STEP,ZAHL,ZAHN};
//
// Forwarddeklaration für die Funktion zur seriellen Ausgabe
// Diese Funktion hat eine variabe Parameterliste
//
void serialPrint(const char*, ...);
//
// Hauptprogramm: Ausgabe der Textkombinationen
//
void setup() {
Serial.begin(115200);
unsigned int zahn = 140;
float wert = 7.2345;
serialPrint("%c%c\n", pTxt[AB], pTxt[GERUNDET]);
serialPrint("%c%c\n", pTxt[AUF], pTxt[GERUNDET]);
serialPrint(" %c%c\n", pTxt[KORREKTUR], pTxt[ZAHN]);
serialPrint(" %c%c %c\n",pTxt[KORREKTUR], pTxt[ZAHN], pTxt[POSITIV]);
serialPrint(" %c%c %c\n", pTxt[KORREKTUR], pTxt[ZAHN], pTxt[NEGATIV]);
serialPrint(" %c%c\n" , pTxt[REGEL], pTxt[ZAHN]);
serialPrint(" %c%c%c\n" , pTxt[KORREKTUR], pTxt[ZAHN], pTxt[ABSTAND]);
serialPrint(" %c%c%c\n", pTxt[REGEL], pTxt[ZAHN], pTxt[ABSTAND]);
serialPrint("%c berechnet\n", pTxt[ABSTAND]);
serialPrint("nur gleicher %c\n", pTxt[ABSTAND]);
serialPrint("%c%c\n", pTxt[ABSTAND], pTxt[MAX]);
serialPrint("%c%c\n", pTxt[ABSTAND], pTxt[MIN]);
serialPrint("%c %c\n", pTxt[ABSTAND], pTxt[PLUS]);
serialPrint("%c %c\n",pTxt[ABSTAND], pTxt[MINUS]);
serialPrint("%c%c\n", pTxt[ABSTAND], pTxt[FEHLER]);
serialPrint("%c%c soll\n", pTxt[STEP], pTxt[ZAHL]);
serialPrint("%c%c ist\n", pTxt[STEP], pTxt[ZAHL]);
serialPrint("%cs zu viel\n", pTxt[STEP]);
serialPrint("%cs zu wenig\n", pTxt[STEP]);
serialPrint("%c%cs: %d\n", pTxt[ZAHN], pTxt[STEP],25001);
serialPrint("%c%c-Nr.: %d\n", pTxt[ZAHN], pTxt[STEP], zahn);
serialPrint("Ein Bruch: %f%% wird hier angezeigt.\n", wert);
}
void loop() {
// put your main code here, to run repeatedly:
}
//
// Ausgabe von Strings, Integer (Ganzzahlen) oder Double/Float (Fließkommazahlen),
// die in der variablen Parameterliste übergeben werden.
// %c ist das Formatzeichen für Strings,
// %d für Integer (Ganzzahlen)
// %f für Fließkommazahlen.
// Das Steuerzeichen "\n" erzeugt einen Zeilenumbruch bei der Ausgabe.
//
void serialPrint(const char* fString, ...) {
va_list pArgListe;
int intVal;
double dblVal;
char* pText;
va_start(pArgListe, fString);
while(*fString) {
if (*fString != '%') {
Serial.print(*fString);
} else {
switch(*(++fString)) {
case 'c': pText = va_arg(pArgListe, char*);
Serial.print(pText);
break;
case 'd': intVal = va_arg(pArgListe, int);
Serial.print(intVal);
break;
case 'f': dblVal = va_arg(pArgListe, double);
Serial.print(dblVal);
break;
default:
Serial.print(*fString);
break;
}
}
fString++;
}
va_end(pArgListe);
}