there is a problem. i cant send data continuously.

Dependencies:   EthernetNetIf mbed HMC6352 ITG3200 ADXL345 IMUfilter

main.cpp

Committer:
fyazgan
Date:
2011-07-24
Revision:
0:711905e937b9

File content as of revision 0:711905e937b9:

#include "mbed.h"
#include "EthernetNetIf.h"
#include "TCPSocket.h"
#include "IMUTICKER.h"
#include "SCP1000.h"
#include "HMC6352.h"
#include <iostream>
#include <math.h>








SCP1000 scp1(p11,p12,p13,p14);
SCP1000 scp2(p11,p12,p13,p15);
HMC6352 compass(p28, p27);


//++++++++++++++++++++++++++Ethernet++++++++++++++++++++++++++++++
int t0=0,t1=0,t2=0,t3=0;   
Timer tmr;

void ByteToChar(int bytes[29], char chars[29], unsigned int count) {
    for (unsigned int i = 0; i < count; i++)
        chars[i] = (char)bytes[i];
}



EthernetNetIf eth(
    IpAddr(10,0,0,100), //IP Address
    IpAddr(255,255,255,0), //Network Mask
    IpAddr(10,0,0,1), //Gateway
    IpAddr(10,0,0,1)  //DNS
);


// EthernetNetIf eth;

DigitalOut connectionLED(LED2);
DigitalOut statusLED(LED1);

TCPSocket socket;

void onTCPSocketEvent(TCPSocketEvent e) {
    switch (e) {
        case TCPSOCKET_CONNECTED: {
            // Tells me that I'm connected to the server
            pc.printf("Connected\r\n");
            connectionLED = 1;
            wait(0.5);
 
        int b[29] = { 0, 0, 0, 0, 2,0,0,0,0,0,0,0,85,49 };
        char m[29];
        ByteToChar(b,m,29);
        int sendError = socket.send(m,14);
        }
        break;

        case TCPSOCKET_READABLE: {
        
        
          // Get the data and send them back to pc
            char rxBuffer[29];
            int len = socket.recv(rxBuffer, sizeof(rxBuffer)-1);
            if ( len != 0 ) {
                rxBuffer[len] = '\0';

                pc.printf("Received:\r\n%s\r\n");

                int sendError = socket.send(rxBuffer,(strlen(rxBuffer) + 1));
            }
        }
        break;

        case TCPSOCKET_WRITEABLE: {


            char m[29];
            int b[29] = { 2, 0, 0, 0, 2,0,0,0,15,0,0,0,85,49,64,t0,t1,t2,t3,255,255,255,255,255,255,255,255,255,255 };

            ByteToChar(b,m,27);

            int sendError = socket.send(m,sizeof(m));
 

        }
        break;

        case TCPSOCKET_CONTIMEOUT:
        case TCPSOCKET_CONRST:
        case TCPSOCKET_CONABRT:
        case TCPSOCKET_ERROR: {
            pc.printf("Connection Error: %i\r\n",e);
            socket.close();
        }
        break;

        case TCPSOCKET_DISCONNECTED: {
            pc.printf("Disconnected\r\n");
            socket.close();
            connectionLED = 0;
        }
        break;
    }
}

string binary( unsigned long n ) {
    char     result[ (sizeof( unsigned long ) * 8) + 1 ];
    unsigned index  = sizeof( unsigned long ) * 8;
    result[ index ] = '\0';

    do result[ --index ] = '0' + (n & 1);
    while (n >>= 1);

    return string( result + index );
}


