Dependencies: EthernetInterface FastPWM mbed-rtos mbed MODSERIAL
main.cpp@1:853939e38acd, 2018-05-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |