for joel
Dependencies: EthernetInterface mbed-rtos mbed
Diff: main.cpp
- Revision:
- 0:4f326062cb33
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Aug 03 10:17:41 2017 +0000 @@ -0,0 +1,85 @@ +/* --------------------------------------- + --------------------------------------- + Author: Joel Holland + Purpose: To have mbed send bytes of + data to a TCP server. + Note: Do not update ethernetinterface.h + new repositories are broken. + -------------------------------------- + -------------------------------------- */ + +#include "mbed.h" +#include "EthernetInterface.h" + +EthernetInterface eth; //ethernet object +TCPSocketConnection socket; //socket object +Serial pc(USBTX,USBRX); //interface with TeraTerm +DigitalOut P17(p17); +AnalogIn LM35(p15); +DigitalOut P16(p16); +DigitalOut P18(p18); +DigitalOut P19(p19); +DigitalOut P20(p20); + +static const char* ip = "10.58.92.178"; +static const char* mask = "255.255.192.0"; +static const char* gateway = "10.58.64.1"; + +// A data structure of the data to send +// In this case it's fairly pointless, you may as well just use a uint16_t[] directly in place of this +// But if you package what you want into a structure then you don't need to change the +// transmission code if you change what is being sent, you just change the structure definition. +typedef struct packetToSent_s { +uint8_t data[1]; //specify data types within the struct, in this case an 80 element array of 8-bit unsigned int +} packetToSend_t; + +packetToSend_t dataOut; //an instance of the packet to send + +int main() +{ + pc.printf("This program constantly polls the temperature sensor\n\n"); + pc.printf("and sends the data packets out through both USB and TCP.\n\n"); + eth.init(ip,mask,gateway); //static + wait(5); + eth.connect(); + wait(5); //allow the mbed time to be dynamically assigned an IP and to connect before printing IP address + pc.printf("IP address is %s\n\n", eth.getIPAddress()); //function in ethernet library to return string containing IP + pc.printf("Mask is is %s\n\n", eth.getNetworkMask()); + pc.printf("Gateway is %s\n\n", eth.getGateway()); + + socket.connect("10.58.74.19", 23); //ip address of PC, and port to be listened to by the HOST + wait(1); + + while(1) { + float tempC,mv,avgtemp; + //specify data to be sent. Here we would desire the output from the multiplexer. + for(int i=0;i<1;i++) { + float avg=0; + for(int j=0;j<100;j++) { + mv = ((LM35.read()-0.02)*3300); //calibrate the analogue pin, multiply by reference voltage, convert to mv. + // pc.printf("voltage of sensor is %.2f",mv); + // wait(1); + tempC = mv/10; //LM35 device has a 1 degree change for every 10mv, therefore divide by this to get temp in C. + // pc.printf("temperature sample is %.2f C\t",tempC); + // wait(1); + avg=avg+tempC; + wait(0.01); //take 100 samples at a rate of 1ms + } + avgtemp=avg/100; + pc.printf("Temperature is %2.2f C\t\t\t", avgtemp); + uint8_t b; + b=avgtemp; //remove offset from analogue pin, then convert to unsigned integer 8 bit (2 bytes). + dataOut.data[i]=b; //populate array with analogue readings from pin 17. Remove offset. + } + + //send the data packet by passing a pointer to the start of the data, and specifying its size. + + socket.send_all((char*)&dataOut,sizeof(packetToSend_t)); + //socket.send_all((char*)&dataOut2,sizeof(packetToSend_t)); here we could send packets corresponding to different data types + } +//ideally should check return value from send_all to verify no errors have occured. + + +} + +