13.01.2020, 21:37
Das mache ich ja so aber der sensor wackelt ergo habe ich alle Interval zeit einen INT High.
Jetzt ist es so, zu mindestens beim Lichtsensor, das eine Wert Änderung um 1 für den Mensch keine wahrnehmbare Veränderung ist.
Das zum Beispiel auch so Scheint die Sonne ins Zimmer ist die werte Änderung nicht so stark wie wenn man eine Lampe auf den Sensor hält.
So ist es zur Zeit
Jetzt könnte ich auch:
if(ABS(adValue - lastAD[adress]) > mininmal Change )
schreiben dann würde ich das nur mit bekomme wenn der AD sich um X (Minimal Change Ändert)
Oder könnte man auch versuchen:
word roundValue = (adValue + lastAD[adress]) / 2;
if(roundValue != lastAD[adress])
Oder sagen wir mal 5 letzte Messwerte Speichern daraus den Mittelwert bilden und den dann mit dem Letzten mittelwert vergleich und dann Melden.
Das aber ganz schön Komplexe zu lesen später im code. Auch kommen dann so sachen hin zu das erst die 5 Messung saubere werte liefert.
Das dann doof wenn man ad dynamsch ein und aus schaltet.
Mal noch ein bisschen drauf rum denken.
Jetzt ist es so, zu mindestens beim Lichtsensor, das eine Wert Änderung um 1 für den Mensch keine wahrnehmbare Veränderung ist.
Das zum Beispiel auch so Scheint die Sonne ins Zimmer ist die werte Änderung nicht so stark wie wenn man eine Lampe auf den Sensor hält.
So ist es zur Zeit
Code:
bool readAd(byte adress) {
bool valueChanged = false;
if(bitRead(configuration.enableAD, adress) == 1) {
word adValue = 0x00;
//AD4 und AD5 Belegt durch I²C
switch(adress) {
case 0x00:
adValue = analogRead(A0);
break;
case 0x01:
adValue = analogRead(A1);
break;
case 0x02:
adValue = analogRead(A2);
break;
case 0x03:
adValue = analogRead(A3);
break;
case 0x04:
adValue = analogRead(A6);
break;
case 0x05:
adValue = analogRead(A7);
break;
}
if(adValue != lastAD[adress]) {
lastAD[adress] = adValue;
valueChanged = true;
DebugPrinter.print(F("AD"));
DebugPrinter.print(adress, HEX);
DebugPrinter.print(F(" has Value: "));
DebugPrinter.print(lastAD[adress], HEX);
DebugPrinter.println();
}
}
}
Jetzt könnte ich auch:
if(ABS(adValue - lastAD[adress]) > mininmal Change )
schreiben dann würde ich das nur mit bekomme wenn der AD sich um X (Minimal Change Ändert)
Oder könnte man auch versuchen:
word roundValue = (adValue + lastAD[adress]) / 2;
if(roundValue != lastAD[adress])
Oder sagen wir mal 5 letzte Messwerte Speichern daraus den Mittelwert bilden und den dann mit dem Letzten mittelwert vergleich und dann Melden.
Das aber ganz schön Komplexe zu lesen später im code. Auch kommen dann so sachen hin zu das erst die 5 Messung saubere werte liefert.
Das dann doof wenn man ad dynamsch ein und aus schaltet.
Mal noch ein bisschen drauf rum denken.