Uyg
Dependencies: EthernetInterface mbed-rtos mbed
Fork of TCPEchoServer by
main.cpp@9:eb22e90a3c03, 2017-11-27 (annotated)
- Committer:
- pauloludewig
- Date:
- Mon Nov 27 10:02:09 2017 +0000
- Revision:
- 9:eb22e90a3c03
- Parent:
- 8:23b1fba109b0
Bla
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_official | 0:38cbb854d85f | 1 | #include "mbed.h" |
emilmont | 1:5cebe0e38cd2 | 2 | #include "EthernetInterface.h" |
pauloludewig | 9:eb22e90a3c03 | 3 | |
mbed_official | 8:23b1fba109b0 | 4 | |
pauloludewig | 9:eb22e90a3c03 | 5 | const int ECHO_SERVER_PORT = 7; |
pauloludewig | 9:eb22e90a3c03 | 6 | const char* ECHO_SERVER_ADDRESS = "10.3.2.164"; |
pauloludewig | 9:eb22e90a3c03 | 7 | |
pauloludewig | 9:eb22e90a3c03 | 8 | |
pauloludewig | 9:eb22e90a3c03 | 9 | double ref = 20; |
pauloludewig | 9:eb22e90a3c03 | 10 | double temperatura; |
pauloludewig | 9:eb22e90a3c03 | 11 | |
pauloludewig | 9:eb22e90a3c03 | 12 | Thread tcp_server; |
pauloludewig | 9:eb22e90a3c03 | 13 | Thread tcp_client; |
pauloludewig | 9:eb22e90a3c03 | 14 | Thread leitura; |
pauloludewig | 9:eb22e90a3c03 | 15 | Thread controle; |
pauloludewig | 9:eb22e90a3c03 | 16 | |
pauloludewig | 9:eb22e90a3c03 | 17 | Mutex m_temp; |
pauloludewig | 9:eb22e90a3c03 | 18 | Mutex m_ref; |
pauloludewig | 9:eb22e90a3c03 | 19 | |
pauloludewig | 9:eb22e90a3c03 | 20 | EthernetInterface eth; |
pauloludewig | 9:eb22e90a3c03 | 21 | |
pauloludewig | 9:eb22e90a3c03 | 22 | void tcp_server_thread (); |
pauloludewig | 9:eb22e90a3c03 | 23 | void tcp_client_thread (); |
pauloludewig | 9:eb22e90a3c03 | 24 | void tcp_client_send_temp (); |
pauloludewig | 9:eb22e90a3c03 | 25 | void leitura_thread(); |
pauloludewig | 9:eb22e90a3c03 | 26 | void controle_thread(); |
pauloludewig | 9:eb22e90a3c03 | 27 | |
pauloludewig | 9:eb22e90a3c03 | 28 | AnalogIn LM35(A0); |
pauloludewig | 9:eb22e90a3c03 | 29 | PwmOut PWM1(A5); |
mbed_official | 8:23b1fba109b0 | 30 | |
emilmont | 1:5cebe0e38cd2 | 31 | int main (void) { |
pauloludewig | 9:eb22e90a3c03 | 32 | //inicializa o módulo ethernet |
pauloludewig | 9:eb22e90a3c03 | 33 | eth.init(); |
emilmont | 1:5cebe0e38cd2 | 34 | eth.connect(); |
pauloludewig | 9:eb22e90a3c03 | 35 | |
pauloludewig | 9:eb22e90a3c03 | 36 | //inicializa o PWM |
pauloludewig | 9:eb22e90a3c03 | 37 | PWM1.period_ms(100); |
pauloludewig | 9:eb22e90a3c03 | 38 | |
pauloludewig | 9:eb22e90a3c03 | 39 | //para não enviar a temperatura |
pauloludewig | 9:eb22e90a3c03 | 40 | tcp_client.signal_clr(0x1); |
pauloludewig | 9:eb22e90a3c03 | 41 | |
pauloludewig | 9:eb22e90a3c03 | 42 | /** INICIALIZAÇÃO DAS THREADS **/ |
pauloludewig | 9:eb22e90a3c03 | 43 | tcp_server.start(tcp_server_thread); |
pauloludewig | 9:eb22e90a3c03 | 44 | tcp_client.start(tcp_client_thread); |
pauloludewig | 9:eb22e90a3c03 | 45 | leitura.start(leitura_thread); |
pauloludewig | 9:eb22e90a3c03 | 46 | controle.start(controle_thread); |
pauloludewig | 9:eb22e90a3c03 | 47 | |
pauloludewig | 9:eb22e90a3c03 | 48 | while (true) { |
pauloludewig | 9:eb22e90a3c03 | 49 | |
pauloludewig | 9:eb22e90a3c03 | 50 | } |
pauloludewig | 9:eb22e90a3c03 | 51 | } |
pauloludewig | 9:eb22e90a3c03 | 52 | |
pauloludewig | 9:eb22e90a3c03 | 53 | void tcp_server_thread () { |
mbedAustin | 7:a5ead1402704 | 54 | printf("\nServer IP Address is %s\n", eth.getIPAddress()); |
pauloludewig | 9:eb22e90a3c03 | 55 | |
emilmont | 1:5cebe0e38cd2 | 56 | TCPSocketServer server; |
emilmont | 3:36fd3cfad85a | 57 | server.bind(ECHO_SERVER_PORT); |
emilmont | 3:36fd3cfad85a | 58 | server.listen(); |
pauloludewig | 9:eb22e90a3c03 | 59 | |
emilmont | 1:5cebe0e38cd2 | 60 | while (true) { |
emilmont | 1:5cebe0e38cd2 | 61 | printf("\nWait for new connection...\n"); |
emilmont | 1:5cebe0e38cd2 | 62 | TCPSocketConnection client; |
emilmont | 1:5cebe0e38cd2 | 63 | server.accept(client); |
emilmont | 3:36fd3cfad85a | 64 | client.set_blocking(false, 1500); // Timeout after (1.5)s |
pauloludewig | 9:eb22e90a3c03 | 65 | |
pauloludewig | 9:eb22e90a3c03 | 66 | printf("\nConnection from: %s\n", client.get_address()); |
emilmont | 1:5cebe0e38cd2 | 67 | char buffer[256]; |
emilmont | 1:5cebe0e38cd2 | 68 | while (true) { |
emilmont | 3:36fd3cfad85a | 69 | int n = client.receive(buffer, sizeof(buffer)); |
emilmont | 1:5cebe0e38cd2 | 70 | if (n <= 0) break; |
pauloludewig | 9:eb22e90a3c03 | 71 | |
mbedAustin | 7:a5ead1402704 | 72 | // print received message to terminal |
mbedAustin | 7:a5ead1402704 | 73 | buffer[n] = '\0'; |
mbedAustin | 7:a5ead1402704 | 74 | printf("Received message from Client :'%s'\n",buffer); |
pauloludewig | 9:eb22e90a3c03 | 75 | |
pauloludewig | 9:eb22e90a3c03 | 76 | m_ref.lock(); |
pauloludewig | 9:eb22e90a3c03 | 77 | ref = atof(buffer); |
pauloludewig | 9:eb22e90a3c03 | 78 | sprintf (buffer, "%f", ref); |
pauloludewig | 9:eb22e90a3c03 | 79 | m_ref.unlock(); |
pauloludewig | 9:eb22e90a3c03 | 80 | |
pauloludewig | 9:eb22e90a3c03 | 81 | // print sending message to terminal |
mbedAustin | 7:a5ead1402704 | 82 | printf("Sending message to Client: '%s'\n",buffer); |
pauloludewig | 9:eb22e90a3c03 | 83 | |
mbedAustin | 7:a5ead1402704 | 84 | // Echo received message back to client |
emilmont | 2:ec5ae99791da | 85 | client.send_all(buffer, n); |
emilmont | 1:5cebe0e38cd2 | 86 | if (n <= 0) break; |
emilmont | 1:5cebe0e38cd2 | 87 | } |
pauloludewig | 9:eb22e90a3c03 | 88 | |
emilmont | 1:5cebe0e38cd2 | 89 | client.close(); |
emilmont | 1:5cebe0e38cd2 | 90 | } |
emilmont | 1:5cebe0e38cd2 | 91 | } |
pauloludewig | 9:eb22e90a3c03 | 92 | |
pauloludewig | 9:eb22e90a3c03 | 93 | void tcp_client_thread () { |
pauloludewig | 9:eb22e90a3c03 | 94 | printf("\nClient IP Address is %s\n", eth.getIPAddress()); |
pauloludewig | 9:eb22e90a3c03 | 95 | |
pauloludewig | 9:eb22e90a3c03 | 96 | while(true) { |
pauloludewig | 9:eb22e90a3c03 | 97 | Thread::signal_wait(0x1); |
pauloludewig | 9:eb22e90a3c03 | 98 | tcp_client_send_temp(); |
pauloludewig | 9:eb22e90a3c03 | 99 | } |
pauloludewig | 9:eb22e90a3c03 | 100 | } |
pauloludewig | 9:eb22e90a3c03 | 101 | |
pauloludewig | 9:eb22e90a3c03 | 102 | void tcp_client_send_temp () { |
pauloludewig | 9:eb22e90a3c03 | 103 | // Connect to Server |
pauloludewig | 9:eb22e90a3c03 | 104 | TCPSocketConnection socket; |
pauloludewig | 9:eb22e90a3c03 | 105 | while (socket.connect(ECHO_SERVER_ADDRESS, 5000) < 0) { |
pauloludewig | 9:eb22e90a3c03 | 106 | printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, 5000); |
pauloludewig | 9:eb22e90a3c03 | 107 | Thread::wait(1000); |
pauloludewig | 9:eb22e90a3c03 | 108 | } |
pauloludewig | 9:eb22e90a3c03 | 109 | //printf("Connected to Server at %s\n",ECHO_SERVER_ADDRESS); |
pauloludewig | 9:eb22e90a3c03 | 110 | |
pauloludewig | 9:eb22e90a3c03 | 111 | // Send message to server |
pauloludewig | 9:eb22e90a3c03 | 112 | char buffer[10]; |
pauloludewig | 9:eb22e90a3c03 | 113 | int num; |
pauloludewig | 9:eb22e90a3c03 | 114 | |
pauloludewig | 9:eb22e90a3c03 | 115 | m_temp.lock(); |
pauloludewig | 9:eb22e90a3c03 | 116 | num = sprintf (buffer, "%.1f", temperatura); |
pauloludewig | 9:eb22e90a3c03 | 117 | m_temp.unlock(); |
pauloludewig | 9:eb22e90a3c03 | 118 | |
pauloludewig | 9:eb22e90a3c03 | 119 | //printf("Sending message to Server : '%s' \n",buffer); |
pauloludewig | 9:eb22e90a3c03 | 120 | socket.send_all(buffer, num); |
pauloludewig | 9:eb22e90a3c03 | 121 | |
pauloludewig | 9:eb22e90a3c03 | 122 | // Receive message from server |
pauloludewig | 9:eb22e90a3c03 | 123 | char buf[256]; |
pauloludewig | 9:eb22e90a3c03 | 124 | int n = socket.receive(buf, 256); |
pauloludewig | 9:eb22e90a3c03 | 125 | buf[n] = '\0'; |
pauloludewig | 9:eb22e90a3c03 | 126 | //printf("Received message from server: '%s'\n", buf); |
pauloludewig | 9:eb22e90a3c03 | 127 | |
pauloludewig | 9:eb22e90a3c03 | 128 | // Clean up |
pauloludewig | 9:eb22e90a3c03 | 129 | socket.close(); |
pauloludewig | 9:eb22e90a3c03 | 130 | } |
pauloludewig | 9:eb22e90a3c03 | 131 | |
pauloludewig | 9:eb22e90a3c03 | 132 | void leitura_thread () { |
pauloludewig | 9:eb22e90a3c03 | 133 | double meas; |
pauloludewig | 9:eb22e90a3c03 | 134 | while (true) { |
pauloludewig | 9:eb22e90a3c03 | 135 | meas = LM35.read(); // Converts and read the analog input value (value from 0.0 to 1.0) |
pauloludewig | 9:eb22e90a3c03 | 136 | |
pauloludewig | 9:eb22e90a3c03 | 137 | m_temp.lock(); |
pauloludewig | 9:eb22e90a3c03 | 138 | temperatura = meas * 330; // (0,1) * 3.3 (para converter pra tensão) / 10mV por grau celsius pra temperatura |
pauloludewig | 9:eb22e90a3c03 | 139 | m_temp.unlock(); |
pauloludewig | 9:eb22e90a3c03 | 140 | |
pauloludewig | 9:eb22e90a3c03 | 141 | tcp_client.signal_set(0x1); //AVISA TCP_CLIENT Q PODE ENVIAR SOCKET |
pauloludewig | 9:eb22e90a3c03 | 142 | |
pauloludewig | 9:eb22e90a3c03 | 143 | Thread::wait(1000); |
pauloludewig | 9:eb22e90a3c03 | 144 | } |
pauloludewig | 9:eb22e90a3c03 | 145 | } |
pauloludewig | 9:eb22e90a3c03 | 146 | |
pauloludewig | 9:eb22e90a3c03 | 147 | void controle_thread(){ |
pauloludewig | 9:eb22e90a3c03 | 148 | int tempo = 0; |
pauloludewig | 9:eb22e90a3c03 | 149 | |
pauloludewig | 9:eb22e90a3c03 | 150 | double deltaVo, ref_tensao, erro, saidaatual, saidaantiga = 0; |
pauloludewig | 9:eb22e90a3c03 | 151 | |
pauloludewig | 9:eb22e90a3c03 | 152 | while(true){ |
pauloludewig | 9:eb22e90a3c03 | 153 | deltaVo = temperatura * 0.01; // para converter para tensão |
pauloludewig | 9:eb22e90a3c03 | 154 | deltaVo = deltaVo - 0.26; // para virar delta |
pauloludewig | 9:eb22e90a3c03 | 155 | |
pauloludewig | 9:eb22e90a3c03 | 156 | m_ref.lock(); |
pauloludewig | 9:eb22e90a3c03 | 157 | printf("ref = %.1f\n", ref); |
pauloludewig | 9:eb22e90a3c03 | 158 | ref_tensao = ref * 0.01 - 0.26; // 10mV/grau |
pauloludewig | 9:eb22e90a3c03 | 159 | m_ref.unlock(); |
pauloludewig | 9:eb22e90a3c03 | 160 | |
pauloludewig | 9:eb22e90a3c03 | 161 | erro = ref_tensao - deltaVo; //calcula o erro |
pauloludewig | 9:eb22e90a3c03 | 162 | saidaatual = 625 * erro + 0.5 * saidaantiga; // em tensão |
pauloludewig | 9:eb22e90a3c03 | 163 | saidaantiga = saidaatual; |
pauloludewig | 9:eb22e90a3c03 | 164 | saidaatual = saidaatual / 3.3; // converte para duty cycle |
pauloludewig | 9:eb22e90a3c03 | 165 | PWM1.write(saidaatual); |
pauloludewig | 9:eb22e90a3c03 | 166 | |
pauloludewig | 9:eb22e90a3c03 | 167 | m_temp.lock(); |
pauloludewig | 9:eb22e90a3c03 | 168 | printf("temp(%d) = %.1f graus\n", tempo, temperatura); |
pauloludewig | 9:eb22e90a3c03 | 169 | m_temp.unlock(); |
pauloludewig | 9:eb22e90a3c03 | 170 | |
pauloludewig | 9:eb22e90a3c03 | 171 | tempo++; |
pauloludewig | 9:eb22e90a3c03 | 172 | Thread::wait(1000); // 1s |
pauloludewig | 9:eb22e90a3c03 | 173 | } |
pauloludewig | 9:eb22e90a3c03 | 174 | |
pauloludewig | 9:eb22e90a3c03 | 175 | } |
mbed_official | 8:23b1fba109b0 | 176 |