project met UDP IP
Dependencies: EthernetInterface LM75B mbed-rtos mbed
Fork of communication by
slave.cpp
- Committer:
- JelleRaes
- Date:
- 2018-03-13
- Revision:
- 2:067142778937
- Parent:
- 1:550192b4ae8e
- Child:
- 3:9c600fb19ed2
File content as of revision 2:067142778937:
#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("\n\rWaiting 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,eth.getIPAddress()), 512); } } char *getResponse(const char *buffer,const char *ip){ char *request = strtok((char*)buffer," ");//{buffer[0],buffer[1],buffer[2],'\0'}; char *resource = strtok(NULL," "); slavepc.printf("\n\rresource =%s\n\r",resource); if(strcmp(request,"GET")==0){ if(strcmp(resource,"/TEMPERATURE")==0){ char tempbuffer[512]; sprintf(tempbuffer,"ACK 2.05 %14s %3.3f", ip, getTemp()); slavepc.printf("%s\n\r",tempbuffer); return tempbuffer; } else if(strcmp(resource,"/POTENTIOMETER")==0){ char tempbuffer[512]; slavepc.printf("%f",getPot()); sprintf(tempbuffer,"ACK 2.05 %14s %3d", ip,int(255* getPot())); slavepc.printf("%s\n\r",tempbuffer); return tempbuffer; } else{ char tempbuffer[512]; sprintf(tempbuffer,"ACK 4.00 %14s",ip); return tempbuffer; } } else if(strcmp(request,"PUT")==0){ if(strcmp(resource,"/BUZZER")==0){ putBuzzer(atoi(strtok(NULL," -")),atoi(strtok(NULL," -"))); char tempbuffer[512]; sprintf(tempbuffer,"ACK 2.04 %14s",ip); return tempbuffer; } else if(strcmp(resource,"/LED")==0){ putLED(strtok(NULL,'\0')); char tempbuffer[512]; sprintf(tempbuffer,"ACK 2.04 %14s",ip); return tempbuffer; } else if(strcmp(resource,"/LCD")==0){ putLCD(strtok(NULL,'\0')); char tempbuffer[512]; sprintf(tempbuffer,"ACK 2.04 %14s",ip); return tempbuffer; } else{ char tempbuffer[512]; sprintf(tempbuffer,"ACK 4.00 %14s",ip); return tempbuffer; } } else{ char tempbuffer[512]; sprintf(tempbuffer,"ACK 4.00 %14s",ip); return tempbuffer; } } 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); } }