agmue:
In #15 habe ich einen Fehler bereinigt: analogRead() ein paar Zeilen runter, denn man muß das nur tun, wenn die Zeit abgelaufen ist.
Na gut, das mit den doppelten Grenzen habe ich nicht gelöst bekommen, aber etwas struct geht schon:
const int AOUTpin = 0; //Der AOUT-Pin des Alkoholsensors geht in den analogen Pin A0 des Arduino über
const byte noteOn = 144;
uint32_t jetzt;
// MIDI-Nachricht senden
void MIDImessage (byte command, byte data1, byte data2) {
Serial.write(command);
Serial.write(data1);
Serial.write(data2);
}
struct Grenzen
{
const uint16_t Min, Max;
const uint32_t pausen;
const byte message;
Grenzen(const uint16_t Min, const uint16_t Max, const uint32_t pausen, const byte message)
: Min(Min), Max(Max), pausen(pausen), message(message) {}
void ausgabe(uint16_t wert, byte &m, uint32_t &p)
{
if (wert >= Min && wert < Max)
{
if (m != message)
{
m = message;
MIDImessage(noteOn, message, 127);
p = pausen;
}
}
}
};
Grenzen grenzen[]
{
//min, max, pause, message
{0, 200, 1800, 60},
{200, 280, 1000, 61},
{280, 350, 1000, 62},
{450, 1024, 1000, 64},
{350, 450, 1000, 63},
};
void setup() {
Serial.begin(9600);
pinMode (LED_BUILTIN, OUTPUT);
}
void loop()
{
jetzt = millis();
testeBereich();
herzschlag();
}
void testeBereich() {
static uint32_t vorhin = 0;
static uint32_t pause;
static byte me;
if (jetzt - vorhin >= pause)
{
vorhin = jetzt;
uint16_t wert = analogRead(AOUTpin); //Liest den analaog-Wert vom AOUT-Pin des Alkoholsensors
for (Grenzen g : grenzen) g.ausgabe(wert, me, pause);
}
}
void herzschlag()
{
static uint32_t vorhin;
if (jetzt - vorhin >= 500)
{
vorhin = jetzt;
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
}
Zufrieden?
hei danke viel mals für s weiter tüfteln, kapier es noch nicht, werde es aber ausprobieren und herausfinden. Ich brauche esmanchmal visuelle sachen um es zu kapieren.