project met UDP IP
Dependencies: EthernetInterface LM75B mbed-rtos mbed
Fork of communication by
slave.cpp@1:550192b4ae8e, 2018-03-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |