趁這兩天工作又被隊友delay又跑去研究其他姿態穩定的濾波演算法,Arduino IDE和Library好像沒有把數據存成文字檔的功能,也不想自己另外弄個receive程式,所以還是直接用SD Card去存,然後將文字資料丟到Google Doc就能製作成曲線圖方便觀察濾波效果,不過SPI我很少用所以常常忘記接法,所以還是記錄上來。
Arduino SD Card
Digital 4 (XCK) ----> CS
Digital 11(MOSI) ----> MOSI(DI)
Digital 12(MISO) ----> MISO(DO)
Digital 13(SCK) ----> SCLK(CK)
VCC 3.3V ----> VCC
GND ----> GND
存Heartbeat Sensor的值製成曲線圖。
#include <SD.h>
int sensor_pin = 0;
int n = 0;
int n_1 = 0;
int diff = 0;
int count = 0;
int elapse_up = 0;
int elapse_down = 0;
int integral_plus = 0;
int integral_minus = 0;
void setup()
{
Serial.begin(9600);
pinMode(10,OUTPUT);
if(!SD.begin(4)){
Serial.println("SD Card Error!");
return ;
}
}
void loop()
{
File file = SD.open("data.txt",FILE_WRITE);
n = analogRead(sensor_pin); //取得現在得到的值
diff = (n - n_1); //將現在的值減去上次得到的值(N -(N-1))
n_1 = n; //更新上一次的值
file.println(n / 5);
//如果差值趨近零,則表示到達波谷又要進到新的一個PWM中。
//並且在確定上個PWM的爬升(integral_plus)與下降(integral_minus)
//是否有到達積分值來確定是否有PWM。
//兩者成立則更新所有狀態。
if(diff < 10 && diff > -10 &&
integral_plus > 160 && integral_minus < -200){
if(elapse_up > 50 && elapse_up < 400 &&
elapse_down > 96 && elapse_down < 800){
++count;
Serial.print(count);
Serial.println(" Heartbeat");
}
elapse_up = 0;
elapse_down = 0;
integral_plus = 0;
integral_minus = 0;
}
else if(diff > 20 && diff < 280){
//PWM上升
integral_plus += diff;
elapse_up += 20;
}
else if(diff < -20 && diff > -200){
//PWM下降
integral_minus += diff;
elapse_down += 20;
}
file.close();
//每20ms取樣,即一秒取樣50次。
delay(20);
}
沒有留言:
張貼留言