int main() {
    pc.baud(9600);

    start();

    compass.setOpMode(HMC6352_CONTINUOUS, 1, 20);

//+++++++++++++++++++++++++++++ETHERNET+++++++++++++++++++++++++

    // Ethernet setup, callback setup and server declaration
    EthernetErr ethErr = eth.setup();
    if (ethErr)
        error("Error %d in setup.\r\n", ethErr);

    socket.setOnEvent(&onTCPSocketEvent);
    Host server(IpAddr(10, 0, 0, 7), 1000);
    TCPSocketErr bindStatus = socket.connect(server);
    if (bindStatus != TCPSOCKET_OK)
    pc.printf("Bind error\r\n");
    
    tmr.start();


    while (true) 
    {
    
        Net::poll();
        
        
                   if (tmr.read() > 2) 
        {
        tmr.reset();

        statusLED = !statusLED;
        
        pc.printf("%f,%f,%f\n\r",toDegrees(imuFilter.getRoll()),toDegrees(imuFilter.getPitch()),toDegrees(imuFilter.getYaw()));
        pc.printf("The pressure is %d Pa,temperature is %f C\n\r", scp1.readPressure(), scp1.readTemperature()/100);
        pc.printf("The pressure is %d Pa,temperature is %f C\n\r", scp2.readPressure(), scp2.readTemperature()/100);
        pc.printf("Heading is: %f", compass.sample() / 10.0);

        float rol=toDegrees(imuFilter.getRoll());
        int i=0;
        int r[16];
        double bol=3;
        while (rol>2) {
            bol=int(floor(rol/2));
            r[i]=floor(rol-(bol*2));
            rol=((rol-r[i])/2);
            i=i+1;
        }
        bol=int(floor(rol/2));
        r[i]=floor(rol-(bol*2));
        r[i+1]=1;
        for (int ii=i+2; ii<16; ii++) {
            r[ii]=0;
        }
        int kov[16];
        for (int ii=0; ii<8; ii++) {
            kov[ii]=r[ii];
            r[ii]=r[15-ii];
            r[15-ii]=kov[ii];
        }

        rol=toDegrees(imuFilter.getPitch());
        i=0;
        int p[16];
        bol=3;
        while (rol>2) {
            bol=(floor(rol/2));
            p[i]=floor(rol-(bol*2));
            rol=((rol-p[i])/2);
            i=i+1;
        }
        bol=int(floor(rol/2));
        p[i]=floor(rol-(bol*2));
        p[i+1]=1;
        for (int ii=i+2; ii<16; ii++) {
            p[ii]=0;
        }
        for (int ii=0; ii<8; ii++) {
            kov[ii]=p[ii];
            p[ii]=p[15-ii];
            p[15-ii]=kov[ii];
        }

        rol=toDegrees(imuFilter.getYaw());
        i=0;
        int y[16];
        bol=3;
        while (rol>2) {
            bol=(floor(rol/2));
            y[i]=floor(rol-(bol*2));
            rol=((rol-y[i])/2);
            i=i+1;
        }
        bol=(floor(rol/2));
        y[i]=floor(rol-(bol*2));
        y[i+1]=1;
        for (int ii=i+2; ii<16; ii++) {
            y[ii]=0;
        }
        for (int ii=0; ii<8; ii++) {
            kov[ii]=y[ii];
            y[ii]=y[15-ii];
            y[15-ii]=kov[ii];
        }

        char pp[32];
        for (int ii=0; ii<9; ii++) {
            pp[ii]=p[ii+8];
        }
        pp[8]=p[7];

        for (int ii=0; ii<9; ii++) {
            pp[ii+9]=r[ii+8];
        }
        pp[17]=r[7];

        for (int ii=0; ii<9; ii++) {
            pp[ii+18]=y[ii+8];
        }
        pp[26]=y[7];

        for (int ii=0; ii<6; ii++) {
            pp[ii+27]=0;
        }

        char by[3][7];

        for (int ii=0; ii<4; ii++) {
            for (int jj=0; jj<8; jj++) {
                by[ii][jj]=pp[(ii*8)+jj];
            }
        }

        char by0[8],by1[8],by2[8],by3[8];
        for (int ii=0; ii<8; ii++) {
            by0[ii]=by[0][ii];
        }
        for (int ii=0; ii<8; ii++) {
            by1[ii]=by[1][ii];
        }
        for (int ii=0; ii<8; ii++) {
            by2[ii]=by[2][ii];
        }
        for (int ii=0; ii<8; ii++) {
            by3[ii]=by[3][ii];
        }



        for (int ii=0; ii<8; ii++) {
            i=by0[ii];
            t0=t0+(i*pow(2.0,ii));
        }
        for (int ii=0; ii<8; ii++) {
            i=by1[ii];
            t1=t1+(i*pow(2.0,ii));
        }
        for (int ii=0; ii<8; ii++) {
            i=by2[ii];
            t2=t2+(i*pow(2.0,ii));
        }
        for (int ii=0; ii<8; ii++) {
            i=by3[ii];

            t3=t3+(i*pow(2.0,ii));
        }
//-----------------------------------------------------
}

//+++++++++++++++++++++++++++++IMU+++++++++++++++++++++++++++++++++++

    }
}