project met UDP IP

Dependencies:   EthernetInterface LM75B mbed-rtos mbed

Fork of communication by Jelle Raes

slave.cpp

Committer:
JelleRaes
Date:
2018-03-13
Revision:
0:52e944ca21ea
Child:
1:550192b4ae8e

File content as of revision 0:52e944ca21ea:

#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);
    } 
}