Grupo T / Mbed OS GRUPOT
Committer:
lucasfontenla
Date:
Tue Feb 26 00:55:02 2019 +0000
Revision:
36:4d0e131146e6
Parent:
32:5bd3f0d073ac
Uploading for Projeto Mecatronico 2019

Who changed what in which revision?

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