Uyg

Dependencies:   EthernetInterface mbed-rtos mbed

Fork of TCPEchoServer by mbed official

Committer:
pauloludewig
Date:
Mon Nov 27 10:02:09 2017 +0000
Revision:
9:eb22e90a3c03
Parent:
8:23b1fba109b0
Bla

Who changed what in which revision?

UserRevisionLine numberNew 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