STM Imu acquisition setup using ethernet

Dependencies:   F7_Ethernet mbed HTS221 LPS22HB LSM303AGR LSM6DSL

Fork of Nucleo_F746ZG_Ethernet by Dieter Graef

main.cpp

Committer:
nirnakern
Date:
2018-10-15
Revision:
9:45a96c88754d
Parent:
8:ee9a824852bf

File content as of revision 9:45a96c88754d:

/*QUESTA è LA VERSIONE PER IMU SU Ethernet*/
#include "mbed.h"
#include "rtos.h"
#include "EthernetInterface.h"
#include "NTPClient.h"
#include <stdio.h>
#include "XNucleoIKS01A2.h"

#define ECHO_SERVER_PORT   7  
#define DEBUG 0
#define RAW 0

static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);

DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
int main() {
     
    //cose per accelerometro
    
    #if !RAW
    int32_t axes[3];
    int32_t axes2[3];
    #else 
    int16_t axes[3];
    int16_t axes2[3];
    #endif
    uint8_t id;
    
    static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro;
    acc_gyro->enable_x();
    acc_gyro->enable_g();
    acc_gyro->read_id(&id);
    printf("LSM6DSL accelerometer & gyroscope = 0x%X\r\n", id);
    
    acc_gyro->set_x_odr(208.0f);
    acc_gyro->set_g_odr(208.0f);
    acc_gyro->set_x_fs(2.0f);
    acc_gyro->set_g_fs(125.0f);
    
    //cpose per comunicazioni
    const char * IP = "192.168.1.205";
    const char * MASK = "255.255.255.0";
    const char * GATEWAY = "192.168.1.1";
     
   #if !DEBUG
    
    EthernetInterface eth;
    eth.init(IP,MASK,GATEWAY); //Use DHCP
    eth.connect();
    printf("IP Address is %s\n\r", eth.getIPAddress());
    
   
  
      
    UDPSocket server;
    server.bind(ECHO_SERVER_PORT);

    
    Endpoint client;
       
 #endif
    char buffer[256];
    int32_t  packetnumber =0;
    
 
    
    
    
  
     
            
     
          
    
    
    
    while(1) {

#if !DEBUG
        printf("\nWaiting for UDP packet...\n");
        
        myled1=1;
        int n = server.receiveFrom(client, buffer, sizeof(buffer));
        buffer[n] = '\0';
        
        printf("Received packet from: %s\n\r", client.get_address());
        printf("Packet contents : '%s'\n\r",buffer);
        
                

#endif
    
        
        printf("Calibrating wait 30s\n");
        
        myled2=1;
        
        long offsetGX=0;
        long offsetGY=0;
        long offsetGZ=0;
        long offsetAX=0;
        long offsetAY=0;
        long offsetAZ=0;
        long counter=0;
        
        for (int i=0;i<4500;i++){
            #if !RAW
            acc_gyro->get_x_axes(axes);
            acc_gyro->get_g_axes(axes2);
            #else
            acc_gyro->get_x_axes_raw(axes);
            acc_gyro->get_g_axes_raw(axes2);
            
            #endif
             //offsetGX=offsetGX+ axes[0];
             //offsetGY=offsetGY+ axes[1];
             //offsetGZ=offsetGZ+ axes[2];
        
             offsetAX=offsetAX+ axes2[0];
             offsetAY=offsetAY+ axes2[1];
             offsetAZ=offsetAZ+ axes2[2];    
            counter++;
            
            
            
        }
        
        
         //offsetGX=offsetGX/counter;
         //offsetGY=offsetGY/counter;
         //offsetGZ=offsetGZ/counter;
         offsetAX=offsetAX/counter;
         offsetAY=offsetAY/counter;
         offsetAZ=offsetAZ/counter;
        
        
        
        
        
        printf("Start Sending Imu messages\n\r");
        
        myled3=1;
        #if !DEBUG
        server.sendTo(client, buffer, n);
        #endif
       
        
            while (1){
                #if !DEBUG
                packetnumber =packetnumber+1;
                #endif
                //send imu
                memset (&buffer[0], '\0', sizeof(buffer));
                #if !RAW
                acc_gyro->get_x_axes(axes);
                acc_gyro->get_g_axes(axes2);
                #else
                acc_gyro->get_x_axes_raw(axes);
                acc_gyro->get_g_axes_raw(axes2);
                #endif
                double accConversion = 0.009806;
                double gyrConversion = 0.0174533/1000;
                
                #if !RAW
                sprintf(buffer, "%02.6f,%02.6f,%02.6f,%03.6f,%03.6f,%03.6f\n\r",  (axes[0]*accConversion), (axes[1]*accConversion), (axes[2]*accConversion), (axes2[0]*gyrConversion), (axes2[1]*gyrConversion), (axes2[2]*gyrConversion));
                #else
                sprintf(buffer, "%d,%d,%d,%d,%d,%d\n\r",  axes[0], axes[1], axes[2], axes2[0], axes2[1], axes2[2]);
                #endif
               
               #if DEBUG
               
                printf (buffer);
                
                wait (1);
                #else
                n =sizeof (buffer);
                server.sendTo(client, buffer, n);
                #endif
                
                }
   
     
    
        
        }
}