Dependencies:   EthernetInterface FastPWM mbed-rtos mbed MODSERIAL

Committer:
darth_bachious
Date:
Mon May 07 14:49:57 2018 +0000
Revision:
1:853939e38acd
Parent:
0:2f89dec3e2ab
Child:
2:c27b0654cffd
Communications between controllers working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
darth_bachious 0:2f89dec3e2ab 1 #include "mbed.h"
darth_bachious 0:2f89dec3e2ab 2 #include "EthernetInterface.h"
darth_bachious 0:2f89dec3e2ab 3 #include "rtos.h"
darth_bachious 0:2f89dec3e2ab 4 #include "QEI.h"
darth_bachious 0:2f89dec3e2ab 5
darth_bachious 1:853939e38acd 6 //Master or Slave? 1=Master, 0=Slave
darth_bachious 1:853939e38acd 7 static const int identity = 1;
darth_bachious 0:2f89dec3e2ab 8
darth_bachious 0:2f89dec3e2ab 9 //network config
darth_bachious 1:853939e38acd 10 static const char* master_ip = "192.168.1.101";
darth_bachious 1:853939e38acd 11 static const char* slave_ip = "192.168.1.102";
darth_bachious 1:853939e38acd 12 static const char* MASK = "255.255.255.0";
darth_bachious 1:853939e38acd 13 static const char* GATEWAY = "192.168.1.1";
darth_bachious 0:2f89dec3e2ab 14 static const int port = 865;
darth_bachious 0:2f89dec3e2ab 15
darth_bachious 0:2f89dec3e2ab 16 //declaration of interfaces
darth_bachious 0:2f89dec3e2ab 17
darth_bachious 0:2f89dec3e2ab 18 DigitalOut led(LED_GREEN);
darth_bachious 0:2f89dec3e2ab 19 DigitalOut led2(LED_RED);
darth_bachious 0:2f89dec3e2ab 20 EthernetInterface eth; //network
darth_bachious 0:2f89dec3e2ab 21 Serial pc(USBTX, USBRX);//create PC interface
darth_bachious 0:2f89dec3e2ab 22 UDPSocket socket; //socket to receive data on
darth_bachious 0:2f89dec3e2ab 23 Endpoint client; //The virtual other side, not to send actual information to
darth_bachious 0:2f89dec3e2ab 24 Endpoint counterpart; //The actual other side, this is where the information should go to
darth_bachious 0:2f89dec3e2ab 25 Ticker mainloop;
darth_bachious 0:2f89dec3e2ab 26
darth_bachious 1:853939e38acd 27 QEI M1(D3,D2,NC,1024,QEI::X4_ENCODING);
darth_bachious 0:2f89dec3e2ab 28
darth_bachious 0:2f89dec3e2ab 29 //variables
darth_bachious 1:853939e38acd 30 char data[30]= {""};
darth_bachious 0:2f89dec3e2ab 31 int size;
darth_bachious 1:853939e38acd 32 int counter = 1;
darth_bachious 1:853939e38acd 33 int counter_received = 1;
darth_bachious 0:2f89dec3e2ab 34 char * var;
darth_bachious 1:853939e38acd 35 char output[30] = {""};
darth_bachious 1:853939e38acd 36 float input = 0.1545;
darth_bachious 0:2f89dec3e2ab 37 bool main_loop_check = 0;
darth_bachious 0:2f89dec3e2ab 38 const float looptime = 1.0/50; //50Hz
darth_bachious 0:2f89dec3e2ab 39 float angle = 0.0;
darth_bachious 0:2f89dec3e2ab 40
darth_bachious 0:2f89dec3e2ab 41 const float PI = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
darth_bachious 1:853939e38acd 42 const float RadsPerCount = (2 * PI)/(1024);
darth_bachious 0:2f89dec3e2ab 43 int frequency_pwm = 10000;
darth_bachious 0:2f89dec3e2ab 44
darth_bachious 0:2f89dec3e2ab 45 //functions to be used
darth_bachious 0:2f89dec3e2ab 46 void init_eth(void);
darth_bachious 0:2f89dec3e2ab 47 void inet_USB(void);
darth_bachious 0:2f89dec3e2ab 48 void end_eth(void);
darth_bachious 0:2f89dec3e2ab 49 void mainlooptrigger(void);
darth_bachious 0:2f89dec3e2ab 50 int main(void);
darth_bachious 0:2f89dec3e2ab 51
darth_bachious 0:2f89dec3e2ab 52 void inet_eth(){
darth_bachious 1:853939e38acd 53 if(identity==1)
darth_bachious 1:853939e38acd 54 {
darth_bachious 1:853939e38acd 55 eth.init(master_ip, MASK,GATEWAY);
darth_bachious 1:853939e38acd 56 eth.connect();
darth_bachious 0:2f89dec3e2ab 57
darth_bachious 1:853939e38acd 58 socket.bind(port);
darth_bachious 1:853939e38acd 59 counterpart.set_address(slave_ip,port);
darth_bachious 1:853939e38acd 60 }
darth_bachious 1:853939e38acd 61 else if(identity==0)
darth_bachious 1:853939e38acd 62 {
darth_bachious 1:853939e38acd 63 eth.init(slave_ip, MASK,GATEWAY);
darth_bachious 1:853939e38acd 64 eth.connect();
darth_bachious 1:853939e38acd 65
darth_bachious 1:853939e38acd 66 socket.bind(port);
darth_bachious 1:853939e38acd 67 counterpart.set_address(master_ip,port);
darth_bachious 1:853939e38acd 68 }
darth_bachious 1:853939e38acd 69
darth_bachious 0:2f89dec3e2ab 70 }
darth_bachious 0:2f89dec3e2ab 71
darth_bachious 0:2f89dec3e2ab 72 void inet_USB(){
darth_bachious 0:2f89dec3e2ab 73 pc.baud(9600);
darth_bachious 0:2f89dec3e2ab 74 }
darth_bachious 0:2f89dec3e2ab 75
darth_bachious 0:2f89dec3e2ab 76
darth_bachious 0:2f89dec3e2ab 77 void end_eth(){
darth_bachious 0:2f89dec3e2ab 78 socket.close();
darth_bachious 0:2f89dec3e2ab 79 eth.disconnect();
darth_bachious 0:2f89dec3e2ab 80 }
darth_bachious 0:2f89dec3e2ab 81
darth_bachious 0:2f89dec3e2ab 82 void mainlooptrigger()
darth_bachious 0:2f89dec3e2ab 83 {
darth_bachious 0:2f89dec3e2ab 84 main_loop_check = 1;
darth_bachious 0:2f89dec3e2ab 85 }
darth_bachious 0:2f89dec3e2ab 86
darth_bachious 0:2f89dec3e2ab 87 void receiveUDP(void const *argument){
darth_bachious 0:2f89dec3e2ab 88 while(true){
darth_bachious 0:2f89dec3e2ab 89 size = socket.receiveFrom(client, data, sizeof(data));
darth_bachious 0:2f89dec3e2ab 90 if(size > 0){
darth_bachious 0:2f89dec3e2ab 91 data[size] = '\0';
darth_bachious 1:853939e38acd 92 //pc.printf("data: %s \n\r",data);
darth_bachious 1:853939e38acd 93 var = strtok(data,";- ");
darth_bachious 1:853939e38acd 94 counter_received = atof(var);
darth_bachious 1:853939e38acd 95 var = strtok(NULL,";- ");
darth_bachious 1:853939e38acd 96 input = atof(var);
darth_bachious 0:2f89dec3e2ab 97 }
darth_bachious 0:2f89dec3e2ab 98 }
darth_bachious 0:2f89dec3e2ab 99 }
darth_bachious 0:2f89dec3e2ab 100
darth_bachious 0:2f89dec3e2ab 101 osThreadDef(receiveUDP, osPriorityNormal, DEFAULT_STACK_SIZE);
darth_bachious 0:2f89dec3e2ab 102
darth_bachious 0:2f89dec3e2ab 103 int main(){
darth_bachious 1:853939e38acd 104 inet_eth();
darth_bachious 0:2f89dec3e2ab 105 inet_USB();
darth_bachious 0:2f89dec3e2ab 106
darth_bachious 0:2f89dec3e2ab 107 osThreadCreate(osThread(receiveUDP), NULL);
darth_bachious 0:2f89dec3e2ab 108 led2=1;
darth_bachious 0:2f89dec3e2ab 109 led=1;
darth_bachious 0:2f89dec3e2ab 110 mainloop.attach(&mainlooptrigger,looptime);
darth_bachious 0:2f89dec3e2ab 111
darth_bachious 0:2f89dec3e2ab 112 while(true){
darth_bachious 0:2f89dec3e2ab 113
darth_bachious 0:2f89dec3e2ab 114 if(main_loop_check==1){
darth_bachious 1:853939e38acd 115 angle = M1.getPulses()*RadsPerCount;
darth_bachious 0:2f89dec3e2ab 116 //pc.printf("\nSERVER - Server IP Address is %s\r\n", eth.getIPAddress());
darth_bachious 1:853939e38acd 117 sprintf(output, "%i;%f",counter,angle);
darth_bachious 1:853939e38acd 118 //pc.printf("sending %s\r\n",output);
darth_bachious 1:853939e38acd 119 //pc.printf("\nSERVER - Server IP Address is %s\r\n", eth.getIPAddress());
darth_bachious 1:853939e38acd 120 socket.sendTo(counterpart, output, sizeof(output));
darth_bachious 0:2f89dec3e2ab 121 pc.printf("angle: %f\r\n", angle);
darth_bachious 1:853939e38acd 122 counter = counter + 1;
darth_bachious 0:2f89dec3e2ab 123 led=!led;
darth_bachious 0:2f89dec3e2ab 124 main_loop_check = 0;
darth_bachious 0:2f89dec3e2ab 125 }
darth_bachious 0:2f89dec3e2ab 126 osDelay(1);
darth_bachious 0:2f89dec3e2ab 127 }
darth_bachious 0:2f89dec3e2ab 128 }