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

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