Bachelor Assignment for delayed teleoperating systems
Dependencies: EthernetInterface FastPWM mbed-rtos mbed MODSERIAL
main.cpp
- Committer:
- darth_bachious
- Date:
- 2018-05-07
- Revision:
- 1:853939e38acd
- Parent:
- 0:2f89dec3e2ab
- Child:
- 2:c27b0654cffd
File content as of revision 1:853939e38acd:
#include "mbed.h" #include "EthernetInterface.h" #include "rtos.h" #include "QEI.h" //Master or Slave? 1=Master, 0=Slave static const int identity = 1; //network config static const char* master_ip = "192.168.1.101"; static const char* slave_ip = "192.168.1.102"; static const char* MASK = "255.255.255.0"; static const char* GATEWAY = "192.168.1.1"; static const int port = 865; //declaration of interfaces DigitalOut led(LED_GREEN); DigitalOut led2(LED_RED); EthernetInterface eth; //network Serial pc(USBTX, USBRX);//create PC interface UDPSocket socket; //socket to receive data on Endpoint client; //The virtual other side, not to send actual information to Endpoint counterpart; //The actual other side, this is where the information should go to Ticker mainloop; QEI M1(D3,D2,NC,1024,QEI::X4_ENCODING); //variables char data[30]= {""}; int size; int counter = 1; int counter_received = 1; char * var; char output[30] = {""}; float input = 0.1545; bool main_loop_check = 0; const float looptime = 1.0/50; //50Hz float angle = 0.0; const float PI = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679; const float RadsPerCount = (2 * PI)/(1024); int frequency_pwm = 10000; //functions to be used void init_eth(void); void inet_USB(void); void end_eth(void); void mainlooptrigger(void); int main(void); void inet_eth(){ if(identity==1) { eth.init(master_ip, MASK,GATEWAY); eth.connect(); socket.bind(port); counterpart.set_address(slave_ip,port); } else if(identity==0) { eth.init(slave_ip, MASK,GATEWAY); eth.connect(); socket.bind(port); counterpart.set_address(master_ip,port); } } void inet_USB(){ pc.baud(9600); } void end_eth(){ socket.close(); eth.disconnect(); } void mainlooptrigger() { main_loop_check = 1; } void receiveUDP(void const *argument){ while(true){ size = socket.receiveFrom(client, data, sizeof(data)); if(size > 0){ data[size] = '\0'; //pc.printf("data: %s \n\r",data); var = strtok(data,";- "); counter_received = atof(var); var = strtok(NULL,";- "); input = atof(var); } } } osThreadDef(receiveUDP, osPriorityNormal, DEFAULT_STACK_SIZE); int main(){ inet_eth(); inet_USB(); osThreadCreate(osThread(receiveUDP), NULL); led2=1; led=1; mainloop.attach(&mainlooptrigger,looptime); while(true){ if(main_loop_check==1){ angle = M1.getPulses()*RadsPerCount; //pc.printf("\nSERVER - Server IP Address is %s\r\n", eth.getIPAddress()); sprintf(output, "%i;%f",counter,angle); //pc.printf("sending %s\r\n",output); //pc.printf("\nSERVER - Server IP Address is %s\r\n", eth.getIPAddress()); socket.sendTo(counterpart, output, sizeof(output)); pc.printf("angle: %f\r\n", angle); counter = counter + 1; led=!led; main_loop_check = 0; } osDelay(1); } }