Grupo T / Mbed OS GRUPOT
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?

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 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 };