project met UDP IP
Dependencies: EthernetInterface LM75B mbed-rtos mbed
Fork of communication by
slave.cpp@0:52e944ca21ea, 2018-03-13 (annotated)
- Committer:
- JelleRaes
- Date:
- Tue Mar 13 09:40:51 2018 +0000
- Revision:
- 0:52e944ca21ea
- Child:
- 1:550192b4ae8e
voorlopig beste versie;
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 | 0:52e944ca21ea | 42 | slavepc.printf("\nWaiting 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 | 0:52e944ca21ea | 50 | server.sendTo(client, getResponse(slaveBuffer), 20); |
JelleRaes | 0:52e944ca21ea | 51 | } |
JelleRaes | 0:52e944ca21ea | 52 | } |
JelleRaes | 0:52e944ca21ea | 53 | char *getResponse(const char *buffer){ |
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 | 0:52e944ca21ea | 56 | slavepc.printf("resource =%s",resource); |
JelleRaes | 0:52e944ca21ea | 57 | if(strcmp(request,"GET")==0){ |
JelleRaes | 0:52e944ca21ea | 58 | if(strcmp(resource,"/TEMPERATURE")==0){ |
JelleRaes | 0:52e944ca21ea | 59 | char *tempbuffer; |
JelleRaes | 0:52e944ca21ea | 60 | sprintf(tempbuffer,"okditisdom%9f",getTemp()); |
JelleRaes | 0:52e944ca21ea | 61 | slavepc.printf("%s",tempbuffer); |
JelleRaes | 0:52e944ca21ea | 62 | return tempbuffer; |
JelleRaes | 0:52e944ca21ea | 63 | } |
JelleRaes | 0:52e944ca21ea | 64 | else if(strcmp(resource,"/POTENTIOMETER")==0){ |
JelleRaes | 0:52e944ca21ea | 65 | char *tempbuffer; |
JelleRaes | 0:52e944ca21ea | 66 | slavepc.printf("%f",getPot()); |
JelleRaes | 0:52e944ca21ea | 67 | sprintf(tempbuffer,"potwaarde%9f",getPot()); |
JelleRaes | 0:52e944ca21ea | 68 | slavepc.printf("%s",tempbuffer); |
JelleRaes | 0:52e944ca21ea | 69 | return tempbuffer; |
JelleRaes | 0:52e944ca21ea | 70 | } |
JelleRaes | 0:52e944ca21ea | 71 | else{ |
JelleRaes | 0:52e944ca21ea | 72 | return "get request failed"; |
JelleRaes | 0:52e944ca21ea | 73 | } |
JelleRaes | 0:52e944ca21ea | 74 | } |
JelleRaes | 0:52e944ca21ea | 75 | else if(strcmp(request,"PUT")==0){ |
JelleRaes | 0:52e944ca21ea | 76 | if(strcmp(resource,"/BUZZER")==0){ |
JelleRaes | 0:52e944ca21ea | 77 | char *eerste = strtok(NULL," -"); |
JelleRaes | 0:52e944ca21ea | 78 | char *tweede = strtok(NULL," -"); |
JelleRaes | 0:52e944ca21ea | 79 | int first = atoi(eerste); |
JelleRaes | 0:52e944ca21ea | 80 | int last = atoi(tweede); |
JelleRaes | 0:52e944ca21ea | 81 | putBuzzer(first,last); |
JelleRaes | 0:52e944ca21ea | 82 | return "put buz request received"; |
JelleRaes | 0:52e944ca21ea | 83 | } |
JelleRaes | 0:52e944ca21ea | 84 | else if(strcmp(resource,"/LED")==0){ |
JelleRaes | 0:52e944ca21ea | 85 | putLED(strtok(NULL,'\0')); |
JelleRaes | 0:52e944ca21ea | 86 | return "put led request received"; |
JelleRaes | 0:52e944ca21ea | 87 | } |
JelleRaes | 0:52e944ca21ea | 88 | else if(strcmp(resource,"/LCD")==0){ |
JelleRaes | 0:52e944ca21ea | 89 | putLCD(strtok(NULL,'\0')); |
JelleRaes | 0:52e944ca21ea | 90 | return "put lcd request received"; |
JelleRaes | 0:52e944ca21ea | 91 | } |
JelleRaes | 0:52e944ca21ea | 92 | else{ |
JelleRaes | 0:52e944ca21ea | 93 | return "put request failed"; |
JelleRaes | 0:52e944ca21ea | 94 | } |
JelleRaes | 0:52e944ca21ea | 95 | } |
JelleRaes | 0:52e944ca21ea | 96 | else{ |
JelleRaes | 0:52e944ca21ea | 97 | return "failed"; |
JelleRaes | 0:52e944ca21ea | 98 | } |
JelleRaes | 0:52e944ca21ea | 99 | } |
JelleRaes | 0:52e944ca21ea | 100 | |
JelleRaes | 0:52e944ca21ea | 101 | |
JelleRaes | 0:52e944ca21ea | 102 | |
JelleRaes | 0:52e944ca21ea | 103 | |
JelleRaes | 0:52e944ca21ea | 104 | |
JelleRaes | 0:52e944ca21ea | 105 | float getTemp(){ |
JelleRaes | 0:52e944ca21ea | 106 | return sensor.read(); |
JelleRaes | 0:52e944ca21ea | 107 | } |
JelleRaes | 0:52e944ca21ea | 108 | |
JelleRaes | 0:52e944ca21ea | 109 | float getPot(){ |
JelleRaes | 0:52e944ca21ea | 110 | return p1.read(); |
JelleRaes | 0:52e944ca21ea | 111 | } |
JelleRaes | 0:52e944ca21ea | 112 | |
JelleRaes | 0:52e944ca21ea | 113 | void putLCD(char *str){ |
JelleRaes | 0:52e944ca21ea | 114 | slaveLCD.printf("%s",str); |
JelleRaes | 0:52e944ca21ea | 115 | } |
JelleRaes | 0:52e944ca21ea | 116 | |
JelleRaes | 0:52e944ca21ea | 117 | void putLED(char *color){ |
JelleRaes | 0:52e944ca21ea | 118 | r=mijnobject.getCOLOR(color).redValue; |
JelleRaes | 0:52e944ca21ea | 119 | g=mijnobject.getCOLOR(color).greenValue; |
JelleRaes | 0:52e944ca21ea | 120 | b=mijnobject.getCOLOR(color).blueValue; |
JelleRaes | 0:52e944ca21ea | 121 | } |
JelleRaes | 0:52e944ca21ea | 122 | |
JelleRaes | 0:52e944ca21ea | 123 | void putLED(float red, float green, float blue){ |
JelleRaes | 0:52e944ca21ea | 124 | r= red; |
JelleRaes | 0:52e944ca21ea | 125 | g= green; |
JelleRaes | 0:52e944ca21ea | 126 | b= blue; |
JelleRaes | 0:52e944ca21ea | 127 | } |
JelleRaes | 0:52e944ca21ea | 128 | |
JelleRaes | 0:52e944ca21ea | 129 | void putBuzzer(int start,int einde){ |
JelleRaes | 0:52e944ca21ea | 130 | for(start; start<einde+1;++start){ |
JelleRaes | 0:52e944ca21ea | 131 | spkr.period(1/freq[start]); |
JelleRaes | 0:52e944ca21ea | 132 | spkr=0.5; |
JelleRaes | 0:52e944ca21ea | 133 | wait(length[start]/1000); |
JelleRaes | 0:52e944ca21ea | 134 | spkr=0; |
JelleRaes | 0:52e944ca21ea | 135 | wait(delay[start]/1000); |
JelleRaes | 0:52e944ca21ea | 136 | } |
JelleRaes | 0:52e944ca21ea | 137 | } |