#include <TinyDebug.h>
double dBV;
const float referenceVoltage = 5.0; // Annahme einer Referenzspannung von 5 Volt
int analogValue;
float thresholds[] = {-25, -20, -15, -12, -9, -6, -3, 0, 3, 6, 12};
byte LEDS[][2] = {
{PB0, PB3}, // 1 ROW 1 LEFT -25dBV
{PB0, PB2}, // 2 ROW 1 CENTER -20dBV
{PB0, PB1}, // 3 ROW 1 RIGHT -15dBV
{PB1, PB3}, // 4 ROW 2 LEFT -12dBV
{PB1, PB2}, // 5 ROW 2 CENTER - 9dBV
{PB1, PB0}, // 6 ROW 2 RIGHT - 6dBV
{PB2, PB3}, // 7 ROW 3 LEFT - 3dBV
{PB2, PB1}, // 8 ROW 3 CENTER 0dBV
{PB2, PB0}, // 9 ROW 3 RIGHT + 3dBV
{PB3, PB2}, // 10 ROW 4 LEFT + 6dBV
{PB3, PB1}, // 11 ROW 4 CENTER + 9dBV
{PB3, PB0}, // 12 ROW 4 RIGHT +12dBV
};
void bar(int index) {
for (int i = 0; i < index; i++) {
pinMode(PB0, INPUT);
pinMode(PB1, INPUT);
pinMode(PB2, INPUT);
pinMode(PB3, INPUT);
pinMode(LEDS[i][0], OUTPUT);
pinMode(LEDS[i][1], OUTPUT);
digitalWrite(LEDS[i][0], LOW);
digitalWrite(LEDS[i][1], HIGH);
}
}
void dot(int index) {
pinMode(PB0, INPUT);
pinMode(PB1, INPUT);
pinMode(PB2, INPUT);
pinMode(PB3, INPUT);
pinMode(LEDS[index - 1][0], OUTPUT);
pinMode(LEDS[index - 1][1], OUTPUT);
digitalWrite(LEDS[index - 1][0], LOW);
digitalWrite(LEDS[index - 1][1], HIGH);
}
void setup() {
Debug.begin();
Debug.println(F("Hello, TinyDebug!"));
pinMode(2, INPUT);
}
void loop() {
// Analogwert lesen (0 bis 1023)
analogValue = analogRead(2);
// Analogwert in Spannung umrechnen
float voltage = (analogValue / 1023.0) * referenceVoltage;
// Spannung in dBV umrechnen
float dBV = 20.0 * log10(voltage);
// Ausgabe des Ergebnisses
Debug.print("Analogwert: ");
Debug.print(analogValue);
Debug.println("");
Debug.print("Spannung in Volt: ");
Debug.print(voltage); // 4 Dezimalstellen für Genauigkeit
Debug.println("");
Debug.print("Dezibel in dBV: ");
Debug.print(dBV); // 4 Dezimalstellen für Genauigkeit
Debug.println("");
Debug.println("");
for (int i = 0; i < 12; i++) {
if (dBV <= thresholds[i]) {
dot(i+1);
break;
}
}
delay(500); // Kurze Verzögerung für die Lesbarkeit der Ausgabe
}