Hi,
I want to send the accelerometer data in a structure to the mobile app via ble , is it possible ? Any reference
Hi,
I want to send the accelerometer data in a structure to the mobile app via ble , is it possible ? Any reference
Just like a real hardware UART, the NUS just sends bytes - it neither knows nor cares anything about data structure or meaning.
So you can either just send the entire struct as a stream of bytes, or pick each field from the struct, and send individually.
For the 1st option, remember that compilers may insert padding ...
i tried to pass the structure value in ble_nus_send but failed
would you care to be a little less vague?

//void mpu_6050_read_acc(int16_t *p_x_val, int16_t *p_y_val, int16_t *p_z_val)
char *accel_data()
{
ret_code_t err_code;
float *p_a_val;
float *p_b_val;
float *p_c_val;
int16_t *p_x_val;
int16_t *p_y_val;
int16_t *p_z_val;
// Raw accelerometer measurements buffer
uint8_t acc_data[6];
// Read the six accelerometer data registers starting from ACCEL_XOUT_H
mpu_6050_I2C_register_read(ACCEL_XOUT_H,acc_data,sizeof(acc_data));
APP_ERROR_CHECK(err_code);
/* Combine the two 8-bit data registers to a 16-bit value
for each axis by left shifting ACCEL_xOUT_H eight times
and OR it with ACCEL_xOUT_L. */
* p_x_val = (acc_data[0]<<8)|acc_data[1];
*p_y_val = (acc_data[2]<<8)|acc_data[3];
*p_z_val = (acc_data[4]<<8)|acc_data[5];
*p_a_val = (*p_x_val) /16384.0; // in m/s^2
*p_b_val = (*p_y_val) /16384.0; // in m/s^2
*p_c_val = (*p_z_val) /16384.0; // in m/s^2
alt[0]=*p_a_val;
alt[1]=*p_b_val;
alt[2]=*p_c_val;
sprintf(accel,",%.2f,%.2f,%.2f\n",alt[0],alt[1],alt[2]);
return accel;
}
// creating a structure
struct sensor_data
{
char timestamp[100];
int sensor_value;
};
struct sensor_data sensordata_array[100];
while(1)
{
for (;data_read_counter<100;data_read_counter++)
{
time_stamp_data =nrf_cal_get_time_string(true); //timestamp data in string
acceleromter_data=accelerometer_function_data();// acceleromter data in string
strcat(time_stamp_data,acceleromter_data);
strcat(sensordata_array[data_read_counter].timestamp,time_stamp_data);
sensordata_array[data_read_counter].sensor_value=sensor_array[data_read_counter];
nrf_delay_us(6000);
}
for (data_read_counter=0;data_read_counter<100;data_read_counter++)
{
NRF_LOG_INFO("original value:%s", sensordata_array[data_read_counter].timestamp);
NRF_LOG_INFO("original value:%d", sensordata_array[data_read_counter].sensor_value);
nrf_delay_ms(2000);
length=sizeof(sensordata_array[data_read_counter].timestamp);
ble_nus_data_send(&m_nus,sensordata_array[data_read_counter].timestamp,&length,m_conn_handle);
}
}}
I am getting the junk values why even I increased the number of bytes in an array . I don't know how to get the exact the number of bytes please help me
hi awneil
I am getting the junk value while I am passing the structure in ble_nus_send . By using function printf("Length of String is %lu\n", strlen(timestamp)); I am getting the length of string , even though i am getting junk why ?
struct sensor_data
{
char timestamp[41]; // 41 by using printf strlen
int sensor_value;
};
struct sensor_data sensordata_array[10];
while(1)
{
for (;data_read_counter<10;data_read_counter++){
timestamp_data =nrf_cal_get_time_string(true);
sensor_value_data=accel_data();
strcat(timestamp_data,sensor_value_data);
strcat(sensordata_array[data_read_counter].timestamp,timestamp_data);
sensordata_array[data_read_counter].sensor_value=sensor_array[data_read_counter];
nrf_delay_us(8000);
}
for (data_read_counter=0;data_read_counter<10;data_read_counter++)
{
NRF_LOG_INFO("original value:%s", sensordata_array[data_read_counter].timestamp);
NRF_LOG_INFO("original value:%d", sensordata_array[data_read_counter].sensor_value);
nrf_delay_ms(2000);
length=sizeof(sensordata_array[data_read_counter].timestamp);
ble_nus_data_send(&m_nus,sensordata_array[data_read_counter].timestamp,&length,m_conn_handle);
}