This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

sending the structure data using ble_nus_send

Hi,

 I want to send the accelerometer data  in a structure  to the mobile app via ble , is it possible ? Any reference 

Parents
  • 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?

    1. Show your code;
    2. Explain how, exactly, it "failed".

  • //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 

Reply
  • //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 

Children
No Data
Related