Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
5 years, 9 months ago.
得られたセンサーの値をSDカードに書き込めない
現在ADXL345を用いて加速度を読み取りsdカードに書き込みたいのですが最初の値に固定されてしまって上手くいきません。ADXL345を扱うにあたってhttps://os.mbed.com/cookbook/ADXL345-Accelerometerのライブラリを使わせていただいています。このURL先のADXL345_HelloWorld - main.cppは問題なく作動し、リアルタイムの加速度をTeratermで確認することができたのでsdに書き込むためのプログラムが間違ってると考えられるのですが原因が分かりません。以下に現在のプログラムを示します。
- include "TextLCD.h"
- include "SDFileSystem.h"
- include "ADXL345.h"
各クラス初期化
ADXL345 accelerometer(p11, p12, p13, p14); SDFileSystem sd(p5,p6,p7,p8,"sd"); TextLCD lcd(p24,p26,p27,p28,p29,p30); DigitalIn mysw(p18); DigitalOut myled(LED1); Serial pc(USBTX, USBRX); tx, rx
int main() { 時間について
time_t seconds = time(NULL) + (60 * 60 * 9); JST struct tm *t = localtime(&seconds);
ADXL345指定 int readings[3] = {0, 0, 0};
Go into standby mode to configure the device. accelerometer.setPowerControl(0x00);
Full resolution, +/-16g, 4mg/LSB. accelerometer.setDataFormatControl(0x0B);
3.2kHz data rate. accelerometer.setDataRate(ADXL345_3200HZ);
Measurement mode. accelerometer.setPowerControl(0x08);
mysw.mode(PullUp);
while(1){
if (!mysw){
for(int i=5;i>0;i){
lcd.cls();
lcd.printf("%d",i);
lcd.locate(4,1);
lcd.printf("before start",i);
wait(1);
}
lcd.cls(); lcd.printf("start");
pc.printf("Hello World!\n");
pc.printf("%04d/%02d/%02d %02d:%02d:%02d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); accelerometer.getOutput(readings);
FILE *fp = fopen("/sd/second.csv", "w"); if(fp == NULL) { error("Could not open file for write\n"); } for(int i=0;i<20;i++){
wait(0.1);
13-bit, sign extended values. pc.printf("%i, %i, %i\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
gyroX1[j]=(int16_t)readings[0]; gyroY1[j]=(int16_t)readings[1]; gyroZ1[j]=(int16_t)readings[2]; j++;
}
for(int k=0;k<j;k++){ fprintf(fp,"%f,%f,%f,\r\n",gyroX1[k],gyroY1[k],gyroZ1[k]); }
fclose(fp);
myled=1;
lcd.cls(); lcd.printf("finish"); pc.printf("Goodbye World!\n"); }
else { lcd.cls();
lcd.locate(3,0);
lcd.printf("waiting time");
wait(0.2); }
} }
全文を載せる必要はないと思いましたが、mbedもプログラムもまだ初心者であるため該当箇所以外でも何かおかしいと思える点がありましたら教えていただきたいと思い、載せさせていただきました。何卒よろしくお願いします。