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-01-26
Revision:
3:758e8ed30819
Parent:
0:f9b6112278fe
Child:
4:04c17d376d57

File content as of revision 3:758e8ed30819:

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

#define ECHO_SERVER_PORT   7  

static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
Timer t;
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
int main() {
     
    //cose per accelerometro
    int32_t axes[3];
    int32_t axes2[3];
    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_odr(125.0f);
    
    //cpose per comunicazioni
    const char * IP = "169.254.112.124";
    const char * MASK = "255.255.255.0";
    const char * GATEWAY = "169.254.112.1";
     
   
    
    EthernetInterface eth;
    eth.init(IP,MASK,GATEWAY); //Use DHCP
    eth.connect();
    printf("IP Address is %s\n", eth.getIPAddress());
    
   
  
      
    UDPSocket server;
    server.bind(ECHO_SERVER_PORT);

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

        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", client.get_address());
        printf("Packet contents : '%s'\n",buffer);
        
        
        
        NTPClient ntp;
        ntp.setTime(client.get_address(), 123);
    
       
        time_t ctTime;
     
        ctTime = time(NULL);
        printf("Time is set to (UTC): %s,\r",  ctime(&ctTime));

   
    
        time_t offset = time(NULL);
        t.start();
        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++){
            acc_gyro->get_x_axes(axes);
            acc_gyro->get_g_axes(axes2);
            
             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");
        
        myled3=1;
        server.sendTo(client, buffer, n);
        
        Timer t;
        t.start();
        
            while (1){
                packetnumber =packetnumber+1;
                //send imu
                memset (&buffer[0], '\0', sizeof(buffer));
                acc_gyro->get_x_axes(axes);
                acc_gyro->get_g_axes(axes2);
                sprintf(buffer, "%ld,%ld,%ld,%ld,%ld,%ld\n",  (axes[0]-offsetGX), (axes[1]-offsetGY), (axes[2]-offsetGZ), (axes2[0]-offsetAX), (axes2[1]-offsetAY), (axes2[2]-offsetAZ));
                //printf (buffer);
                n =sizeof (buffer);
                server.sendTo(client, buffer, n);
                //wait (1);
                }
   
     
    
        
        }
}