10 years ago.

FRAM

Hello, I'm new to programming. Here I'm trying to store 3-axis vailues to FRAM. I could able to store string " hello world" . Now I'm trying to store 3-axis data. I failed to davalop the function. Could some one help me.

while (true) {
         accelerometer.getOutput(readings);
         pc.printf("\r\n%i, %i, %i", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
         
         static char myString[] = "A Test String!\r\n";
         char readString[sizeof(myString)];
         int start = s.read_us();
         //Write bytes
         mem.writeBytes(myString,0,sizeof(myString));
         int writeEnd = s.read_us();
 
         //Read bytes
         mem.readBytes(readString,0,sizeof(readString));
         int end = s.read_us();
 
         //Print read bytes to Serial to verify correctness
         for (int i=0; i<sizeof(readString); i++) pc.printf("%c",readString[i]);
         pc.printf("\r\n");
         pc.printf("Write completed in %d microsecs.\r\n",writeEnd-start);
         pc.printf("Read completed in %d microsecs.\r\n",end-writeEnd);
         pc.printf("Status byte: 0x%x\r\n",mem.readStatusRegister());
         wait(0.5);
     }

And the 3-axis readings function is

void ADXL345_I2C::getOutput(int* readings){
    char buffer[6];    
    multiByteRead(ADXL345_DATAX0_REG, buffer, 6);
    
    readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
    readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
    readings[2] = (int)buffer[5] << 8 | (int)buffer[4];

Thank you.

I don't know the construct of your mem.writeBytes but appears to want a string

so you need to convert the Integer values into a string and then mem.writeByte that string

use sprintf() function

i.e.

char *newstring

/*do following three times n=0 to 2*/

sprintf(newstring,"%d",reading[n]);

mem.writeByte(newstring,0,sizeof(newstring));

Regards

posted by Martin Simpson 21 Aug 2015

Yes, It's working. thank you.

posted by Mohan gandhi Vinnakota 21 Aug 2015

1 Answer

10 years ago.

I'm guessing that the format for readBytes and writeBytes are (void *, int offset, int length) in which case is should be as simple as:

void ADXL345_I2C::getOutput(int* readings){
    char buffer[6];    
    char readBuffer[6];

    multiByteRead(ADXL345_DATAX0_REG, buffer, 6);
    mem.writeBytes(buffer,0, 6);

    mem.readBytes(readBuffer,0,6);

    readings[0] = (int)readBuffer[1] << 8 | (int)readBuffer[0];
    readings[1] = (int)readBuffer[3] << 8 | (int)readBuffer[2];
    readings[2] = (int)readBuffer[5] << 8 | (int)readBuffer[4];
 
}