project met UDP IP
Dependencies: EthernetInterface LM75B mbed-rtos mbed
Fork of communication by
Diff: slave.cpp
- Revision:
- 0:52e944ca21ea
- Child:
- 1:550192b4ae8e
diff -r 000000000000 -r 52e944ca21ea slave.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slave.cpp Tue Mar 13 09:40:51 2018 +0000 @@ -0,0 +1,137 @@ +#include "mbed.h" +#include "slave.h" +#include "C12832A1Z.h" +#include "led.h" +#include "LM75B.h" +#include <string.h> +#include "EthernetInterface.h" + +LM75B sensor(p28,p27); +Serial slavepc(USBTX, USBRX); +led mijnobject; +C12832A1Z slaveLCD(p5, p7, p6, p8, p11); + +PwmOut r(p23); +PwmOut g(p24); +PwmOut b(p25); + +AnalogIn p1(p19); +AnalogIn p2(p20); + +PwmOut spkr(p26); + +float freq[]={0,110,110,110,98,130,110,98,130,110,165,165,165,175,130,104,98,130}; +float length[]={0,480,480,480,360,120,480,360,120,960,480,480,480,360,120,480,360,120}; +float delay[]={0,100,100,100,75,100,100,75,100,100,100,100,100,75,100,100,75,100}; + +void startSlave(const char *ip){ + EthernetInterface eth; + eth.init(ip, "255.255.255.0", "192.168.0.1"); + eth.connect(); + slavepc.printf("ip = %s\n\r",eth.getIPAddress()); + slavepc.printf("gateway = %s\n\r",eth.getGateway()); + slavepc.printf("mask = %s\n\r",eth.getNetworkMask()); + + UDPSocket server; + server.bind(4000); + + Endpoint client; + + while (true){ + char slaveBuffer[512]={NULL}; + slavepc.printf("\nWaiting for UDP packet...\n\r"); + int n = server.receiveFrom(client, slaveBuffer, sizeof(slaveBuffer)); + slaveBuffer[n] = '\0'; + + slavepc.printf("Received packet from: %s\n\r", client.get_address()); + slavepc.printf("Packet contents : '%s'\n\r",slaveBuffer); + + slavepc.printf("Sending Packet back to Client\n\r"); + server.sendTo(client, getResponse(slaveBuffer), 20); + } +} +char *getResponse(const char *buffer){ + char *request = strtok((char*)buffer," ");//{buffer[0],buffer[1],buffer[2],'\0'}; + char *resource = strtok(NULL," "); + slavepc.printf("resource =%s",resource); + if(strcmp(request,"GET")==0){ + if(strcmp(resource,"/TEMPERATURE")==0){ + char *tempbuffer; + sprintf(tempbuffer,"okditisdom%9f",getTemp()); + slavepc.printf("%s",tempbuffer); + return tempbuffer; + } + else if(strcmp(resource,"/POTENTIOMETER")==0){ + char *tempbuffer; + slavepc.printf("%f",getPot()); + sprintf(tempbuffer,"potwaarde%9f",getPot()); + slavepc.printf("%s",tempbuffer); + return tempbuffer; + } + else{ + return "get request failed"; + } + } + else if(strcmp(request,"PUT")==0){ + if(strcmp(resource,"/BUZZER")==0){ + char *eerste = strtok(NULL," -"); + char *tweede = strtok(NULL," -"); + int first = atoi(eerste); + int last = atoi(tweede); + putBuzzer(first,last); + return "put buz request received"; + } + else if(strcmp(resource,"/LED")==0){ + putLED(strtok(NULL,'\0')); + return "put led request received"; + } + else if(strcmp(resource,"/LCD")==0){ + putLCD(strtok(NULL,'\0')); + return "put lcd request received"; + } + else{ + return "put request failed"; + } + } + else{ + return "failed"; + } +} + + + + + +float getTemp(){ + return sensor.read(); +} + +float getPot(){ + return p1.read(); +} + +void putLCD(char *str){ + slaveLCD.printf("%s",str); +} + +void putLED(char *color){ + r=mijnobject.getCOLOR(color).redValue; + g=mijnobject.getCOLOR(color).greenValue; + b=mijnobject.getCOLOR(color).blueValue; +} + +void putLED(float red, float green, float blue){ + r= red; + g= green; + b= blue; +} + +void putBuzzer(int start,int einde){ + for(start; start<einde+1;++start){ + spkr.period(1/freq[start]); + spkr=0.5; + wait(length[start]/1000); + spkr=0; + wait(delay[start]/1000); + } +}