1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-20 21:01:25 +03:00
This commit is contained in:
Tom Igoe
2009-06-17 21:31:00 +00:00
parent 83799e0938
commit 18beef8ee7

View File

@ -1,20 +1,30 @@
/* /*
* Smoothing
* David A. Mellis <dam@mellis.org> Smoothing
*
* Reads repeatedly from an analog input, calculating a running average Reads repeatedly from an analog input, calculating a running average
* and printing it to the computer. and printing it to the computer. Keeps ten readings in an array and
* continually averages them.
* http://www.arduino.cc/en/Tutorial/Smoothing
The circuit:
* Analog sensor (potentiometer will do) attached to analog input 0
Created 22 April 2007
By David A. Mellis <dam@mellis.org>
http://www.arduino.cc/en/Tutorial/Smoothing
*/ */
// Define the number of samples to keep track of. The higher the number, // Define the number of samples to keep track of. The higher the number,
// the more the readings will be smoothed, but the slower the output will // the more the readings will be smoothed, but the slower the output will
// respond to the input. Using a #define rather than a normal variable lets // respond to the input. Using a constant rather than a normal variable lets
// use this value to determine the size of the readings array. // use this value to determine the size of the readings array.
#define NUMREADINGS 10 const int numReadings = 10;
int readings[NUMREADINGS]; // the readings from the analog input int readings[numReadings]; // the readings from the analog input
int index = 0; // the index of the current reading int index = 0; // the index of the current reading
int total = 0; // the running total int total = 0; // the running total
int average = 0; // the average int average = 0; // the average
@ -23,21 +33,32 @@ int inputPin = 0;
void setup() void setup()
{ {
Serial.begin(9600); // initialize serial communication with computer // initialize serial communication with computer:
for (int i = 0; i < NUMREADINGS; i++) Serial.begin(9600);
readings[i] = 0; // initialize all the readings to 0 // initialize all the readings to 0:
for (int thisReading = 0; thisReading < numReadings; thisReading++)
readings[thisReading] = 0;
} }
void loop() void loop() {
{ // subtract the last reading:
total -= readings[index]; // subtract the last reading total= total - readings[index];
readings[index] = analogRead(inputPin); // read from the sensor // read from the sensor:
total += readings[index]; // add the reading to the total readings[index] = analogRead(inputPin);
index = (index + 1); // advance to the next index // add the reading to the total:
total= total + readings[index];
// advance to the next position in the array:
index = index + 1;
if (index >= NUMREADINGS) // if we're at the end of the array... // if we're at the end of the array...
index = 0; // ...wrap around to the beginning if (index >= numReadings)
// ...wrap around to the beginning:
index = 0;
average = total / NUMREADINGS; // calculate the average // calculate the average:
Serial.println(average); // send it to the computer (as ASCII digits) average = total / numReadings;
// send it to the computer (as ASCII digits)
Serial.println(average, DEC);
} }