Durchschnittsberechnung average

Hallo ich hab diesen Programmteil rauskopiert.

Ich finde eine Durchschnittsberechnung interessant. Kann jemand diesen code erläutern?

Speziell diese zwei Zeilen:

val = constrain(val, 1, senseLimit);  // turn any reading higher than the senseLimit value into the senseLimit value
   
val = map(val, 1, senseLimit, 1, 1023);  // remap the constrained value within a 1 to 1023 range

Der ganze sketch:

#define NUMREADINGS 15 // raise this number to increase data smoothing

int senseLimit = 15; // raise this number to decrease sensitivity (up to 1023 max)
int probePin = 5; // analog 5
int val = 0; // reading from probePin

// variables for smoothing

int readings[NUMREADINGS];                // the readings from the analog input
int index = 0;                            // the index of the current reading
int total = 0;                            // the running total
int average = 0;                          // final average of the probe reading

//CHANGE THIS TO affect the speed of the updates for numbers. Lower the number the faster it updates.
int updateTime = 40;

void setup() {

 Serial.begin(9600);  // initiate serial connection for debugging/etc

 for (int i = 0; i < NUMREADINGS; i++)
   readings[i] = 0;                      // initialize all the readings to 0

}

void loop() {
 val = analogRead(probePin);  // take a reading from the probe

 if(val >= 1){                // if the reading isn't zero, proceed
   val = constrain(val, 1, senseLimit);  // turn any reading higher than the senseLimit value into the senseLimit value
   val = map(val, 1, senseLimit, 1, 1023);  // remap the constrained value within a 1 to 1023 range

   total -= readings[index];               // subtract the last reading
   readings[index] = val; // read from the sensor
   total += readings[index];               // add the reading to the total
   index = (index + 1);                    // advance to the next index

   if (index >= NUMREADINGS)               // if we're at the end of the array...
     index = 0;                            // ...wrap around to the beginning

   average = total / NUMREADINGS;          // calculate the average

   if (average > 50){                // if the average is over 50 ...
     showLED0();   // Show a 0

   }
   Serial.println(average); // use output to aid in calibrating
   delay(updateTime);
 }

}

Guckst du die Arduino Referenz (im Teil Math) zu map und constrain an.

Hi

Hmm - wenn man Englisch kann, ergibt Das direkt einen Sinn (constrain <-> beschränken).
Hätte bei dem Problem wohl mit min und max um mich geworfen ... wieder was gelerntQ!

MfG

funktioniert dieser sketch? warum dieses remap?

mein ziel war es etwas entfernt vom durchschnitt zu aktivieren.

die updatetime=40;?

40 sekunden?

andi_86x:
funktioniert dieser sketch? warum dieses remap?

mein ziel war es etwas entfernt vom durchschnitt zu aktivieren.

die updatetime=40;?

40 sekunden?

remap k.A.
40 ms