there is a problem. i cant send data continuously.
Dependencies: EthernetNetIf mbed HMC6352 ITG3200 ADXL345 IMUfilter
Diff: main.cpp
- Revision:
- 0:711905e937b9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jul 24 19:49:51 2011 +0000 @@ -0,0 +1,297 @@ +#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+++++++++++++++++++++++++++++++++++ + + } +}