project for iot vives
Dependencies: mbed C12832 LM75B FXOS8700Q
StateMachine.cpp@0:3c9cd556e510, 2020-11-04 (annotated)
- Committer:
- tweagle
- Date:
- Wed Nov 04 12:41:46 2020 +0000
- Revision:
- 0:3c9cd556e510
project1-iot-simondeneve
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tweagle | 0:3c9cd556e510 | 1 | #include "StateMachine.h" |
tweagle | 0:3c9cd556e510 | 2 | #include "mbed.h" |
tweagle | 0:3c9cd556e510 | 3 | #include "EthernetInterface.h" |
tweagle | 0:3c9cd556e510 | 4 | #include "LM75B.h" |
tweagle | 0:3c9cd556e510 | 5 | |
tweagle | 0:3c9cd556e510 | 6 | uint16_t temperature =(sensor.read()); |
tweagle | 0:3c9cd556e510 | 7 | char upper = (temperature >> 8) & 0x00FF; |
tweagle | 0:3c9cd556e510 | 8 | char lower = temperature & 0x00FF; |
tweagle | 0:3c9cd556e510 | 9 | char pwm = (char)(pot1); |
tweagle | 0:3c9cd556e510 | 10 | char id = 0x14; |
tweagle | 0:3c9cd556e510 | 11 | |
tweagle | 0:3c9cd556e510 | 12 | char payload[4] = {upper, lower, pwm, id}; |
tweagle | 0:3c9cd556e510 | 13 | |
tweagle | 0:3c9cd556e510 | 14 | StateMachine::StateMachine(){ |
tweagle | 0:3c9cd556e510 | 15 | r = new PwmOut(D5); |
tweagle | 0:3c9cd556e510 | 16 | g = new PwmOut(D9); |
tweagle | 0:3c9cd556e510 | 17 | b = new PwmOut(D8); |
tweagle | 0:3c9cd556e510 | 18 | |
tweagle | 0:3c9cd556e510 | 19 | pot1 = new AnalogIn (A0); |
tweagle | 0:3c9cd556e510 | 20 | pot2 = new AnalogIn(A1); |
tweagle | 0:3c9cd556e510 | 21 | up = new DigitalIn(A2); |
tweagle | 0:3c9cd556e510 | 22 | down = new DigitalIn(A3); |
tweagle | 0:3c9cd556e510 | 23 | left = new DigitalIn(A4); |
tweagle | 0:3c9cd556e510 | 24 | right = new DigitalIn(A5); |
tweagle | 0:3c9cd556e510 | 25 | |
tweagle | 0:3c9cd556e510 | 26 | lcd = new C12832(D11, D13, D12, D7, D10); |
tweagle | 0:3c9cd556e510 | 27 | |
tweagle | 0:3c9cd556e510 | 28 | sensor = new LM75B(D14,D15); |
tweagle | 0:3c9cd556e510 | 29 | |
tweagle | 0:3c9cd556e510 | 30 | led = new DigitalOut(LED1); |
tweagle | 0:3c9cd556e510 | 31 | |
tweagle | 0:3c9cd556e510 | 32 | |
tweagle | 0:3c9cd556e510 | 33 | currentState = INIT; |
tweagle | 0:3c9cd556e510 | 34 | } |
tweagle | 0:3c9cd556e510 | 35 | |
tweagle | 0:3c9cd556e510 | 36 | StateMachine::~StateMachine(){ |
tweagle | 0:3c9cd556e510 | 37 | delete r; |
tweagle | 0:3c9cd556e510 | 38 | delete g; |
tweagle | 0:3c9cd556e510 | 39 | delete b; |
tweagle | 0:3c9cd556e510 | 40 | delete pot1; |
tweagle | 0:3c9cd556e510 | 41 | delete pot2; |
tweagle | 0:3c9cd556e510 | 42 | delete up; |
tweagle | 0:3c9cd556e510 | 43 | delete down; |
tweagle | 0:3c9cd556e510 | 44 | delete left; |
tweagle | 0:3c9cd556e510 | 45 | delete right; |
tweagle | 0:3c9cd556e510 | 46 | |
tweagle | 0:3c9cd556e510 | 47 | delete lcd; |
tweagle | 0:3c9cd556e510 | 48 | |
tweagle | 0:3c9cd556e510 | 49 | delete sensor; |
tweagle | 0:3c9cd556e510 | 50 | |
tweagle | 0:3c9cd556e510 | 51 | delete led; |
tweagle | 0:3c9cd556e510 | 52 | } |
tweagle | 0:3c9cd556e510 | 53 | |
tweagle | 0:3c9cd556e510 | 54 | void StateMachine::start() |
tweagle | 0:3c9cd556e510 | 55 | { |
tweagle | 0:3c9cd556e510 | 56 | while(true) |
tweagle | 0:3c9cd556e510 | 57 | { |
tweagle | 0:3c9cd556e510 | 58 | // switch(currentState) { |
tweagle | 0:3c9cd556e510 | 59 | // case INIT: |
tweagle | 0:3c9cd556e510 | 60 | // actionInit(); |
tweagle | 0:3c9cd556e510 | 61 | // currentstate =; |
tweagle | 0:3c9cd556e510 | 62 | // break; |
tweagle | 0:3c9cd556e510 | 63 | // case BLUE: |
tweagle | 0:3c9cd556e510 | 64 | // actionBlue(); |
tweagle | 0:3c9cd556e510 | 65 | // currentState = INIT; |
tweagle | 0:3c9cd556e510 | 66 | // break; |
tweagle | 0:3c9cd556e510 | 67 | // case GREEN: |
tweagle | 0:3c9cd556e510 | 68 | // actionGreen(); |
tweagle | 0:3c9cd556e510 | 69 | // currentState = INIT; |
tweagle | 0:3c9cd556e510 | 70 | // break; |
tweagle | 0:3c9cd556e510 | 71 | // default: |
tweagle | 0:3c9cd556e510 | 72 | // currentState = CERROR; |
tweagle | 0:3c9cd556e510 | 73 | // return; |
tweagle | 0:3c9cd556e510 | 74 | if(currentState == INIT){actionInit();} |
tweagle | 0:3c9cd556e510 | 75 | if(currentState == SERVER) {actionServer();} |
tweagle | 0:3c9cd556e510 | 76 | if(currentState == CLIENT) {actionClient();} |
tweagle | 0:3c9cd556e510 | 77 | } |
tweagle | 0:3c9cd556e510 | 78 | } |
tweagle | 0:3c9cd556e510 | 79 | |
tweagle | 0:3c9cd556e510 | 80 | void StateMachine::actionInit(){ |
tweagle | 0:3c9cd556e510 | 81 | printf("Select left for server, right for client."); |
tweagle | 0:3c9cd556e510 | 82 | if(left){currentState = SERVER;} |
tweagle | 0:3c9cd556e510 | 83 | if(right){currentState = CLIENT;} |
tweagle | 0:3c9cd556e510 | 84 | wait(1.0); |
tweagle | 0:3c9cd556e510 | 85 | } |
tweagle | 0:3c9cd556e510 | 86 | |
tweagle | 0:3c9cd556e510 | 87 | void StateMachine::actionClient(){ |
tweagle | 0:3c9cd556e510 | 88 | |
tweagle | 0:3c9cd556e510 | 89 | printf("Client example\n\r"); |
tweagle | 0:3c9cd556e510 | 90 | |
tweagle | 0:3c9cd556e510 | 91 | EthernetInterface eth; |
tweagle | 0:3c9cd556e510 | 92 | eth.set_network("192.168.0.20","255.255.255.0","192.168.0.1"); |
tweagle | 0:3c9cd556e510 | 93 | eth.connect(); |
tweagle | 0:3c9cd556e510 | 94 | |
tweagle | 0:3c9cd556e510 | 95 | printf("The client IP address is '%s'\n\r", eth.get_ip_address()); |
tweagle | 0:3c9cd556e510 | 96 | |
tweagle | 0:3c9cd556e510 | 97 | TCPSocket socket; |
tweagle | 0:3c9cd556e510 | 98 | socket.open(ð); |
tweagle | 0:3c9cd556e510 | 99 | socket.connect("192.168.0.28",4000); |
tweagle | 0:3c9cd556e510 | 100 | |
tweagle | 0:3c9cd556e510 | 101 | |
tweagle | 0:3c9cd556e510 | 102 | |
tweagle | 0:3c9cd556e510 | 103 | payload[0] = upper; |
tweagle | 0:3c9cd556e510 | 104 | payload[1] = lower; |
tweagle | 0:3c9cd556e510 | 105 | payload[2] = pwm; |
tweagle | 0:3c9cd556e510 | 106 | payload[3] = id; |
tweagle | 0:3c9cd556e510 | 107 | |
tweagle | 0:3c9cd556e510 | 108 | printf("%d\n", upper); |
tweagle | 0:3c9cd556e510 | 109 | printf("%d\n", lower); |
tweagle | 0:3c9cd556e510 | 110 | |
tweagle | 0:3c9cd556e510 | 111 | // print hex value of temperature on lcd |
tweagle | 0:3c9cd556e510 | 112 | lcd.printf("Temp %.1x\n", sensor.read() ); |
tweagle | 0:3c9cd556e510 | 113 | printf(payload); |
tweagle | 0:3c9cd556e510 | 114 | |
tweagle | 0:3c9cd556e510 | 115 | socket.send(payload, 4); |
tweagle | 0:3c9cd556e510 | 116 | socket.close(); |
tweagle | 0:3c9cd556e510 | 117 | wait(1.0); |
tweagle | 0:3c9cd556e510 | 118 | } |
tweagle | 0:3c9cd556e510 | 119 | |
tweagle | 0:3c9cd556e510 | 120 | void StateMachine::actionServer(){ |
tweagle | 0:3c9cd556e510 | 121 | printf("Server example\n\r"); |
tweagle | 0:3c9cd556e510 | 122 | |
tweagle | 0:3c9cd556e510 | 123 | EthernetInterface eth; |
tweagle | 0:3c9cd556e510 | 124 | eth.set_network("192.168.0.28","255.255.255.0","192.168.0.1"); |
tweagle | 0:3c9cd556e510 | 125 | eth.connect(); |
tweagle | 0:3c9cd556e510 | 126 | |
tweagle | 0:3c9cd556e510 | 127 | printf("The Server IP address is '%s'\n\r", eth.get_ip_address()); |
tweagle | 0:3c9cd556e510 | 128 | |
tweagle | 0:3c9cd556e510 | 129 | TCPServer srv(ð); |
tweagle | 0:3c9cd556e510 | 130 | |
tweagle | 0:3c9cd556e510 | 131 | srv.bind(4000); |
tweagle | 0:3c9cd556e510 | 132 | |
tweagle | 0:3c9cd556e510 | 133 | srv.listen(); |
tweagle | 0:3c9cd556e510 | 134 | |
tweagle | 0:3c9cd556e510 | 135 | while(true){ |
tweagle | 0:3c9cd556e510 | 136 | TCPSocket client; |
tweagle | 0:3c9cd556e510 | 137 | SocketAddress client_addr; |
tweagle | 0:3c9cd556e510 | 138 | char *buffer = "Hello TCP client!\r\n"; |
tweagle | 0:3c9cd556e510 | 139 | |
tweagle | 0:3c9cd556e510 | 140 | srv.accept(&client, &client_addr); |
tweagle | 0:3c9cd556e510 | 141 | |
tweagle | 0:3c9cd556e510 | 142 | printf("Accepted %s:%d\n\r", client_addr.get_ip_address(), |
tweagle | 0:3c9cd556e510 | 143 | client_addr.get_port()); |
tweagle | 0:3c9cd556e510 | 144 | |
tweagle | 0:3c9cd556e510 | 145 | client.send(buffer, 256); |
tweagle | 0:3c9cd556e510 | 146 | |
tweagle | 0:3c9cd556e510 | 147 | char rbuffer[4]; |
tweagle | 0:3c9cd556e510 | 148 | client.recv(rbuffer, sizeof rbuffer); |
tweagle | 0:3c9cd556e510 | 149 | |
tweagle | 0:3c9cd556e510 | 150 | uint8_t upper = rbuffer[0]; |
tweagle | 0:3c9cd556e510 | 151 | uint8_t lower = rbuffer[1]; |
tweagle | 0:3c9cd556e510 | 152 | uint8_t PWM = rbuffer[2]; |
tweagle | 0:3c9cd556e510 | 153 | uint8_t ID = rbuffer[3]; |
tweagle | 0:3c9cd556e510 | 154 | |
tweagle | 0:3c9cd556e510 | 155 | float temp = ((upper << 8) | lower) / 256.00; |
tweagle | 0:3c9cd556e510 | 156 | |
tweagle | 0:3c9cd556e510 | 157 | printf("Temperature is %f\n", temp); |
tweagle | 0:3c9cd556e510 | 158 | |
tweagle | 0:3c9cd556e510 | 159 | client.close(); |
tweagle | 0:3c9cd556e510 | 160 | wait(1.0); |
tweagle | 0:3c9cd556e510 | 161 | } |
tweagle | 0:3c9cd556e510 | 162 | } |