Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
You are viewing an older revision! See the latest version
Homepage
#include "mbed.h"
#include "ADXL345_I2C.h"
#include "S25FL128K.h"
ADXL345_I2C accelerometer(D14,D15);
S25FL128K s25fl(D11,D12,D13,D10);
Serial pc(USBTX, USBRX);
// stores 1 of 3 different types of data
// data is grouped to minimise wasted space.
union dataUnion {
int16_t acceleration[3];
};
// values used to indicate which type of data is being stored
const char AccelData = 1;
// structure used to store data in FRAM
typedef struct {
char dataType; // what type of data is in this structure
time_t dataTime; // when it was recorded
union dataUnion dataValue; // the actual values used.
} dataStore;
const int S25FLSize = 1024; // size of a page in bytes
const int s25flBlockSize = sizeof(dataStore); // size needed to store a data structure
int main()
{
pc.baud(115200);
// set_time(1387188323); // Set RTC time to 16 December 2013 10:05:23 UTC
int readings[3] = {0, 0, 0};
//pc.printf("Starting ADXL345 test...\n");
//wait(.001);
//pc.printf("Device ID is: 0x%02x\n", accelerometer.getDeviceID());
//wait(.001);
// These are here to test whether any of the initialization fails. It will print the failure
if (accelerometer.setPowerControl(0x00)) {
pc.printf("didn't intitialize power control\n");
return 0;
}
//Full resolution, +/-16g, 4mg/LSB.
//wait(.001);
if(accelerometer.setDataFormatControl(0x0B)) {
pc.printf("didn't set data format\n");
return 0;
}
//wait(.001);
//3.2kHz data rate.
if(accelerometer.setDataRate(ADXL345_3200HZ)) {
pc.printf("didn't set data rate\n");
return 0;
}
//wait(.001);
//Measurement mode.
if(accelerometer.setPowerControl(MeasurementMode)) {
pc.printf("didn't set the power control to measurement\n");
return 0;
}
int recordNumber = 0;
dataStore dataToWrite;
s25fl.eraseChip();
while(1) {
accelerometer.getOutput(readings);
dataToWrite.dataValue.acceleration[0] = readings[0];
dataToWrite.dataValue.acceleration[1] = readings[1];
dataToWrite.dataValue.acceleration[2] = readings[2];
dataToWrite.dataType = AccelData;
s25fl.write(recordNumber*s25flBlockSize, (char*)(&dataToWrite), s25flBlockSize);
recordNumber++;
if ((recordNumber*s25flBlockSize) >= (S25FLSize - s25flBlockSize)) {
recordNumber--;
pc.printf("\r\n PAGE FULL");
break;
}
} // end write loop
dataStore dataFromS25FL;
// code to read data back
int readRecord = 0;
while (readRecord < recordNumber) {
s25fl.read(readRecord*s25flBlockSize, (char*)(&dataFromS25FL), s25flBlockSize);
//switch (dataFromS25FL.dataType) {
//case AccelData:
printf("\r\n Accelerometer: X: %ig, Y: %ig, Z: %ig", dataFromS25FL.dataValue.acceleration[0], dataFromS25FL.dataValue.acceleration[1],dataFromS25FL.dataValue.acceleration[2]);
// break;
//}
readRecord++;
}
}