我把实际检测到的数据导入到matlab里面画了一个图,可以看到数据还是有一定的规律,只是最大值和最小值之间相差的不是很大。int ledPin = 13;
int sensorPin = 0;
double alpha = 0.75;
int period = 20;
double change = 0.0;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
}
void loop()
{
static double oldValue = 0;
static double oldChange = 0;
int rawValue = analogRead(sensorPin);
double value = alpha * oldValue + (1 - alpha) * rawValue;//这个平滑就是取本次和上一次测量数据的加权平均值
Serial.println(value);oldValue = value;
delay(period);
}
import processing.serial.*;
Serial port;
float val;
float[] receiveDatas=new float[440];
int arrayLength=440;
int startIndex=0;
int dataLength=0;
void setup()
{
size(440,440);
frameRate(30);
strokeWeight(2);
smooth();
port=new Serial(this,"COM3",115200);
background(0);
}
void draw()
{
background(0);
if(port.available()>0)
{
String inString = port.readStringUntil('\n');
val=int(trim(inString));
receiveDatas[startIndex]=map(val,0,1023,0,height);
startIndex=(startIndex+1)%arrayLength;
dataLength=min(dataLength+1,arrayLength);
}
stroke(0,255,0);
//beginShape();
for(int i=0;i<dataLength-1;i++)
{
line(i,receiveDatas[(startIndex+i)%arrayLength],i+1,receiveDatas[(startIndex+i+1)%arrayLength]);
//vertex(i,receiveDatas[(startIndex+i)%arrayLength]);
println(receiveDatas[(startIndex+i)%arrayLength]);
}
//endShape();
}