#define MAX 9
#define LINKS 3
#define RECHTS 2
#define POTI A0
#define PRELLEN 30
//Daten
int led[]={13,12,11,10,9,8,7,6};
int buffer[MAX];
int aktuell = 0;
//Button
long zeit = 0;
int flanke = 0;
void setup() {
for (int a = 0; a < MAX; a++)
{
pinMode(led[a], OUTPUT);
digitalWrite(led[a], HIGH);
}
pinMode(LINKS, INPUT);
pinMode(RECHTS, INPUT);
Serial.begin(115200);
Serial.println("Messverwaltung: ");
}
void verarbeitetLINKS()
{
if (millis() - zeit > PRELLEN)
{
if (!digitalRead(LINKS))
{
Serial.println("!digitaLRead");
if (!flanke)
{
aktionLINKS();
flanke = 1;
}
zeit = millis();
}
else
{
if (flanke)
{
flanke = 0;
zeit = millis();
}
}
}
}
void verarbeitetRECHTS()
{
if (millis() - zeit > PRELLEN)
{
if (!digitalRead(RECHTS))
{
if (!flanke)
{
aktionRECHTS();
flanke = 1;
}
zeit = millis();
}
else
{
if (flanke)
{
flanke = 0;
zeit = millis();
}
}
}
}
void aktionLINKS()
{
int wert = analogRead(POTI);
buffer[aktuell] = wert;
Serial.print(aktuell);
Serial.print(". Messung: ");
Serial.println(wert);
aktuell++;
if (aktuell >= MAX)
aktuell = 0;
for (int a = 0; a < aktuell; a++)
digitalWrite(led[a], LOW);
for (int a = aktuell; a < MAX; a++)
digitalWrite(led[a], HIGH);
}
void aktionRECHTS()
{
float summe = 0;
for (int a = 0; a < aktuell; a++)
summe += buffer[a];
Serial.print("Mittelwert: ");
Serial.println(summe/aktuell);
}
void loop(){
verarbeitetLINKS();
verarbeitetRECHTS();
}
// Messsung
// - Buffer (zwischenspeicher) für 8 Messung
// - Bufferlänge (Anzahl der Messungen) an LEDs anzeigen
// - Messung mit linkem Taster auslösen am seriellen Monitor ausgeben
// - Mittelwert mit rechtem Taster am seriellen Monitor ausgeben
// - Nach Messung startet die Speicherung neu
// - Gemessen wird das linke Poti (A0)
// - Tastendruck durch Flankensteuerung