// Konstanten
const int MAX_TAGE = 21;
const float WOCHENARBEITSZEIT = 37.0;
const float TAGESARBEITSZEIT = 7.4;
const float MAX_TAGESARBEITSZEIT = 10.0;
const float UEBERSTUNDEN_25 = 1.25;
const float UEBERSTUNDEN_50 = 1.50;
const float STUNDENLOHN = 20.0;
// Variablen
float arbeitsstunden[MAX_TAGE];
float gesamtArbeitszeit = 0.0;
float gesamtUeberstunden25 = 0.0;
float gesamtUeberstunden50 = 0.0;
float normallohn = 0.0;
float zuschlag25 = 0.0;
float zuschlag50 = 0.0;
float gesamtsumme = 0.0;
void setup() {
Serial.begin(9600);
Serial.println("Arbeitszeit Berechnung gestartet");
}
void loop() {
for (int i = 0; i < MAX_TAGE; i++) {
arbeitsstunden[i] = frageArbeitsstunden(i);
berechneZeiten(arbeitsstunden[i]);
ausgabeTagErgebnisse(i);
}
ausgabeGesamtErgebnisse();
reset();
}
float frageArbeitsstunden(int tag) {
Serial.print("Geben Sie die Arbeitsstunden für Tag ");
Serial.print(tag + 1);
Serial.println(" ein:");
while (!Serial.available()) {} // Warten auf Eingabe
float stunden = Serial.parseFloat();
while (Serial.available()) { // Restliche Eingaben löschen
Serial.read();
}
Serial.print("Eingegebene Stunden: ");
Serial.println(stunden);
return stunden;
}
void berechneZeiten(float stunden) {
if (stunden > MAX_TAGESARBEITSZEIT) {
stunden = MAX_TAGESARBEITSZEIT;
}
gesamtArbeitszeit += stunden;
if (stunden > TAGESARBEITSZEIT) {
float ueberstunden = stunden - TAGESARBEITSZEIT;
if (ueberstunden <= 2) {
gesamtUeberstunden25 += ueberstunden;
} else {
gesamtUeberstunden25 += 2;
gesamtUeberstunden50 += (ueberstunden - 2);
}
}
normallohn += min(stunden, TAGESARBEITSZEIT) * STUNDENLOHN;
zuschlag25 += gesamtUeberstunden25 * STUNDENLOHN * 0.25;
zuschlag50 += gesamtUeberstunden50 * STUNDENLOHN * 0.50;
gesamtsumme = normallohn + zuschlag25 + zuschlag50;
}
void ausgabeTagErgebnisse(int tag) {
Serial.println();
Serial.print("Tag ");
Serial.print(tag + 1);
Serial.println(":");
Serial.print("Arbeitsstunden: ");
Serial.println(arbeitsstunden[tag]);
Serial.print("Überstunden 25%: ");
Serial.println(gesamtUeberstunden25);
Serial.print("Überstunden 50%: ");
Serial.println(gesamtUeberstunden50);
Serial.print("Normallohn: ");
Serial.println(normallohn);
Serial.print("Zuschlag 25%: ");
Serial.println(zuschlag25);
Serial.print("Zuschlag 50%: ");
Serial.println(zuschlag50);
Serial.print("Gesamtsumme: ");
Serial.println(gesamtsumme);
Serial.println();
}
void ausgabeGesamtErgebnisse() {
Serial.println();
Serial.println("Gesamtergebnisse:");
Serial.print("Gesamt Arbeitszeit: ");
Serial.println(gesamtArbeitszeit);
Serial.print("Gesamt Überstunden 25%: ");
Serial.println(gesamtUeberstunden25);
Serial.print("Gesamt Überstunden 50%: ");
Serial.println(gesamtUeberstunden50);
Serial.print("Normallohn: ");
Serial.println(normallohn);
Serial.print("Zuschlag 25%: ");
Serial.println(zuschlag25);
Serial.print("Zuschlag 50%: ");
Serial.println(zuschlag50);
Serial.print("Gesamtsumme: ");
Serial.println(gesamtsumme);
Serial.println();
}
void reset() {
gesamtArbeitszeit = 0.0;
gesamtUeberstunden25 = 0.0;
gesamtUeberstunden50 = 0.0;
normallohn = 0.0;
zuschlag25 = 0.0;
zuschlag50 = 0.0;
gesamtsumme = 0.0;
Serial.println("Möchten Sie eine weitere Berechnung durchführen? (J/N)");
while (true) {
while (!Serial.available()) {} // Warten auf Eingabe
char antwort = Serial.read();
if (antwort == 'J' || antwort == 'j') {
break;
} else if (antwort == 'N' || antwort == 'n') {
Serial.println("Programm beendet.");
while (true); // Endlosschleife, um das Programm zu stoppen
}
}
}