/*
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 analog input 0
created 22 Apr 2007
by David A. Mellis <dam@mellis.org>
modified 9 Apr 2012
by Tom Igoe
This example code is in the public domain.
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Smoothing
*/// 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 us use this
// value to determine the size of the readings array.
constintnumReadings=10;intreadings[numReadings];// the readings from the analog input
intreadIndex=0;// the index of the current reading
inttotal=0;// the running total
intaverage=0;// the average
intinputPin=A0;
int型の配列readingsを定義します。配列の大きさは、先ほど定義したnumReadingsです。これにより、readings[0]からreadings[numReadings-1]の領域がとられます。配列の大きさを指定するには、数値を直接指定する(#defineの利用を含みます)か、constで修飾された整数型(char, byte, int, word, longが使えます)の変数で指定する必要があります。
voidsetup(){// initialize serial communication with computer:
Serial.begin(9600);// initialize all the readings to 0:
for(intthisReading=0;thisReading<numReadings;thisReading++){readings[thisReading]=0;}}
voidloop(){// subtract the last reading:
total=total-readings[readIndex];// read from the sensor:
readings[readIndex]=analogRead(inputPin);// add the reading to the total:
total=total+readings[readIndex];// advance to the next position in the array:
readIndex=readIndex+1;// if we're at the end of the array...
if(readIndex>=numReadings){// ...wrap around to the beginning:
readIndex=0;}// calculate the average:
average=total/numReadings;// send it to the computer as ASCII digits
Serial.println(average);delay(1);// delay in between reads for stability
}