Uyg

Dependencies:   EthernetInterface mbed-rtos mbed

Fork of TCPEchoServer by mbed official

Files at this revision

API Documentation at this revision

Comitter:
pauloludewig
Date:
Mon Nov 27 10:02:09 2017 +0000
Parent:
8:23b1fba109b0
Commit message:
Bla

Changed in this revision

EthernetInterface.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 23b1fba109b0 -r eb22e90a3c03 EthernetInterface.lib
--- a/EthernetInterface.lib	Tue Feb 14 16:20:16 2017 +0000
+++ b/EthernetInterface.lib	Mon Nov 27 10:02:09 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/EthernetInterface/#183490eb1b4a
+https://os.mbed.com/users/pauloludewig/code/EthernetInterface/#fbeca8d41375
diff -r 23b1fba109b0 -r eb22e90a3c03 main.cpp
--- a/main.cpp	Tue Feb 14 16:20:16 2017 +0000
+++ b/main.cpp	Mon Nov 27 10:02:09 2017 +0000
@@ -1,51 +1,176 @@
 #include "mbed.h"
 #include "EthernetInterface.h"
+
  
-#define ECHO_SERVER_PORT   7
+const int ECHO_SERVER_PORT = 7;
+const char* ECHO_SERVER_ADDRESS = "10.3.2.164";
+ 
+ 
+double ref = 20;
+double temperatura;
+ 
+Thread tcp_server;
+Thread tcp_client;
+Thread leitura;
+Thread controle;
+
+Mutex m_temp;
+Mutex m_ref;
+ 
+EthernetInterface eth;
+ 
+void tcp_server_thread ();
+void tcp_client_thread ();
+void tcp_client_send_temp ();
+void leitura_thread();
+void controle_thread();
+
+AnalogIn LM35(A0);
+PwmOut PWM1(A5);
  
 int main (void) {
-    EthernetInterface eth;
-    eth.init(); //Use DHCP
+    //inicializa o módulo ethernet
+    eth.init();
     eth.connect();
+   
+    //inicializa o PWM
+    PWM1.period_ms(100);
+   
+    //para não enviar a temperatura
+    tcp_client.signal_clr(0x1);
+   
+    /** INICIALIZAÇÃO DAS THREADS **/
+    tcp_server.start(tcp_server_thread);
+    tcp_client.start(tcp_client_thread);
+    leitura.start(leitura_thread);
+    controle.start(controle_thread);
+   
+    while (true) {
+        
+    }
+}
+ 
+void tcp_server_thread () {
     printf("\nServer IP Address is %s\n", eth.getIPAddress());
-    
+   
     TCPSocketServer server;
     server.bind(ECHO_SERVER_PORT);
     server.listen();
-    
+   
     while (true) {
         printf("\nWait for new connection...\n");
         TCPSocketConnection client;
         server.accept(client);
         client.set_blocking(false, 1500); // Timeout after (1.5)s
-        
-        printf("Connection from: %s\n", client.get_address());
+       
+        printf("\nConnection from: %s\n", client.get_address());
         char buffer[256];
         while (true) {
             int n = client.receive(buffer, sizeof(buffer));
             if (n <= 0) break;
-            
+           
             // print received message to terminal
             buffer[n] = '\0';
             printf("Received message from Client :'%s'\n",buffer);
-            
-            // reverse the message
-            char temp;
-            for(int f = 0, l = n-1; f<l; f++,l--){
-                temp = buffer[f];
-                buffer[f] = buffer[l];
-                buffer[l] = temp;
-                }
-            
-            // print reversed message to terminal
+           
+            m_ref.lock();
+            ref = atof(buffer);
+            sprintf (buffer, "%f", ref);
+            m_ref.unlock();
+           
+            // print sending message to terminal
             printf("Sending message to Client: '%s'\n",buffer);
-            
+           
             // Echo received message back to client
             client.send_all(buffer, n);
             if (n <= 0) break;
         }
-        
+       
         client.close();
     }
 }
+ 
+void tcp_client_thread () {
+    printf("\nClient IP Address is %s\n", eth.getIPAddress());
+   
+    while(true) {
+        Thread::signal_wait(0x1);
+        tcp_client_send_temp();
+    }
+}
+ 
+void tcp_client_send_temp () {
+    // Connect to Server
+    TCPSocketConnection socket;
+    while (socket.connect(ECHO_SERVER_ADDRESS, 5000) < 0) {
+        printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, 5000);
+        Thread::wait(1000);
+    }
+    //printf("Connected to Server at %s\n",ECHO_SERVER_ADDRESS);
+   
+    // Send message to server
+    char buffer[10];
+    int num; 
+    
+    m_temp.lock();
+    num = sprintf (buffer, "%.1f", temperatura);
+    m_temp.unlock();
+    
+    //printf("Sending  message to Server : '%s' \n",buffer);
+    socket.send_all(buffer, num);
+   
+    // Receive message from server
+    char buf[256];
+    int n = socket.receive(buf, 256);
+    buf[n] = '\0';
+    //printf("Received message from server: '%s'\n", buf);
+   
+    // Clean up
+    socket.close();
+}
+ 
+void leitura_thread () {
+    double meas;
+    while (true) {
+        meas = LM35.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
+        
+        m_temp.lock();
+        temperatura = meas * 330; // (0,1) * 3.3 (para converter pra tensão) / 10mV por grau celsius pra temperatura
+        m_temp.unlock();
+        
+        tcp_client.signal_set(0x1);    //AVISA TCP_CLIENT Q PODE ENVIAR SOCKET
+        
+        Thread::wait(1000);
+    }
+}
+
+void controle_thread(){
+    int tempo = 0;
+    
+    double deltaVo, ref_tensao, erro, saidaatual, saidaantiga = 0;
+    
+    while(true){
+        deltaVo = temperatura * 0.01;   // para converter para tensão
+        deltaVo = deltaVo - 0.26;   // para virar delta
+        
+        m_ref.lock();
+        printf("ref = %.1f\n", ref);
+        ref_tensao = ref * 0.01 - 0.26; // 10mV/grau
+        m_ref.unlock();
+        
+        erro = ref_tensao - deltaVo;    //calcula o erro
+        saidaatual = 625 * erro + 0.5 * saidaantiga;   // em tensão
+        saidaantiga = saidaatual;
+        saidaatual = saidaatual / 3.3;  // converte para duty cycle
+        PWM1.write(saidaatual);
+        
+        m_temp.lock();
+        printf("temp(%d) = %.1f graus\n", tempo, temperatura);
+        m_temp.unlock();
+        
+        tempo++;
+        Thread::wait(1000); // 1s
+    }
+ 
+ }
  
\ No newline at end of file