Gyro output to TCP in degrees with calibration and correction

Dependencies:   EthernetNetIf mbed

main.cpp

Committer:
SED9008
Date:
2012-03-01
Revision:
0:5de940cf9783
Child:
1:a88d1309f810

File content as of revision 0:5de940cf9783:


// TCP Echo server
// 2010/9/7


/*

(Execute Sample)
PC side:
telnet 192.168.0.25 12345
Trying 192.168.0.25...
Connected to 192.168.0.25.
Escape character is '^]'.

mbed side:
Setup OK
mbed IP Address is 192.168.0.25
Binding..
Listening...
Listening: TCP Socket Accepted
Listening: Incoming TCP connection from 192.168.0.7
TCP Socket Readable
Received&Wrote:test text

TCP Socket Writable


*/

#include "mbed.h"
#include "EthernetNetIf.h"
#include "TCPSocket.h"
#include "ADXL345_I2C.h"

#define TCP_LISTENING_PORT 1337
int go = 0;

DigitalOut led3(LED3, "led3");
DigitalOut led4(LED4, "led4");
DigitalIn init(p5);
DigitalIn calibrate(p20);
//I2C i2c(p9, p10); // sda, scl
ADXL345_I2C acc(p9, p10);


void tcp_send(const char*);
void tcp_sendIfConnected( const char* data );
void onConnectedTCPSocketEvent(TCPSocketEvent e);
void onListeningTCPSocketEvent(TCPSocketEvent e);


// EthernetNetIf eth;
EthernetNetIf eth(
    IpAddr(192,168,0,16), //IP Address
    IpAddr(255,255,255,0), //Network Mask
    IpAddr(192,168,0,2), //Gateway
    IpAddr(192,168,0,2)  //DNS
);

TCPSocket ListeningSock;
TCPSocket* pConnectedSock; // for ConnectedSock
Host client;
TCPSocketErr err;
Ticker routine;

uint16_t x_cor = 0; 
uint16_t y_cor = 0; 
uint16_t z_cor = 0; 

void interrupt() 
{
//    int count = 0;
//    for (int address=0; address<256; address+=2) {
//        if (!i2c.write(address, NULL, 0)) { // 0 returned is ok
//             if(go) {
//                tcp_send(" - I2C device found at address:");
//                char buffer [128];
//                sprintf (buffer, "%i\n",address);
//                tcp_send(buffer);
//             }
//             count++;
//        }
//    } 

    int readings[3] = {0, 0, 0};
    if(go)acc.getOutput(readings);
    char buffer [128];
    if(go)sprintf (buffer, "x:%i - y:%i - z:%i\n",(int16_t)readings[0],(int16_t)readings[1],(int16_t)readings[2]);
    if(go)tcp_send(buffer);  
}

int main() {

    EthernetErr ethErr = eth.setup();
    if(ethErr)
    {
        return -1;
    }
    
    IpAddr ip = eth.getIp();
    
    // Set the callbacks for Listening
    ListeningSock.setOnEvent(&onListeningTCPSocketEvent); 
    
    // bind and listen on TCP
    err=ListeningSock.bind(Host(IpAddr(), TCP_LISTENING_PORT));
    if(err)
    {
        //Deal with that error...
    }
    
    err=ListeningSock.listen(); // Starts listening
    if(err)
    {
        //listening error
    }
    
    //Go into standby mode to configure the device.
    acc.setPowerControl(0x00);
 
    //Full resolution, +/-16g, 4mg/LSB.
    acc.setDataFormatControl(0x0B);
     
    //3.2kHz data rate.
    acc.setDataRate(ADXL345_3200HZ);
 
    //Measurement mode.
    acc.setPowerControl(0x08);
    wait(0.1);
    Timer tmr;
    tmr.start();
    while(true)
    {
        Net::poll();
        while(init)
        {
            if(!init)
            {
                tcp_send("You are a go!\n");
                led3 = 1;
                go = 1;
            }
        }
        if(tmr.read() > 0.2) // sec
        {
            led4=!led4; //Show that we are alive
            tmr.reset();
        }
        if(calibrate){
            while(calibrate){};
            int readings[3] = {0, 0, 0};
            if(go)acc.getOutput(readings);
            x_cor = readings[0];
            y_cor = readings[1];
            z_cor = readings[2];
            routine.attach_us(&interrupt, 10);
        }
    }  
}

void tcp_send( const char* data ){
    int len = strlen(data);
    pConnectedSock->send(data, len);
}

void onConnectedTCPSocketEvent(TCPSocketEvent e)
{
   switch(e)
    {
    case TCPSOCKET_CONNECTED:
        break;
    case TCPSOCKET_WRITEABLE:
      //Can now write some data...
        printf("TCP Socket Writable\r\n");
        break;
    case TCPSOCKET_READABLE:
        //Can now read dome data...
        // Read in any available data into the buffer
        //char buff[128];
        //while ( int len = pConnectedSock->recv(buff, 128) ) {
        // And send straight back out again
        //   pConnectedSock->send(buff, len);
        //   buff[len]=0; // make terminater
        //}
        break;
    case TCPSOCKET_CONTIMEOUT:
        printf("TCP Socket Timeout\r\n");
        break;
    case TCPSOCKET_CONRST:
        printf("TCP Socket CONRST\r\n");
        break;
    case TCPSOCKET_CONABRT:
        printf("TCP Socket CONABRT\r\n");
        break;
    case TCPSOCKET_ERROR:
        printf("TCP Socket Error\r\n");
        break;
    case TCPSOCKET_DISCONNECTED:
    //Close socket...
        printf("TCP Socket Disconnected\r\n");        
        pConnectedSock->close();
        break;
    default:
        printf("DEFAULT\r\n"); 
      }
}

void onListeningTCPSocketEvent(TCPSocketEvent e)
{
    switch(e)
    {
    case TCPSOCKET_ACCEPT:
        printf("Listening: TCP Socket Accepted\r\n");
        // Accepts connection from client and gets connected socket.   
        err=ListeningSock.accept(&client, &pConnectedSock);
        if (err) {
            printf("onListeningTcpSocketEvent : Could not accept connection.\r\n");
            return; //Error in accept, discard connection
        }
        // Setup the new socket events
        pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent);
        // We can find out from where the connection is coming by looking at the
        // Host parameter of the accept() method
        IpAddr clientIp = client.getIp();
        printf("Listening: Incoming TCP connection from %d.%d.%d.%d\r\n", 
           clientIp[0], clientIp[1], clientIp[2], clientIp[3]);
       break;
    // the following cases will not happen
    case TCPSOCKET_CONNECTED:
        printf("Listening: TCP Socket Connected\r\n");
        break;
    case TCPSOCKET_WRITEABLE:
        printf("Listening: TCP Socket Writable\r\n");
        break;
    case TCPSOCKET_READABLE:
        printf("Listening: TCP Socket Readable\r\n");
        break;
    case TCPSOCKET_CONTIMEOUT:
        printf("Listening: TCP Socket Timeout\r\n");
        break;
    case TCPSOCKET_CONRST:
        printf("Listening: TCP Socket CONRST\r\n");
        break;
    case TCPSOCKET_CONABRT:
        printf("Listening: TCP Socket CONABRT\r\n");
        break;
    case TCPSOCKET_ERROR:
        printf("Listening: TCP Socket Error\r\n");
        break;
    case TCPSOCKET_DISCONNECTED:
    //Close socket...
        printf("Listening: TCP Socket Disconnected\r\n");        
        ListeningSock.close();
        break;
    default:
        printf("DEFAULT\r\n"); 
     };
}