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.
classes.h@32:5bd3f0d073ac, 2018-06-08 (annotated)
- Committer:
- lucasfontenla
- Date:
- Fri Jun 08 20:57:57 2018 +0000
- Revision:
- 32:5bd3f0d073ac
- Parent:
- 30:27838f6fdfd6
- Child:
- 36:4d0e131146e6
atualiza??o;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| lucasfontenla | 24:92f612ca218b | 1 | #define tx PC_10 |
| lucasfontenla | 24:92f612ca218b | 2 | #define rx PC_11 |
| lucasfontenla | 24:92f612ca218b | 3 | |
| lucasfontenla | 26:f891ff6beb33 | 4 | #define sendTime 0.5 |
| lucasfontenla | 24:92f612ca218b | 5 | |
| lucasfontenla | 24:92f612ca218b | 6 | Serial ihm(tx, rx); //tx e rx (D1 e D0) |
| lucasfontenla | 24:92f612ca218b | 7 | |
| lucasfontenla | 30:27838f6fdfd6 | 8 | int saved = 0; |
| lucasfontenla | 27:3bbc354adea6 | 9 | const int maxPoints = 100; |
| lucasfontenla | 27:3bbc354adea6 | 10 | float points[3][maxPoints]; // [0] X; [1] Y; [2] Z; |
| lucasfontenla | 27:3bbc354adea6 | 11 | float path[3][maxPoints]; // [0] mode [1] speed; [2] glue; |
| lucasfontenla | 27:3bbc354adea6 | 12 | int resting_points = 0; |
| lucasfontenla | 27:3bbc354adea6 | 13 | |
| lucasfontenla | 24:92f612ca218b | 14 | class IHM { |
| lucasfontenla | 24:92f612ca218b | 15 | int n; |
| lucasfontenla | 24:92f612ca218b | 16 | string buffer; |
| lucasfontenla | 24:92f612ca218b | 17 | char buffer_char[8]; |
| lucasfontenla | 24:92f612ca218b | 18 | |
| lucasfontenla | 27:3bbc354adea6 | 19 | int gotX; |
| lucasfontenla | 27:3bbc354adea6 | 20 | int gotY; |
| lucasfontenla | 27:3bbc354adea6 | 21 | int gotZ; |
| lucasfontenla | 27:3bbc354adea6 | 22 | int gotF; |
| lucasfontenla | 27:3bbc354adea6 | 23 | int gotG; |
| lucasfontenla | 27:3bbc354adea6 | 24 | int gotM; |
| lucasfontenla | 27:3bbc354adea6 | 25 | |
| lucasfontenla | 24:92f612ca218b | 26 | public: |
| lucasfontenla | 24:92f612ca218b | 27 | int debug; |
| lucasfontenla | 24:92f612ca218b | 28 | |
| lucasfontenla | 24:92f612ca218b | 29 | // PUBLIC FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------- |
| lucasfontenla | 24:92f612ca218b | 30 | void send_position(float X, float Y, float Z){ |
| lucasfontenla | 32:5bd3f0d073ac | 31 | printf("Position sent\n\r"); |
| lucasfontenla | 24:92f612ca218b | 32 | buffer = ""; |
| lucasfontenla | 24:92f612ca218b | 33 | |
| lucasfontenla | 24:92f612ca218b | 34 | buffer.append("p"); |
| lucasfontenla | 24:92f612ca218b | 35 | |
| lucasfontenla | 26:f891ff6beb33 | 36 | n = sprintf(buffer_char, "X%.2f", X); |
| lucasfontenla | 24:92f612ca218b | 37 | buffer.append(buffer_char); |
| lucasfontenla | 26:f891ff6beb33 | 38 | n = sprintf(buffer_char, "Y%.2f", Y); |
| lucasfontenla | 24:92f612ca218b | 39 | buffer.append(buffer_char); |
| lucasfontenla | 26:f891ff6beb33 | 40 | n = sprintf(buffer_char, "Z%.2f", Z); |
| lucasfontenla | 24:92f612ca218b | 41 | buffer.append(buffer_char); |
| lucasfontenla | 24:92f612ca218b | 42 | |
| lucasfontenla | 24:92f612ca218b | 43 | send(buffer); |
| lucasfontenla | 24:92f612ca218b | 44 | } |
| lucasfontenla | 26:f891ff6beb33 | 45 | |
| lucasfontenla | 26:f891ff6beb33 | 46 | void action_complete(void){ |
| lucasfontenla | 26:f891ff6beb33 | 47 | send("a"); |
| lucasfontenla | 26:f891ff6beb33 | 48 | } |
| lucasfontenla | 27:3bbc354adea6 | 49 | |
| lucasfontenla | 27:3bbc354adea6 | 50 | void read_gcode(string gcode){ |
| lucasfontenla | 27:3bbc354adea6 | 51 | string buffer; |
| lucasfontenla | 27:3bbc354adea6 | 52 | char c; |
| lucasfontenla | 27:3bbc354adea6 | 53 | saved = 0; |
| lucasfontenla | 27:3bbc354adea6 | 54 | |
| lucasfontenla | 27:3bbc354adea6 | 55 | printf("\nGcode: %s\n\n\r", gcode); |
| lucasfontenla | 27:3bbc354adea6 | 56 | |
| lucasfontenla | 27:3bbc354adea6 | 57 | for(int i = 0; i < gcode.size(); i++){ |
| lucasfontenla | 27:3bbc354adea6 | 58 | c = gcode[i]; |
| lucasfontenla | 27:3bbc354adea6 | 59 | if(c == '\r'){ |
| lucasfontenla | 27:3bbc354adea6 | 60 | translate_gcode(buffer, saved); |
| lucasfontenla | 27:3bbc354adea6 | 61 | saved++; |
| lucasfontenla | 32:5bd3f0d073ac | 62 | printf("Saved: %d Buffer: %s\n\r", saved, buffer); |
| lucasfontenla | 27:3bbc354adea6 | 63 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 64 | } else if(c == ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 65 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 66 | translate_gcode(buffer, saved); |
| lucasfontenla | 27:3bbc354adea6 | 67 | break; |
| lucasfontenla | 27:3bbc354adea6 | 68 | } else if(c != '\n'){ |
| lucasfontenla | 27:3bbc354adea6 | 69 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 70 | } |
| lucasfontenla | 27:3bbc354adea6 | 71 | } |
| lucasfontenla | 27:3bbc354adea6 | 72 | } |
| lucasfontenla | 27:3bbc354adea6 | 73 | |
| lucasfontenla | 27:3bbc354adea6 | 74 | void translate_gcode(string line, int line_number){ |
| lucasfontenla | 27:3bbc354adea6 | 75 | char c; |
| lucasfontenla | 27:3bbc354adea6 | 76 | string buffer; |
| lucasfontenla | 27:3bbc354adea6 | 77 | int toAdd[6] = {1, 1, 1, 1, 1, 1} ; |
| lucasfontenla | 27:3bbc354adea6 | 78 | |
| lucasfontenla | 27:3bbc354adea6 | 79 | line.append(" "); |
| lucasfontenla | 27:3bbc354adea6 | 80 | |
| lucasfontenla | 27:3bbc354adea6 | 81 | gotX = 0; |
| lucasfontenla | 27:3bbc354adea6 | 82 | gotY = 0; |
| lucasfontenla | 27:3bbc354adea6 | 83 | gotZ = 0; |
| lucasfontenla | 27:3bbc354adea6 | 84 | gotF = 0; |
| lucasfontenla | 27:3bbc354adea6 | 85 | gotG = 0; |
| lucasfontenla | 27:3bbc354adea6 | 86 | gotM = 0; |
| lucasfontenla | 27:3bbc354adea6 | 87 | |
| lucasfontenla | 27:3bbc354adea6 | 88 | //printf("Line: %s No: %d\r\n", line, line_number); |
| lucasfontenla | 27:3bbc354adea6 | 89 | for(int i = 0; i < line.size(); i++){ |
| lucasfontenla | 27:3bbc354adea6 | 90 | c = line[i]; |
| lucasfontenla | 27:3bbc354adea6 | 91 | |
| lucasfontenla | 27:3bbc354adea6 | 92 | if(c == 'G'){ |
| lucasfontenla | 27:3bbc354adea6 | 93 | set_variables(1, 0, 0, 0, 0, 0); |
| lucasfontenla | 27:3bbc354adea6 | 94 | } |
| lucasfontenla | 27:3bbc354adea6 | 95 | if(c == 'X'){ |
| lucasfontenla | 27:3bbc354adea6 | 96 | set_variables(0, 1, 0, 0, 0, 0); |
| lucasfontenla | 27:3bbc354adea6 | 97 | } |
| lucasfontenla | 27:3bbc354adea6 | 98 | if(c == 'Y'){ |
| lucasfontenla | 27:3bbc354adea6 | 99 | set_variables(0, 0, 1, 0, 0, 0); |
| lucasfontenla | 27:3bbc354adea6 | 100 | } |
| lucasfontenla | 27:3bbc354adea6 | 101 | if(c == 'Z'){ |
| lucasfontenla | 27:3bbc354adea6 | 102 | set_variables(0, 0, 0, 1, 0, 0); |
| lucasfontenla | 27:3bbc354adea6 | 103 | } |
| lucasfontenla | 27:3bbc354adea6 | 104 | if(c == 'F'){ |
| lucasfontenla | 27:3bbc354adea6 | 105 | set_variables(0, 0, 0, 0, 1, 0); |
| lucasfontenla | 27:3bbc354adea6 | 106 | } |
| lucasfontenla | 27:3bbc354adea6 | 107 | if(c == 'M'){ |
| lucasfontenla | 27:3bbc354adea6 | 108 | set_variables(0, 0, 0, 0, 0, 1); |
| lucasfontenla | 27:3bbc354adea6 | 109 | } |
| lucasfontenla | 27:3bbc354adea6 | 110 | |
| lucasfontenla | 27:3bbc354adea6 | 111 | if(gotG && c != 'G'){ |
| lucasfontenla | 27:3bbc354adea6 | 112 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 113 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 114 | } else if(toAdd[0]){ |
| lucasfontenla | 27:3bbc354adea6 | 115 | path[0][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 116 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 117 | toAdd[0] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 118 | //printf("G: %f\r\n", path[0][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 119 | } |
| lucasfontenla | 27:3bbc354adea6 | 120 | } |
| lucasfontenla | 27:3bbc354adea6 | 121 | |
| lucasfontenla | 27:3bbc354adea6 | 122 | if(gotX && c != 'X'){ |
| lucasfontenla | 27:3bbc354adea6 | 123 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 124 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 125 | } else if(toAdd[1]){ |
| lucasfontenla | 27:3bbc354adea6 | 126 | points[0][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 127 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 128 | toAdd[1] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 129 | //printf("X: %f\r\n", points[0][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 130 | } |
| lucasfontenla | 27:3bbc354adea6 | 131 | } |
| lucasfontenla | 27:3bbc354adea6 | 132 | |
| lucasfontenla | 27:3bbc354adea6 | 133 | if(gotY && c != 'Y'){ |
| lucasfontenla | 27:3bbc354adea6 | 134 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 135 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 136 | } else if(toAdd[2]){ |
| lucasfontenla | 27:3bbc354adea6 | 137 | points[1][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 138 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 139 | toAdd[2] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 140 | //printf("Y: %f\r\n", points[1][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 141 | } |
| lucasfontenla | 27:3bbc354adea6 | 142 | } |
| lucasfontenla | 27:3bbc354adea6 | 143 | |
| lucasfontenla | 27:3bbc354adea6 | 144 | if(gotZ && c != 'Z'){ |
| lucasfontenla | 27:3bbc354adea6 | 145 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 146 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 147 | } else if(toAdd[3]){ |
| lucasfontenla | 27:3bbc354adea6 | 148 | points[2][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 149 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 150 | toAdd[3] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 151 | //printf("Z: %f\r\n", points[2][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 152 | } |
| lucasfontenla | 27:3bbc354adea6 | 153 | } |
| lucasfontenla | 27:3bbc354adea6 | 154 | |
| lucasfontenla | 27:3bbc354adea6 | 155 | if(gotF && c != 'F'){ |
| lucasfontenla | 27:3bbc354adea6 | 156 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 157 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 158 | } else if(toAdd[4]){ |
| lucasfontenla | 27:3bbc354adea6 | 159 | path[1][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 160 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 161 | toAdd[4] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 162 | //printf("F: %f\r\n", path[1][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 163 | } |
| lucasfontenla | 27:3bbc354adea6 | 164 | } |
| lucasfontenla | 27:3bbc354adea6 | 165 | |
| lucasfontenla | 27:3bbc354adea6 | 166 | if(gotM && c != 'M'){ |
| lucasfontenla | 27:3bbc354adea6 | 167 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 168 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 169 | } else if(toAdd[5]){ |
| lucasfontenla | 27:3bbc354adea6 | 170 | path[2][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 171 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 172 | toAdd[5] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 173 | //printf("M: %f\r\n", path[2][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 174 | } |
| lucasfontenla | 27:3bbc354adea6 | 175 | } |
| lucasfontenla | 27:3bbc354adea6 | 176 | } |
| lucasfontenla | 27:3bbc354adea6 | 177 | |
| lucasfontenla | 27:3bbc354adea6 | 178 | if(toAdd[1]){ |
| lucasfontenla | 27:3bbc354adea6 | 179 | points[0][line_number] = points[0][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 180 | } |
| lucasfontenla | 27:3bbc354adea6 | 181 | |
| lucasfontenla | 27:3bbc354adea6 | 182 | if(toAdd[2]){ |
| lucasfontenla | 27:3bbc354adea6 | 183 | points[1][line_number] = points[1][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 184 | } |
| lucasfontenla | 27:3bbc354adea6 | 185 | |
| lucasfontenla | 27:3bbc354adea6 | 186 | if(toAdd[3]){ |
| lucasfontenla | 27:3bbc354adea6 | 187 | points[2][line_number] = points[2][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 188 | } |
| lucasfontenla | 27:3bbc354adea6 | 189 | |
| lucasfontenla | 27:3bbc354adea6 | 190 | if(toAdd[4]){ |
| lucasfontenla | 27:3bbc354adea6 | 191 | path[1][line_number] = path[1][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 192 | } |
| lucasfontenla | 27:3bbc354adea6 | 193 | |
| lucasfontenla | 27:3bbc354adea6 | 194 | if(toAdd[5]){ |
| lucasfontenla | 27:3bbc354adea6 | 195 | path[2][line_number] = path[2][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 196 | } |
| lucasfontenla | 27:3bbc354adea6 | 197 | |
| lucasfontenla | 27:3bbc354adea6 | 198 | printf("G: %.2f, X: %.2f, Y: %.2f, Z: %.2f, F: %.2f, M: %.2f\n\r", path[0][line_number], points[0][line_number], points[1][line_number], points[2][line_number], path[1][line_number], path[2][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 199 | } |
| lucasfontenla | 27:3bbc354adea6 | 200 | |
| lucasfontenla | 27:3bbc354adea6 | 201 | void set_variables(int G, int X_val, int Y_val, int Z_val, int F, int M){ |
| lucasfontenla | 27:3bbc354adea6 | 202 | gotX = X_val; |
| lucasfontenla | 27:3bbc354adea6 | 203 | gotY = Y_val; |
| lucasfontenla | 27:3bbc354adea6 | 204 | gotZ = Z_val; |
| lucasfontenla | 27:3bbc354adea6 | 205 | gotF = F; |
| lucasfontenla | 27:3bbc354adea6 | 206 | gotG = G; |
| lucasfontenla | 27:3bbc354adea6 | 207 | gotM = M; |
| lucasfontenla | 27:3bbc354adea6 | 208 | } |
| lucasfontenla | 27:3bbc354adea6 | 209 | |
| lucasfontenla | 27:3bbc354adea6 | 210 | void sendSaved(void){ |
| lucasfontenla | 27:3bbc354adea6 | 211 | string buffer = "u"; |
| lucasfontenla | 27:3bbc354adea6 | 212 | char buffer_char[8]; |
| lucasfontenla | 27:3bbc354adea6 | 213 | int n; |
| lucasfontenla | 27:3bbc354adea6 | 214 | |
| lucasfontenla | 30:27838f6fdfd6 | 215 | for(int i = 0; i < saved; i++){ |
| lucasfontenla | 27:3bbc354adea6 | 216 | buffer.append("G"); |
| lucasfontenla | 27:3bbc354adea6 | 217 | n = sprintf(buffer_char, "%d ", (int)path[0][i]); |
| lucasfontenla | 27:3bbc354adea6 | 218 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 219 | |
| lucasfontenla | 27:3bbc354adea6 | 220 | buffer.append("X"); |
| lucasfontenla | 27:3bbc354adea6 | 221 | n = sprintf(buffer_char, "%.3f ", points[0][i]); |
| lucasfontenla | 27:3bbc354adea6 | 222 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 223 | |
| lucasfontenla | 27:3bbc354adea6 | 224 | buffer.append("Y"); |
| lucasfontenla | 27:3bbc354adea6 | 225 | n = sprintf(buffer_char, "%.3f ", points[1][i]); |
| lucasfontenla | 27:3bbc354adea6 | 226 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 227 | |
| lucasfontenla | 27:3bbc354adea6 | 228 | buffer.append("Z"); |
| lucasfontenla | 27:3bbc354adea6 | 229 | n = sprintf(buffer_char, "%.3f ", points[2][i]); |
| lucasfontenla | 27:3bbc354adea6 | 230 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 231 | |
| lucasfontenla | 27:3bbc354adea6 | 232 | buffer.append("F"); |
| lucasfontenla | 27:3bbc354adea6 | 233 | n = sprintf(buffer_char, "%.2f ", path[1][i]); |
| lucasfontenla | 27:3bbc354adea6 | 234 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 235 | |
| lucasfontenla | 27:3bbc354adea6 | 236 | buffer.append("M"); |
| lucasfontenla | 27:3bbc354adea6 | 237 | n = sprintf(buffer_char, "%d ", (int)path[2][i]); |
| lucasfontenla | 27:3bbc354adea6 | 238 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 239 | |
| lucasfontenla | 30:27838f6fdfd6 | 240 | if(i == (saved-1)){ |
| lucasfontenla | 27:3bbc354adea6 | 241 | buffer.append(";"); |
| lucasfontenla | 27:3bbc354adea6 | 242 | } else { |
| lucasfontenla | 27:3bbc354adea6 | 243 | buffer.append("\r\n"); |
| lucasfontenla | 27:3bbc354adea6 | 244 | } |
| lucasfontenla | 27:3bbc354adea6 | 245 | } |
| lucasfontenla | 27:3bbc354adea6 | 246 | |
| lucasfontenla | 27:3bbc354adea6 | 247 | printf("Sending: %s\n\r", buffer); |
| lucasfontenla | 27:3bbc354adea6 | 248 | send(buffer); |
| lucasfontenla | 27:3bbc354adea6 | 249 | } |
| lucasfontenla | 24:92f612ca218b | 250 | |
| lucasfontenla | 24:92f612ca218b | 251 | private: |
| lucasfontenla | 24:92f612ca218b | 252 | |
| lucasfontenla | 24:92f612ca218b | 253 | // PRIVATE FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------- |
| lucasfontenla | 24:92f612ca218b | 254 | void send(string msg){ |
| lucasfontenla | 24:92f612ca218b | 255 | msg.append("x"); |
| lucasfontenla | 24:92f612ca218b | 256 | |
| lucasfontenla | 24:92f612ca218b | 257 | for(int i = 0; i < msg.length(); i++){ |
| lucasfontenla | 24:92f612ca218b | 258 | ihm.putc(msg[i]); |
| lucasfontenla | 30:27838f6fdfd6 | 259 | wait_ms(10); |
| lucasfontenla | 24:92f612ca218b | 260 | } |
| lucasfontenla | 26:f891ff6beb33 | 261 | printf("Sent\n\r"); |
| lucasfontenla | 24:92f612ca218b | 262 | } |
| lucasfontenla | 24:92f612ca218b | 263 | }; |