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+++++++++++++++++++++++++++++++++++
+
+ }
+}