volatile unsigned long idleTime = 0;
unsigned long totalTime = 0;
unsigned long lastMillis = 0;
void setup() {
Serial.begin(9600);
lastMillis = millis();
}
// Mathematische Berechnungen
void busyWork_A() {
for (volatile int i = 0; i < 10000; i++) {
float temp = sin(i) * cos(i); // Rechenintensive Operation
}
}
// Lange Schleifen
void busyWork_B() {
for (volatile long i = 0; i < 1000000; i++) {
// Leere Schleife, reine CPU-Belastung
}
}
// Datenmanipulation
void busyWork_C() {
const int size = 256;
byte buffer[size];
for (int i = 0; i < size; i++) {
buffer[i] = i % 256;
}
for (int i = 0; i < size; i++) {
buffer[i] = buffer[size - i - 1];
}
}
void loop() {
// CPU-Belastung durch rechenintensive Aufgaben
busyWork_A();
busyWork_B();
busyWork_C();
// Leerlauf-Zeit messen
unsigned long startIdle = micros();
while (micros() - startIdle < 100) {
idleTime++;
}
// Totalzeit berechnen
unsigned long currentMillis = millis();
totalTime += currentMillis - lastMillis;
lastMillis = currentMillis;
// CPU-Auslastung berechnen
if (totalTime >= 1000) { // Berechnung alle 1 Sekunde
float cpuUsage = (1.0 - (float(idleTime) / (totalTime * 1000.0))) * 100.0;
Serial.print("CPU Usage: ");
Serial.print(cpuUsage);
Serial.println("%");
// Werte zurücksetzen
idleTime = 0;
totalTime = 0;
}
// Dein eigentlicher Code hier:
delay(50); // Beispielarbeitslast
}