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@2:ecc0c5c14bc1, 2018-03-16 (annotated)
- Committer:
- RobinMechele
- Date:
- Fri Mar 16 13:05:57 2018 +0000
- Revision:
- 2:ecc0c5c14bc1
- Parent:
- 1:db9b9bec0133
- Child:
- 3:fbf3c92f10ee
Console interface gemaakt master
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 | #include "string.h" |
RobinMechele | 1:db9b9bec0133 | 3 | #include "temperature.h" |
RobinMechele | 1:db9b9bec0133 | 4 | #include "potentiometer.h" |
RobinMechele | 1:db9b9bec0133 | 5 | #include "lcdcontrol.h" |
RobinMechele | 1:db9b9bec0133 | 6 | #include "led.h" |
RobinMechele | 1:db9b9bec0133 | 7 | #include "buzzer.h" |
RobinMechele | 1:db9b9bec0133 | 8 | |
RobinMechele | 1:db9b9bec0133 | 9 | Temperature temperature; |
RobinMechele | 1:db9b9bec0133 | 10 | Potentiometer potentiometer; |
RobinMechele | 1:db9b9bec0133 | 11 | LcdControl screen; |
RobinMechele | 1:db9b9bec0133 | 12 | Led led; |
RobinMechele | 1:db9b9bec0133 | 13 | Buzzer buzzer; |
RobinMechele | 1:db9b9bec0133 | 14 | |
RobinMechele | 1:db9b9bec0133 | 15 | Slave::Slave() |
RobinMechele | 1:db9b9bec0133 | 16 | :answer() |
RobinMechele | 1:db9b9bec0133 | 17 | { |
RobinMechele | 1:db9b9bec0133 | 18 | //Constructor |
RobinMechele | 1:db9b9bec0133 | 19 | } |
RobinMechele | 1:db9b9bec0133 | 20 | |
RobinMechele | 1:db9b9bec0133 | 21 | void Slave::slaveRun(const char* ip) |
RobinMechele | 1:db9b9bec0133 | 22 | { |
RobinMechele | 1:db9b9bec0133 | 23 | EthernetInterface ethernet; |
RobinMechele | 1:db9b9bec0133 | 24 | ethernet.init(ip,"255.255.255.0", "192.168.0.1"); |
RobinMechele | 1:db9b9bec0133 | 25 | ethernet.connect(); |
RobinMechele | 1:db9b9bec0133 | 26 | printf("Your ip is: %s", ethernet.getIPAddress()); |
RobinMechele | 1:db9b9bec0133 | 27 | |
RobinMechele | 1:db9b9bec0133 | 28 | UDPSocket slave; |
RobinMechele | 1:db9b9bec0133 | 29 | slave.bind(4000); |
RobinMechele | 1:db9b9bec0133 | 30 | Endpoint master; |
RobinMechele | 1:db9b9bec0133 | 31 | |
RobinMechele | 1:db9b9bec0133 | 32 | while(1){ |
RobinMechele | 1:db9b9bec0133 | 33 | char buffer[512] = {0}; |
RobinMechele | 1:db9b9bec0133 | 34 | printf("\nWaiting for UDP packet...\n\r"); |
RobinMechele | 1:db9b9bec0133 | 35 | |
RobinMechele | 1:db9b9bec0133 | 36 | int n = slave.receiveFrom(master, buffer, sizeof(buffer)); |
RobinMechele | 1:db9b9bec0133 | 37 | buffer[n] = '\0'; |
RobinMechele | 1:db9b9bec0133 | 38 | |
RobinMechele | 1:db9b9bec0133 | 39 | printf("Received packet from: %s\n\r", master.get_address()); |
RobinMechele | 1:db9b9bec0133 | 40 | printf("Received: '%s'\r\n", buffer); |
RobinMechele | 1:db9b9bec0133 | 41 | actionSlave(buffer); |
RobinMechele | 1:db9b9bec0133 | 42 | |
RobinMechele | 1:db9b9bec0133 | 43 | slave.sendTo(master, answer, 50); |
RobinMechele | 1:db9b9bec0133 | 44 | answerReset(); |
RobinMechele | 1:db9b9bec0133 | 45 | } |
RobinMechele | 1:db9b9bec0133 | 46 | } |
RobinMechele | 1:db9b9bec0133 | 47 | |
RobinMechele | 1:db9b9bec0133 | 48 | void Slave::actionSlave(const char* bufferke){ |
RobinMechele | 1:db9b9bec0133 | 49 | char* command = strtok((char*)bufferke, " "); |
RobinMechele | 1:db9b9bec0133 | 50 | char* action = strtok(NULL, " "); |
RobinMechele | 1:db9b9bec0133 | 51 | if(strcmp(command, "GET") == 0) |
RobinMechele | 1:db9b9bec0133 | 52 | { |
RobinMechele | 1:db9b9bec0133 | 53 | getRequest(action); |
RobinMechele | 1:db9b9bec0133 | 54 | } |
RobinMechele | 2:ecc0c5c14bc1 | 55 | else |
RobinMechele | 2:ecc0c5c14bc1 | 56 | if(strcmp(command, "PUT") == 0) |
RobinMechele | 1:db9b9bec0133 | 57 | { |
RobinMechele | 1:db9b9bec0133 | 58 | putRequest(action); |
RobinMechele | 1:db9b9bec0133 | 59 | } |
RobinMechele | 1:db9b9bec0133 | 60 | else |
RobinMechele | 1:db9b9bec0133 | 61 | { |
RobinMechele | 1:db9b9bec0133 | 62 | answerAppend("ACK 4.0 ID"); |
RobinMechele | 1:db9b9bec0133 | 63 | } |
RobinMechele | 1:db9b9bec0133 | 64 | } |
RobinMechele | 1:db9b9bec0133 | 65 | |
RobinMechele | 1:db9b9bec0133 | 66 | void Slave::getRequest(char* action) |
RobinMechele | 1:db9b9bec0133 | 67 | { |
RobinMechele | 1:db9b9bec0133 | 68 | char temp[8]; |
RobinMechele | 1:db9b9bec0133 | 69 | if(strcmp(action, "/temperature") == 0) |
RobinMechele | 1:db9b9bec0133 | 70 | { |
RobinMechele | 1:db9b9bec0133 | 71 | sprintf(temp, "%.3f", temperature.getTemperature()); |
RobinMechele | 1:db9b9bec0133 | 72 | answerAppend("ACK 2.05 ID "); |
RobinMechele | 1:db9b9bec0133 | 73 | answerAppend(temp); |
RobinMechele | 1:db9b9bec0133 | 74 | } |
RobinMechele | 1:db9b9bec0133 | 75 | else |
RobinMechele | 1:db9b9bec0133 | 76 | if(strcmp(action, "/potentiometer") == 0) |
RobinMechele | 1:db9b9bec0133 | 77 | { |
RobinMechele | 1:db9b9bec0133 | 78 | sprintf(temp, "%.0f", potentiometer.getPotentiometer()*255); |
RobinMechele | 1:db9b9bec0133 | 79 | answerAppend("ACK 2.05 ID "); |
RobinMechele | 1:db9b9bec0133 | 80 | answerAppend(temp); |
RobinMechele | 1:db9b9bec0133 | 81 | } |
RobinMechele | 1:db9b9bec0133 | 82 | else |
RobinMechele | 1:db9b9bec0133 | 83 | { |
RobinMechele | 1:db9b9bec0133 | 84 | answerAppend("ACK 4.0 ID"); |
RobinMechele | 1:db9b9bec0133 | 85 | } |
RobinMechele | 1:db9b9bec0133 | 86 | } |
RobinMechele | 1:db9b9bec0133 | 87 | |
RobinMechele | 1:db9b9bec0133 | 88 | void Slave::putRequest(char* action) |
RobinMechele | 1:db9b9bec0133 | 89 | { |
RobinMechele | 1:db9b9bec0133 | 90 | if(strcmp(action, "/lcd") == 0) |
RobinMechele | 1:db9b9bec0133 | 91 | { |
RobinMechele | 1:db9b9bec0133 | 92 | answerAppend("ACK 2.04 ID"); |
RobinMechele | 1:db9b9bec0133 | 93 | screen.lcdSlave(strtok(NULL, "\0")); |
RobinMechele | 1:db9b9bec0133 | 94 | } |
RobinMechele | 1:db9b9bec0133 | 95 | else |
RobinMechele | 1:db9b9bec0133 | 96 | if(strcmp(action, "/led") == 0) |
RobinMechele | 1:db9b9bec0133 | 97 | { |
RobinMechele | 1:db9b9bec0133 | 98 | answerAppend("ACK 2.04 ID"); |
RobinMechele | 1:db9b9bec0133 | 99 | led.setColor(strtok(NULL, " ")); |
RobinMechele | 1:db9b9bec0133 | 100 | } |
RobinMechele | 1:db9b9bec0133 | 101 | else |
RobinMechele | 1:db9b9bec0133 | 102 | if(strcmp(action, "/buzzer") == 0) |
RobinMechele | 1:db9b9bec0133 | 103 | { |
RobinMechele | 1:db9b9bec0133 | 104 | answerAppend("ACK 2.04 ID"); |
RobinMechele | 1:db9b9bec0133 | 105 | int one = atoi(strtok(NULL, " -")); |
RobinMechele | 1:db9b9bec0133 | 106 | int two = atoi(strtok(NULL, " -")); |
RobinMechele | 1:db9b9bec0133 | 107 | printf("%d %d", one,two); |
RobinMechele | 1:db9b9bec0133 | 108 | buzzer.playBuzzer(one, two); |
RobinMechele | 1:db9b9bec0133 | 109 | } |
RobinMechele | 1:db9b9bec0133 | 110 | else |
RobinMechele | 1:db9b9bec0133 | 111 | { |
RobinMechele | 1:db9b9bec0133 | 112 | answerAppend("ACK 4.0 ID"); |
RobinMechele | 1:db9b9bec0133 | 113 | } |
RobinMechele | 1:db9b9bec0133 | 114 | } |
RobinMechele | 1:db9b9bec0133 | 115 | |
RobinMechele | 1:db9b9bec0133 | 116 | void Slave::answerAppend(char* append) |
RobinMechele | 1:db9b9bec0133 | 117 | { |
RobinMechele | 1:db9b9bec0133 | 118 | strcat(answer, append); |
RobinMechele | 1:db9b9bec0133 | 119 | } |
RobinMechele | 1:db9b9bec0133 | 120 | |
RobinMechele | 1:db9b9bec0133 | 121 | void Slave::answerReset(){ |
RobinMechele | 1:db9b9bec0133 | 122 | for(int i = 0; i < 512; i++) |
RobinMechele | 1:db9b9bec0133 | 123 | { |
RobinMechele | 1:db9b9bec0133 | 124 | answer[i] = NULL; |
RobinMechele | 1:db9b9bec0133 | 125 | } |
RobinMechele | 1:db9b9bec0133 | 126 | } |