project met UDP IP

Dependencies:   EthernetInterface LM75B mbed-rtos mbed

Fork of communication by Jelle Raes

Revision:
0:52e944ca21ea
Child:
1:550192b4ae8e
--- /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);
+    } 
+}