
Sistemas Operacionais - UTFPR
Dependencies: EthernetInterface Servo mbed-rtos mbed
main.cpp
- Committer:
- marlonprudente
- Date:
- 2017-12-14
- Revision:
- 5:c660c077ffc6
- Parent:
- 3:269f1844a464
File content as of revision 5:c660c077ffc6:
#include "mbed.h" #include "EthernetInterface.h" #include "Servo.h" #include <string.h> #define POS_CENTRO 1750 #define POS_MAX (POS_CENTRO + 110) #define POS_MIN (POS_CENTRO - 110) #define DIST_MIN 10 #define DIST_MAX 56 #define RESOL 1 #define PERIODO 10 const int ECHO_SERVER_PORT = 1234; const int BROADCAST_PORT = 58083; bool conectado = false; int setpoint; Thread tcp_server; Thread broadcast; EthernetInterface eth; Mutex m_dist; Mutex m_ref; unsigned int dist; Servo Servo1(D6); void tcp_server_thread (); void udp_broadcast (); int main (void) { //inicializa o módulo ethernet eth.init(); eth.connect(); Servo1.Enable(POS_CENTRO,20000); // inicializa threads tcp_server.start(tcp_server_thread); broadcast.start(udp_broadcast); //controle.start(controle_thread); broadcast.join(); printf("Todas as thread iniciadas\n"); while (true) { } } void tcp_server_thread () { printf("\nServer IP Address is %s\n", eth.getIPAddress()); TCPSocketServer server; server.bind(ECHO_SERVER_PORT); server.listen(); printf("\nWait for new connection...\n"); TCPSocketConnection client; server.accept(client); client.set_blocking(false, 1500); // Timeout after (1.5)s conectado = true; printf("\nConnection from: %s\n", client.get_address()); char buffer[256]; while (true) { int n = client.receive(buffer, sizeof(buffer)); if (n <=1) { //printf("Waiting messenger..."); //break; } else { // print received message to terminal buffer[n] = '\0'; printf("Received message from Client :'%s'\n",buffer); int pos = buffer[8] - '0'; if(pos == 1)setpoint = 20; else if(pos == 2)setpoint = 35; else if(pos == 3)setpoint = 50; printf("Setpoint: %d\n", setpoint); m_ref.lock(); // ref = atof(buffer); sprintf (buffer, "%s", client.get_address()); m_ref.unlock(); m_ref.lock(); sprintf (buffer, "%s", client.get_address()); 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; memset(buffer,0,256); if(buffer[0] == 'd') { for(int pos = 1000; pos < 2000; pos +=25) { Servo1.SetPosition(pos); } } else if(buffer[0] == 'e') { for(int pos = 2000; pos > 1000; pos -=25) { Servo1.SetPosition(pos); } } } } client.close(); } void udp_broadcast () { UDPSocket sock; sock.init(); sock.set_broadcasting(); Endpoint broadcast; broadcast.set_address("255.255.255.255", BROADCAST_PORT); char out_buffer[] = "Coppeti"; while (!conectado) { printf("Broadcasting...\n"); sock.sendTo(broadcast, out_buffer, sizeof(out_buffer)); Thread::wait(1000); } printf("Broadcast finalizado!\n"); }