Robin Mechele / Mbed 2 deprecated Project_mbed

Dependencies:   EthernetInterface LM75B mbed-rtos mbed

Committer:
RobinMechele
Date:
Mon Mar 19 00:58:20 2018 +0000
Revision:
7:2de256f902c8
Parent:
3:fbf3c92f10ee
Child:
8:556a5738c2fa
Alle documentatie zit erin

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobinMechele 1:db9b9bec0133 1 #include "slave.h"
RobinMechele 1:db9b9bec0133 2
RobinMechele 7:2de256f902c8 3 #define MAX_BUFFER_SIZE 512
RobinMechele 7:2de256f902c8 4 #define PORT 4000
RobinMechele 7:2de256f902c8 5
RobinMechele 1:db9b9bec0133 6 Slave::Slave()
RobinMechele 1:db9b9bec0133 7 :answer()
RobinMechele 1:db9b9bec0133 8 {
RobinMechele 1:db9b9bec0133 9 //Constructor
RobinMechele 1:db9b9bec0133 10 }
RobinMechele 1:db9b9bec0133 11
RobinMechele 3:fbf3c92f10ee 12 void Slave::slaveRun(const char* ip, int identity)
RobinMechele 1:db9b9bec0133 13 {
RobinMechele 3:fbf3c92f10ee 14 sprintf(id,"%ld",identity);
RobinMechele 1:db9b9bec0133 15 EthernetInterface ethernet;
RobinMechele 1:db9b9bec0133 16 ethernet.init(ip,"255.255.255.0", "192.168.0.1");
RobinMechele 1:db9b9bec0133 17 ethernet.connect();
RobinMechele 7:2de256f902c8 18
RobinMechele 7:2de256f902c8 19 //printf("Your ip is: %s", ethernet.getIPAddress());
RobinMechele 1:db9b9bec0133 20
RobinMechele 1:db9b9bec0133 21 UDPSocket slave;
RobinMechele 7:2de256f902c8 22 slave.bind(PORT);
RobinMechele 1:db9b9bec0133 23 Endpoint master;
RobinMechele 1:db9b9bec0133 24
RobinMechele 1:db9b9bec0133 25 while(1){
RobinMechele 7:2de256f902c8 26 char buffer[MAX_BUFFER_SIZE] = {0};
RobinMechele 1:db9b9bec0133 27 printf("\nWaiting for UDP packet...\n\r");
RobinMechele 1:db9b9bec0133 28
RobinMechele 1:db9b9bec0133 29 int n = slave.receiveFrom(master, buffer, sizeof(buffer));
RobinMechele 1:db9b9bec0133 30 buffer[n] = '\0';
RobinMechele 1:db9b9bec0133 31
RobinMechele 1:db9b9bec0133 32 printf("Received packet from: %s\n\r", master.get_address());
RobinMechele 1:db9b9bec0133 33 printf("Received: '%s'\r\n", buffer);
RobinMechele 1:db9b9bec0133 34 actionSlave(buffer);
RobinMechele 1:db9b9bec0133 35
RobinMechele 7:2de256f902c8 36 slave.sendTo(master, answer, MAX_BUFFER_SIZE);
RobinMechele 1:db9b9bec0133 37 answerReset();
RobinMechele 1:db9b9bec0133 38 }
RobinMechele 1:db9b9bec0133 39 }
RobinMechele 1:db9b9bec0133 40
RobinMechele 7:2de256f902c8 41 void Slave::actionSlave(const char* fullbuffer){
RobinMechele 7:2de256f902c8 42 char* command = strtok((char*)fullbuffer, " ");
RobinMechele 1:db9b9bec0133 43 char* action = strtok(NULL, " ");
RobinMechele 1:db9b9bec0133 44 if(strcmp(command, "GET") == 0)
RobinMechele 1:db9b9bec0133 45 {
RobinMechele 1:db9b9bec0133 46 getRequest(action);
RobinMechele 1:db9b9bec0133 47 }
RobinMechele 2:ecc0c5c14bc1 48 else
RobinMechele 2:ecc0c5c14bc1 49 if(strcmp(command, "PUT") == 0)
RobinMechele 1:db9b9bec0133 50 {
RobinMechele 1:db9b9bec0133 51 putRequest(action);
RobinMechele 1:db9b9bec0133 52 }
RobinMechele 1:db9b9bec0133 53 else
RobinMechele 1:db9b9bec0133 54 {
RobinMechele 3:fbf3c92f10ee 55 answerAppend("ACK 4.0 ");
RobinMechele 3:fbf3c92f10ee 56 answerAppend(id);
RobinMechele 1:db9b9bec0133 57 }
RobinMechele 1:db9b9bec0133 58 }
RobinMechele 1:db9b9bec0133 59
RobinMechele 1:db9b9bec0133 60 void Slave::getRequest(char* action)
RobinMechele 1:db9b9bec0133 61 {
RobinMechele 1:db9b9bec0133 62 char temp[8];
RobinMechele 1:db9b9bec0133 63 if(strcmp(action, "/temperature") == 0)
RobinMechele 1:db9b9bec0133 64 {
RobinMechele 1:db9b9bec0133 65 sprintf(temp, "%.3f", temperature.getTemperature());
RobinMechele 3:fbf3c92f10ee 66 answerAppend("ACK 2.05 ");
RobinMechele 3:fbf3c92f10ee 67 answerAppend(id);
RobinMechele 3:fbf3c92f10ee 68 answerAppend(" ");
RobinMechele 1:db9b9bec0133 69 answerAppend(temp);
RobinMechele 1:db9b9bec0133 70 }
RobinMechele 1:db9b9bec0133 71 else
RobinMechele 1:db9b9bec0133 72 if(strcmp(action, "/potentiometer") == 0)
RobinMechele 1:db9b9bec0133 73 {
RobinMechele 1:db9b9bec0133 74 sprintf(temp, "%.0f", potentiometer.getPotentiometer()*255);
RobinMechele 3:fbf3c92f10ee 75 answerAppend("ACK 2.05 ");
RobinMechele 3:fbf3c92f10ee 76 answerAppend(id);
RobinMechele 3:fbf3c92f10ee 77 answerAppend(" ");
RobinMechele 1:db9b9bec0133 78 answerAppend(temp);
RobinMechele 1:db9b9bec0133 79 }
RobinMechele 1:db9b9bec0133 80 else
RobinMechele 1:db9b9bec0133 81 {
RobinMechele 3:fbf3c92f10ee 82 answerAppend("ACK 4.0 ");
RobinMechele 3:fbf3c92f10ee 83 answerAppend(id);
RobinMechele 1:db9b9bec0133 84 }
RobinMechele 1:db9b9bec0133 85 }
RobinMechele 1:db9b9bec0133 86
RobinMechele 1:db9b9bec0133 87 void Slave::putRequest(char* action)
RobinMechele 1:db9b9bec0133 88 {
RobinMechele 3:fbf3c92f10ee 89 if(strcmp(action, "/LCD") == 0)
RobinMechele 1:db9b9bec0133 90 {
RobinMechele 3:fbf3c92f10ee 91 answerAppend("ACK 2.04 ");
RobinMechele 3:fbf3c92f10ee 92 answerAppend(id);
RobinMechele 1:db9b9bec0133 93 screen.lcdSlave(strtok(NULL, "\0"));
RobinMechele 1:db9b9bec0133 94 }
RobinMechele 1:db9b9bec0133 95 else
RobinMechele 3:fbf3c92f10ee 96 if(strcmp(action, "/LED") == 0)
RobinMechele 1:db9b9bec0133 97 {
RobinMechele 3:fbf3c92f10ee 98 if(led.setColor(strtok(NULL, " ")) == 0)
RobinMechele 3:fbf3c92f10ee 99 {
RobinMechele 3:fbf3c92f10ee 100 answerAppend("ACK 2.04 ");
RobinMechele 3:fbf3c92f10ee 101 answerAppend(id);
RobinMechele 3:fbf3c92f10ee 102 }
RobinMechele 3:fbf3c92f10ee 103 else
RobinMechele 3:fbf3c92f10ee 104 {
RobinMechele 3:fbf3c92f10ee 105 answerAppend("ACK 4.0 ");
RobinMechele 3:fbf3c92f10ee 106 answerAppend(id);
RobinMechele 3:fbf3c92f10ee 107 }
RobinMechele 1:db9b9bec0133 108 led.setColor(strtok(NULL, " "));
RobinMechele 1:db9b9bec0133 109 }
RobinMechele 1:db9b9bec0133 110 else
RobinMechele 3:fbf3c92f10ee 111 if(strcmp(action, "/BUZZER") == 0)
RobinMechele 1:db9b9bec0133 112 {
RobinMechele 1:db9b9bec0133 113 int one = atoi(strtok(NULL, " -"));
RobinMechele 1:db9b9bec0133 114 int two = atoi(strtok(NULL, " -"));
RobinMechele 3:fbf3c92f10ee 115 if(one > 0 && one < 17 && two <18 && two > 0)
RobinMechele 3:fbf3c92f10ee 116 {
RobinMechele 3:fbf3c92f10ee 117 buzzer.playBuzzer(one,two);
RobinMechele 3:fbf3c92f10ee 118 answerAppend("ACK 2.04 ");
RobinMechele 3:fbf3c92f10ee 119 answerAppend(id);
RobinMechele 3:fbf3c92f10ee 120 }
RobinMechele 3:fbf3c92f10ee 121 else
RobinMechele 3:fbf3c92f10ee 122 {
RobinMechele 3:fbf3c92f10ee 123 answerAppend("ACK 4.0 ");
RobinMechele 3:fbf3c92f10ee 124 answerAppend(id);
RobinMechele 3:fbf3c92f10ee 125 answerAppend(" Doet da eki nie, danke");
RobinMechele 3:fbf3c92f10ee 126 }
RobinMechele 1:db9b9bec0133 127 }
RobinMechele 1:db9b9bec0133 128 else
RobinMechele 1:db9b9bec0133 129 {
RobinMechele 3:fbf3c92f10ee 130 answerAppend("ACK 4.0 ");
RobinMechele 3:fbf3c92f10ee 131 answerAppend(id);
RobinMechele 1:db9b9bec0133 132 }
RobinMechele 1:db9b9bec0133 133 }
RobinMechele 1:db9b9bec0133 134
RobinMechele 1:db9b9bec0133 135 void Slave::answerAppend(char* append)
RobinMechele 1:db9b9bec0133 136 {
RobinMechele 1:db9b9bec0133 137 strcat(answer, append);
RobinMechele 1:db9b9bec0133 138 }
RobinMechele 1:db9b9bec0133 139
RobinMechele 1:db9b9bec0133 140 void Slave::answerReset(){
RobinMechele 1:db9b9bec0133 141 for(int i = 0; i < 512; i++)
RobinMechele 1:db9b9bec0133 142 {
RobinMechele 1:db9b9bec0133 143 answer[i] = NULL;
RobinMechele 1:db9b9bec0133 144 }
RobinMechele 1:db9b9bec0133 145 }