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@30:27838f6fdfd6, 2018-05-25 (annotated)
- Committer:
- lucasfontenla
- Date:
- Fri May 25 17:28:28 2018 +0000
- Revision:
- 30:27838f6fdfd6
- Parent:
- 27:3bbc354adea6
- Child:
- 32:5bd3f0d073ac
Salvar pontos e executar com acionamento da v?lvula funcionando;
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 | 24:92f612ca218b | 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 | 27:3bbc354adea6 | 62 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 63 | } else if(c == ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 64 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 65 | translate_gcode(buffer, saved); |
| lucasfontenla | 27:3bbc354adea6 | 66 | break; |
| lucasfontenla | 27:3bbc354adea6 | 67 | } else if(c != '\n'){ |
| lucasfontenla | 27:3bbc354adea6 | 68 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 69 | } |
| lucasfontenla | 27:3bbc354adea6 | 70 | } |
| lucasfontenla | 27:3bbc354adea6 | 71 | } |
| lucasfontenla | 27:3bbc354adea6 | 72 | |
| lucasfontenla | 27:3bbc354adea6 | 73 | void translate_gcode(string line, int line_number){ |
| lucasfontenla | 27:3bbc354adea6 | 74 | char c; |
| lucasfontenla | 27:3bbc354adea6 | 75 | string buffer; |
| lucasfontenla | 27:3bbc354adea6 | 76 | int toAdd[6] = {1, 1, 1, 1, 1, 1} ; |
| lucasfontenla | 27:3bbc354adea6 | 77 | |
| lucasfontenla | 27:3bbc354adea6 | 78 | line.append(" "); |
| lucasfontenla | 27:3bbc354adea6 | 79 | |
| lucasfontenla | 27:3bbc354adea6 | 80 | gotX = 0; |
| lucasfontenla | 27:3bbc354adea6 | 81 | gotY = 0; |
| lucasfontenla | 27:3bbc354adea6 | 82 | gotZ = 0; |
| lucasfontenla | 27:3bbc354adea6 | 83 | gotF = 0; |
| lucasfontenla | 27:3bbc354adea6 | 84 | gotG = 0; |
| lucasfontenla | 27:3bbc354adea6 | 85 | gotM = 0; |
| lucasfontenla | 27:3bbc354adea6 | 86 | |
| lucasfontenla | 27:3bbc354adea6 | 87 | //printf("Line: %s No: %d\r\n", line, line_number); |
| lucasfontenla | 27:3bbc354adea6 | 88 | for(int i = 0; i < line.size(); i++){ |
| lucasfontenla | 27:3bbc354adea6 | 89 | c = line[i]; |
| lucasfontenla | 27:3bbc354adea6 | 90 | |
| lucasfontenla | 27:3bbc354adea6 | 91 | if(c == 'G'){ |
| lucasfontenla | 27:3bbc354adea6 | 92 | set_variables(1, 0, 0, 0, 0, 0); |
| lucasfontenla | 27:3bbc354adea6 | 93 | } |
| lucasfontenla | 27:3bbc354adea6 | 94 | if(c == 'X'){ |
| lucasfontenla | 27:3bbc354adea6 | 95 | set_variables(0, 1, 0, 0, 0, 0); |
| lucasfontenla | 27:3bbc354adea6 | 96 | } |
| lucasfontenla | 27:3bbc354adea6 | 97 | if(c == 'Y'){ |
| lucasfontenla | 27:3bbc354adea6 | 98 | set_variables(0, 0, 1, 0, 0, 0); |
| lucasfontenla | 27:3bbc354adea6 | 99 | } |
| lucasfontenla | 27:3bbc354adea6 | 100 | if(c == 'Z'){ |
| lucasfontenla | 27:3bbc354adea6 | 101 | set_variables(0, 0, 0, 1, 0, 0); |
| lucasfontenla | 27:3bbc354adea6 | 102 | } |
| lucasfontenla | 27:3bbc354adea6 | 103 | if(c == 'F'){ |
| lucasfontenla | 27:3bbc354adea6 | 104 | set_variables(0, 0, 0, 0, 1, 0); |
| lucasfontenla | 27:3bbc354adea6 | 105 | } |
| lucasfontenla | 27:3bbc354adea6 | 106 | if(c == 'M'){ |
| lucasfontenla | 27:3bbc354adea6 | 107 | set_variables(0, 0, 0, 0, 0, 1); |
| lucasfontenla | 27:3bbc354adea6 | 108 | } |
| lucasfontenla | 27:3bbc354adea6 | 109 | |
| lucasfontenla | 27:3bbc354adea6 | 110 | if(gotG && c != 'G'){ |
| lucasfontenla | 27:3bbc354adea6 | 111 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 112 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 113 | } else if(toAdd[0]){ |
| lucasfontenla | 27:3bbc354adea6 | 114 | path[0][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 115 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 116 | toAdd[0] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 117 | //printf("G: %f\r\n", path[0][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 118 | } |
| lucasfontenla | 27:3bbc354adea6 | 119 | } |
| lucasfontenla | 27:3bbc354adea6 | 120 | |
| lucasfontenla | 27:3bbc354adea6 | 121 | if(gotX && c != 'X'){ |
| lucasfontenla | 27:3bbc354adea6 | 122 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 123 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 124 | } else if(toAdd[1]){ |
| lucasfontenla | 27:3bbc354adea6 | 125 | points[0][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 126 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 127 | toAdd[1] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 128 | //printf("X: %f\r\n", points[0][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 129 | } |
| lucasfontenla | 27:3bbc354adea6 | 130 | } |
| lucasfontenla | 27:3bbc354adea6 | 131 | |
| lucasfontenla | 27:3bbc354adea6 | 132 | if(gotY && c != 'Y'){ |
| lucasfontenla | 27:3bbc354adea6 | 133 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 134 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 135 | } else if(toAdd[2]){ |
| lucasfontenla | 27:3bbc354adea6 | 136 | points[1][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 137 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 138 | toAdd[2] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 139 | //printf("Y: %f\r\n", points[1][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 140 | } |
| lucasfontenla | 27:3bbc354adea6 | 141 | } |
| lucasfontenla | 27:3bbc354adea6 | 142 | |
| lucasfontenla | 27:3bbc354adea6 | 143 | if(gotZ && c != 'Z'){ |
| lucasfontenla | 27:3bbc354adea6 | 144 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 145 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 146 | } else if(toAdd[3]){ |
| lucasfontenla | 27:3bbc354adea6 | 147 | points[2][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 148 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 149 | toAdd[3] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 150 | //printf("Z: %f\r\n", points[2][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 151 | } |
| lucasfontenla | 27:3bbc354adea6 | 152 | } |
| lucasfontenla | 27:3bbc354adea6 | 153 | |
| lucasfontenla | 27:3bbc354adea6 | 154 | if(gotF && c != 'F'){ |
| lucasfontenla | 27:3bbc354adea6 | 155 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 156 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 157 | } else if(toAdd[4]){ |
| lucasfontenla | 27:3bbc354adea6 | 158 | path[1][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 159 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 160 | toAdd[4] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 161 | //printf("F: %f\r\n", path[1][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 162 | } |
| lucasfontenla | 27:3bbc354adea6 | 163 | } |
| lucasfontenla | 27:3bbc354adea6 | 164 | |
| lucasfontenla | 27:3bbc354adea6 | 165 | if(gotM && c != 'M'){ |
| lucasfontenla | 27:3bbc354adea6 | 166 | if(c != ' ' && c != ';'){ |
| lucasfontenla | 27:3bbc354adea6 | 167 | buffer.push_back(c); |
| lucasfontenla | 27:3bbc354adea6 | 168 | } else if(toAdd[5]){ |
| lucasfontenla | 27:3bbc354adea6 | 169 | path[2][line_number] = atof(buffer.c_str()); |
| lucasfontenla | 27:3bbc354adea6 | 170 | buffer = ""; |
| lucasfontenla | 27:3bbc354adea6 | 171 | toAdd[5] = 0; |
| lucasfontenla | 27:3bbc354adea6 | 172 | //printf("M: %f\r\n", path[2][line_number]); |
| lucasfontenla | 27:3bbc354adea6 | 173 | } |
| lucasfontenla | 27:3bbc354adea6 | 174 | } |
| lucasfontenla | 27:3bbc354adea6 | 175 | } |
| lucasfontenla | 27:3bbc354adea6 | 176 | |
| lucasfontenla | 27:3bbc354adea6 | 177 | if(toAdd[1]){ |
| lucasfontenla | 27:3bbc354adea6 | 178 | points[0][line_number] = points[0][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 179 | } |
| lucasfontenla | 27:3bbc354adea6 | 180 | |
| lucasfontenla | 27:3bbc354adea6 | 181 | if(toAdd[2]){ |
| lucasfontenla | 27:3bbc354adea6 | 182 | points[1][line_number] = points[1][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 183 | } |
| lucasfontenla | 27:3bbc354adea6 | 184 | |
| lucasfontenla | 27:3bbc354adea6 | 185 | if(toAdd[3]){ |
| lucasfontenla | 27:3bbc354adea6 | 186 | points[2][line_number] = points[2][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 187 | } |
| lucasfontenla | 27:3bbc354adea6 | 188 | |
| lucasfontenla | 27:3bbc354adea6 | 189 | if(toAdd[4]){ |
| lucasfontenla | 27:3bbc354adea6 | 190 | path[1][line_number] = path[1][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 191 | } |
| lucasfontenla | 27:3bbc354adea6 | 192 | |
| lucasfontenla | 27:3bbc354adea6 | 193 | if(toAdd[5]){ |
| lucasfontenla | 27:3bbc354adea6 | 194 | path[2][line_number] = path[2][line_number-1]; |
| lucasfontenla | 27:3bbc354adea6 | 195 | } |
| lucasfontenla | 27:3bbc354adea6 | 196 | |
| lucasfontenla | 27:3bbc354adea6 | 197 | 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 | 198 | } |
| lucasfontenla | 27:3bbc354adea6 | 199 | |
| lucasfontenla | 27:3bbc354adea6 | 200 | void set_variables(int G, int X_val, int Y_val, int Z_val, int F, int M){ |
| lucasfontenla | 27:3bbc354adea6 | 201 | gotX = X_val; |
| lucasfontenla | 27:3bbc354adea6 | 202 | gotY = Y_val; |
| lucasfontenla | 27:3bbc354adea6 | 203 | gotZ = Z_val; |
| lucasfontenla | 27:3bbc354adea6 | 204 | gotF = F; |
| lucasfontenla | 27:3bbc354adea6 | 205 | gotG = G; |
| lucasfontenla | 27:3bbc354adea6 | 206 | gotM = M; |
| lucasfontenla | 27:3bbc354adea6 | 207 | } |
| lucasfontenla | 27:3bbc354adea6 | 208 | |
| lucasfontenla | 27:3bbc354adea6 | 209 | void sendSaved(void){ |
| lucasfontenla | 27:3bbc354adea6 | 210 | string buffer = "u"; |
| lucasfontenla | 27:3bbc354adea6 | 211 | char buffer_char[8]; |
| lucasfontenla | 27:3bbc354adea6 | 212 | int n; |
| lucasfontenla | 27:3bbc354adea6 | 213 | |
| lucasfontenla | 30:27838f6fdfd6 | 214 | for(int i = 0; i < saved; i++){ |
| lucasfontenla | 27:3bbc354adea6 | 215 | buffer.append("G"); |
| lucasfontenla | 27:3bbc354adea6 | 216 | n = sprintf(buffer_char, "%d ", (int)path[0][i]); |
| lucasfontenla | 27:3bbc354adea6 | 217 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 218 | |
| lucasfontenla | 27:3bbc354adea6 | 219 | buffer.append("X"); |
| lucasfontenla | 27:3bbc354adea6 | 220 | n = sprintf(buffer_char, "%.3f ", points[0][i]); |
| lucasfontenla | 27:3bbc354adea6 | 221 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 222 | |
| lucasfontenla | 27:3bbc354adea6 | 223 | buffer.append("Y"); |
| lucasfontenla | 27:3bbc354adea6 | 224 | n = sprintf(buffer_char, "%.3f ", points[1][i]); |
| lucasfontenla | 27:3bbc354adea6 | 225 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 226 | |
| lucasfontenla | 27:3bbc354adea6 | 227 | buffer.append("Z"); |
| lucasfontenla | 27:3bbc354adea6 | 228 | n = sprintf(buffer_char, "%.3f ", points[2][i]); |
| lucasfontenla | 27:3bbc354adea6 | 229 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 230 | |
| lucasfontenla | 27:3bbc354adea6 | 231 | buffer.append("F"); |
| lucasfontenla | 27:3bbc354adea6 | 232 | n = sprintf(buffer_char, "%.2f ", path[1][i]); |
| lucasfontenla | 27:3bbc354adea6 | 233 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 234 | |
| lucasfontenla | 27:3bbc354adea6 | 235 | buffer.append("M"); |
| lucasfontenla | 27:3bbc354adea6 | 236 | n = sprintf(buffer_char, "%d ", (int)path[2][i]); |
| lucasfontenla | 27:3bbc354adea6 | 237 | buffer.append(buffer_char); |
| lucasfontenla | 27:3bbc354adea6 | 238 | |
| lucasfontenla | 30:27838f6fdfd6 | 239 | if(i == (saved-1)){ |
| lucasfontenla | 27:3bbc354adea6 | 240 | buffer.append(";"); |
| lucasfontenla | 27:3bbc354adea6 | 241 | } else { |
| lucasfontenla | 27:3bbc354adea6 | 242 | buffer.append("\r\n"); |
| lucasfontenla | 27:3bbc354adea6 | 243 | } |
| lucasfontenla | 27:3bbc354adea6 | 244 | } |
| lucasfontenla | 27:3bbc354adea6 | 245 | |
| lucasfontenla | 27:3bbc354adea6 | 246 | printf("Sending: %s\n\r", buffer); |
| lucasfontenla | 27:3bbc354adea6 | 247 | send(buffer); |
| lucasfontenla | 27:3bbc354adea6 | 248 | } |
| lucasfontenla | 24:92f612ca218b | 249 | |
| lucasfontenla | 24:92f612ca218b | 250 | private: |
| lucasfontenla | 24:92f612ca218b | 251 | |
| lucasfontenla | 24:92f612ca218b | 252 | // PRIVATE FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------- |
| lucasfontenla | 24:92f612ca218b | 253 | void send(string msg){ |
| lucasfontenla | 24:92f612ca218b | 254 | msg.append("x"); |
| lucasfontenla | 24:92f612ca218b | 255 | |
| lucasfontenla | 24:92f612ca218b | 256 | for(int i = 0; i < msg.length(); i++){ |
| lucasfontenla | 24:92f612ca218b | 257 | ihm.putc(msg[i]); |
| lucasfontenla | 30:27838f6fdfd6 | 258 | wait_ms(10); |
| lucasfontenla | 24:92f612ca218b | 259 | } |
| lucasfontenla | 26:f891ff6beb33 | 260 | printf("Sent\n\r"); |
| lucasfontenla | 24:92f612ca218b | 261 | } |
| lucasfontenla | 24:92f612ca218b | 262 | }; |