為減少取樣遺漏重要資料,將 Arduino端取樣改為1000Hz,計算特定週期(目前設定400ms)內之極大極小值,送至PC端連接原本之processing繪圖程式,這兩筆資料為這400ms內的最大最小值, PC端繪圖可正確繪出振幅。
本程式未來可延長Arduino端計算週期 (400ms延長至1min),可大幅降低PC端資料率,節省傳輸頻寬,並可直接將兩個極值送進SQL伺服器,以透過網頁顯示,不會因電腦程式重啟而遺失重要資訊。
// 2016-07-28 04:29 UTC+8
// 測量A0對A1的空氣電壓, 修改自地震預測研究所所長林湧森程式。
// 2016-08-18 18:30 UTC+8 modified by
ghostyguo
//
int sampleCount; //Count for sampling
int maxValue, minValue; //Keep extreme values
int whoIsLast = 0; //-1=min,
1=max, 0=undefined;
void setup()
{
Serial.begin(9600);
startNewCycle();
}
void startNewCycle()
{
maxValue = -10000; //12bit ADC < -1024
minValue = 10000; //12bit ADC
> 1024
whoIsLast = 0;
sampleCount = 0;
}
void loop()
{
int sampleValue = analogRead(A0) - analogRead(A1);
if (minValue > sampleValue) {
minValue = sampleValue;
whoIsLast = -1; //minValue is latestly
update
}
if (maxValue < sampleValue) {
maxValue = sampleValue;
whoIsLast = 1; //maxValue is latestly
update
}
if (++sampleCount>400) { //400 samples
if (whoIsLast == -1) {
Serial.println(maxValue); //send max then min
Serial.println(minValue);
} else if (whoIsLast == 1) {
Serial.println(minValue); //send min then max
Serial.println(maxValue);
} else {
Serial.println("Extreme Value
Error"); //Something wrong
}
startNewCycle();
}
delay(1); // sampling at 1000Hz
}
|
沒有留言:
張貼留言