project met UDP IP

Dependencies:   EthernetInterface LM75B mbed-rtos mbed

Fork of communication by Jelle Raes

Committer:
JelleRaes
Date:
Tue Mar 13 10:31:27 2018 +0000
Revision:
1:550192b4ae8e
Parent:
0:52e944ca21ea
Child:
2:067142778937
versie met afgewerkt ACK response;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JelleRaes 0:52e944ca21ea 1 #include "mbed.h"
JelleRaes 0:52e944ca21ea 2 #include "slave.h"
JelleRaes 0:52e944ca21ea 3 #include "C12832A1Z.h"
JelleRaes 0:52e944ca21ea 4 #include "led.h"
JelleRaes 0:52e944ca21ea 5 #include "LM75B.h"
JelleRaes 0:52e944ca21ea 6 #include <string.h>
JelleRaes 0:52e944ca21ea 7 #include "EthernetInterface.h"
JelleRaes 0:52e944ca21ea 8
JelleRaes 0:52e944ca21ea 9 LM75B sensor(p28,p27);
JelleRaes 0:52e944ca21ea 10 Serial slavepc(USBTX, USBRX);
JelleRaes 0:52e944ca21ea 11 led mijnobject;
JelleRaes 0:52e944ca21ea 12 C12832A1Z slaveLCD(p5, p7, p6, p8, p11);
JelleRaes 0:52e944ca21ea 13
JelleRaes 0:52e944ca21ea 14 PwmOut r(p23);
JelleRaes 0:52e944ca21ea 15 PwmOut g(p24);
JelleRaes 0:52e944ca21ea 16 PwmOut b(p25);
JelleRaes 0:52e944ca21ea 17
JelleRaes 0:52e944ca21ea 18 AnalogIn p1(p19);
JelleRaes 0:52e944ca21ea 19 AnalogIn p2(p20);
JelleRaes 0:52e944ca21ea 20
JelleRaes 0:52e944ca21ea 21 PwmOut spkr(p26);
JelleRaes 0:52e944ca21ea 22
JelleRaes 0:52e944ca21ea 23 float freq[]={0,110,110,110,98,130,110,98,130,110,165,165,165,175,130,104,98,130};
JelleRaes 0:52e944ca21ea 24 float length[]={0,480,480,480,360,120,480,360,120,960,480,480,480,360,120,480,360,120};
JelleRaes 0:52e944ca21ea 25 float delay[]={0,100,100,100,75,100,100,75,100,100,100,100,100,75,100,100,75,100};
JelleRaes 0:52e944ca21ea 26
JelleRaes 0:52e944ca21ea 27 void startSlave(const char *ip){
JelleRaes 0:52e944ca21ea 28 EthernetInterface eth;
JelleRaes 0:52e944ca21ea 29 eth.init(ip, "255.255.255.0", "192.168.0.1");
JelleRaes 0:52e944ca21ea 30 eth.connect();
JelleRaes 0:52e944ca21ea 31 slavepc.printf("ip = %s\n\r",eth.getIPAddress());
JelleRaes 0:52e944ca21ea 32 slavepc.printf("gateway = %s\n\r",eth.getGateway());
JelleRaes 0:52e944ca21ea 33 slavepc.printf("mask = %s\n\r",eth.getNetworkMask());
JelleRaes 0:52e944ca21ea 34
JelleRaes 0:52e944ca21ea 35 UDPSocket server;
JelleRaes 0:52e944ca21ea 36 server.bind(4000);
JelleRaes 0:52e944ca21ea 37
JelleRaes 0:52e944ca21ea 38 Endpoint client;
JelleRaes 0:52e944ca21ea 39
JelleRaes 0:52e944ca21ea 40 while (true){
JelleRaes 0:52e944ca21ea 41 char slaveBuffer[512]={NULL};
JelleRaes 1:550192b4ae8e 42 slavepc.printf("\n\rWaiting for UDP packet...\n\r");
JelleRaes 0:52e944ca21ea 43 int n = server.receiveFrom(client, slaveBuffer, sizeof(slaveBuffer));
JelleRaes 0:52e944ca21ea 44 slaveBuffer[n] = '\0';
JelleRaes 0:52e944ca21ea 45
JelleRaes 0:52e944ca21ea 46 slavepc.printf("Received packet from: %s\n\r", client.get_address());
JelleRaes 0:52e944ca21ea 47 slavepc.printf("Packet contents : '%s'\n\r",slaveBuffer);
JelleRaes 0:52e944ca21ea 48
JelleRaes 0:52e944ca21ea 49 slavepc.printf("Sending Packet back to Client\n\r");
JelleRaes 1:550192b4ae8e 50 server.sendTo(client, getResponse(slaveBuffer,eth.getIPAddress()), 512);
JelleRaes 0:52e944ca21ea 51 }
JelleRaes 0:52e944ca21ea 52 }
JelleRaes 1:550192b4ae8e 53 char *getResponse(const char *buffer,const char *ip){
JelleRaes 0:52e944ca21ea 54 char *request = strtok((char*)buffer," ");//{buffer[0],buffer[1],buffer[2],'\0'};
JelleRaes 0:52e944ca21ea 55 char *resource = strtok(NULL," ");
JelleRaes 1:550192b4ae8e 56 slavepc.printf("\n\rresource =%s\n\r",resource);
JelleRaes 0:52e944ca21ea 57 if(strcmp(request,"GET")==0){
JelleRaes 0:52e944ca21ea 58 if(strcmp(resource,"/TEMPERATURE")==0){
JelleRaes 1:550192b4ae8e 59 char tempbuffer[512];
JelleRaes 1:550192b4ae8e 60 sprintf(tempbuffer,"ACK 2.05 %14s %9f", ip, getTemp());
JelleRaes 1:550192b4ae8e 61 slavepc.printf("%s\n\r",tempbuffer);
JelleRaes 0:52e944ca21ea 62 return tempbuffer;
JelleRaes 0:52e944ca21ea 63 }
JelleRaes 0:52e944ca21ea 64 else if(strcmp(resource,"/POTENTIOMETER")==0){
JelleRaes 1:550192b4ae8e 65 char tempbuffer[512];
JelleRaes 0:52e944ca21ea 66 slavepc.printf("%f",getPot());
JelleRaes 1:550192b4ae8e 67 sprintf(tempbuffer,"ACK 2.05 %14s %3d", ip,int(255* getPot()));
JelleRaes 1:550192b4ae8e 68 slavepc.printf("%s\n\r",tempbuffer);
JelleRaes 0:52e944ca21ea 69 return tempbuffer;
JelleRaes 0:52e944ca21ea 70 }
JelleRaes 0:52e944ca21ea 71 else{
JelleRaes 1:550192b4ae8e 72 char tempbuffer[512];
JelleRaes 1:550192b4ae8e 73 sprintf(tempbuffer,"ACK 2.04 %14s",ip);
JelleRaes 1:550192b4ae8e 74 return tempbuffer;
JelleRaes 0:52e944ca21ea 75 }
JelleRaes 0:52e944ca21ea 76 }
JelleRaes 0:52e944ca21ea 77 else if(strcmp(request,"PUT")==0){
JelleRaes 0:52e944ca21ea 78 if(strcmp(resource,"/BUZZER")==0){
JelleRaes 0:52e944ca21ea 79 char *eerste = strtok(NULL," -");
JelleRaes 0:52e944ca21ea 80 char *tweede = strtok(NULL," -");
JelleRaes 0:52e944ca21ea 81 int first = atoi(eerste);
JelleRaes 0:52e944ca21ea 82 int last = atoi(tweede);
JelleRaes 0:52e944ca21ea 83 putBuzzer(first,last);
JelleRaes 1:550192b4ae8e 84 char tempbuffer[512];
JelleRaes 1:550192b4ae8e 85 sprintf(tempbuffer,"ACK 2.04 %14s",ip);
JelleRaes 1:550192b4ae8e 86 return tempbuffer;
JelleRaes 0:52e944ca21ea 87 }
JelleRaes 0:52e944ca21ea 88 else if(strcmp(resource,"/LED")==0){
JelleRaes 0:52e944ca21ea 89 putLED(strtok(NULL,'\0'));
JelleRaes 1:550192b4ae8e 90 char tempbuffer[512];
JelleRaes 1:550192b4ae8e 91 sprintf(tempbuffer,"ACK 2.04 %14s",ip);
JelleRaes 1:550192b4ae8e 92 return tempbuffer;
JelleRaes 0:52e944ca21ea 93 }
JelleRaes 0:52e944ca21ea 94 else if(strcmp(resource,"/LCD")==0){
JelleRaes 0:52e944ca21ea 95 putLCD(strtok(NULL,'\0'));
JelleRaes 1:550192b4ae8e 96 char tempbuffer[512];
JelleRaes 1:550192b4ae8e 97 sprintf(tempbuffer,"ACK 2.04 %14s",ip);
JelleRaes 1:550192b4ae8e 98 return tempbuffer;
JelleRaes 0:52e944ca21ea 99 }
JelleRaes 0:52e944ca21ea 100 else{
JelleRaes 1:550192b4ae8e 101 char tempbuffer[512];
JelleRaes 1:550192b4ae8e 102 sprintf(tempbuffer,"ACK 4.00 %14s",ip);
JelleRaes 1:550192b4ae8e 103 return tempbuffer;
JelleRaes 0:52e944ca21ea 104 }
JelleRaes 0:52e944ca21ea 105 }
JelleRaes 0:52e944ca21ea 106 else{
JelleRaes 1:550192b4ae8e 107 char tempbuffer[512];
JelleRaes 1:550192b4ae8e 108 sprintf(tempbuffer,"ACK 4.00 %14s",ip);
JelleRaes 1:550192b4ae8e 109 return tempbuffer;
JelleRaes 0:52e944ca21ea 110 }
JelleRaes 0:52e944ca21ea 111 }
JelleRaes 0:52e944ca21ea 112
JelleRaes 0:52e944ca21ea 113
JelleRaes 0:52e944ca21ea 114
JelleRaes 0:52e944ca21ea 115
JelleRaes 0:52e944ca21ea 116
JelleRaes 0:52e944ca21ea 117 float getTemp(){
JelleRaes 0:52e944ca21ea 118 return sensor.read();
JelleRaes 0:52e944ca21ea 119 }
JelleRaes 0:52e944ca21ea 120
JelleRaes 0:52e944ca21ea 121 float getPot(){
JelleRaes 0:52e944ca21ea 122 return p1.read();
JelleRaes 0:52e944ca21ea 123 }
JelleRaes 0:52e944ca21ea 124
JelleRaes 0:52e944ca21ea 125 void putLCD(char *str){
JelleRaes 0:52e944ca21ea 126 slaveLCD.printf("%s",str);
JelleRaes 0:52e944ca21ea 127 }
JelleRaes 0:52e944ca21ea 128
JelleRaes 0:52e944ca21ea 129 void putLED(char *color){
JelleRaes 0:52e944ca21ea 130 r=mijnobject.getCOLOR(color).redValue;
JelleRaes 0:52e944ca21ea 131 g=mijnobject.getCOLOR(color).greenValue;
JelleRaes 0:52e944ca21ea 132 b=mijnobject.getCOLOR(color).blueValue;
JelleRaes 0:52e944ca21ea 133 }
JelleRaes 0:52e944ca21ea 134
JelleRaes 0:52e944ca21ea 135 void putLED(float red, float green, float blue){
JelleRaes 0:52e944ca21ea 136 r= red;
JelleRaes 0:52e944ca21ea 137 g= green;
JelleRaes 0:52e944ca21ea 138 b= blue;
JelleRaes 0:52e944ca21ea 139 }
JelleRaes 0:52e944ca21ea 140
JelleRaes 0:52e944ca21ea 141 void putBuzzer(int start,int einde){
JelleRaes 0:52e944ca21ea 142 for(start; start<einde+1;++start){
JelleRaes 0:52e944ca21ea 143 spkr.period(1/freq[start]);
JelleRaes 0:52e944ca21ea 144 spkr=0.5;
JelleRaes 0:52e944ca21ea 145 wait(length[start]/1000);
JelleRaes 0:52e944ca21ea 146 spkr=0;
JelleRaes 0:52e944ca21ea 147 wait(delay[start]/1000);
JelleRaes 0:52e944ca21ea 148 }
JelleRaes 0:52e944ca21ea 149 }