Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface LM75B mbed-rtos mbed
Slave.cpp@7:2de256f902c8, 2018-03-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |