64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
/*
|
|
Smoothing
|
|
|
|
Reads repeatedly from an analog input, calculating a running average
|
|
and printing it to the computer. Keeps ten readings in an array and
|
|
continually averages them.
|
|
|
|
The circuit:
|
|
* Analog sensor (potentiometer will do) attached to pin 15
|
|
|
|
Created 22 April 2007
|
|
By David A. Mellis <dam@mellis.org>
|
|
|
|
http://www.arduino.cc/en/Tutorial/Smoothing
|
|
|
|
Ported to Maple 27 May 2010
|
|
by Bryan Newbold
|
|
*/
|
|
|
|
// 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
|
|
// respond to the input. Using a constant rather than a normal variable lets
|
|
// use this value to determine the size of the readings array.
|
|
const int numReadings = 10;
|
|
|
|
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; // the average
|
|
|
|
int inputPin = 15; // analog input pin
|
|
|
|
void setup() {
|
|
// Declare the input pin as INPUT_ANALOG:
|
|
pinMode(inputPin, INPUT_ANALOG);
|
|
|
|
// Initialize all the readings to 0:
|
|
for (int thisReading = 0; thisReading < numReadings; thisReading++) {
|
|
readings[thisReading] = 0;
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
// Subtract the last reading:
|
|
total = total - readings[index];
|
|
// Read from the sensor:
|
|
readings[index] = analogRead(inputPin);
|
|
// Add the reading to the total:
|
|
total = total + readings[index];
|
|
// Advance to the next position in the array:
|
|
index = index + 1;
|
|
|
|
// If we're at the end of the array...
|
|
if (index >= numReadings) {
|
|
// ...wrap around to the beginning:
|
|
index = 0;
|
|
}
|
|
|
|
// Calculate the average:
|
|
average = total / numReadings;
|
|
// Send it to the computer (as ASCII digits)
|
|
SerialUSB.println(average, DEC);
|
|
}
|