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.
Diff: classes.h
- Revision:
- 27:3bbc354adea6
- Parent:
- 26:f891ff6beb33
- Child:
- 30:27838f6fdfd6
diff -r f891ff6beb33 -r 3bbc354adea6 classes.h
--- a/classes.h Thu May 17 23:08:43 2018 +0000
+++ b/classes.h Sun May 20 19:34:20 2018 +0000
@@ -5,11 +5,24 @@
Serial ihm(tx, rx); //tx e rx (D1 e D0)
+int saved = 2;
+const int maxPoints = 100;
+float points[3][maxPoints]; // [0] X; [1] Y; [2] Z;
+float path[3][maxPoints]; // [0] mode [1] speed; [2] glue;
+int resting_points = 0;
+
class IHM {
int n;
string buffer;
char buffer_char[8];
+ int gotX;
+ int gotY;
+ int gotZ;
+ int gotF;
+ int gotG;
+ int gotM;
+
public:
int debug;
@@ -33,6 +46,206 @@
void action_complete(void){
send("a");
}
+
+ void read_gcode(string gcode){
+ string buffer;
+ char c;
+ saved = 0;
+
+ printf("\nGcode: %s\n\n\r", gcode);
+
+ for(int i = 0; i < gcode.size(); i++){
+ c = gcode[i];
+ if(c == '\r'){
+ translate_gcode(buffer, saved);
+ saved++;
+ buffer = "";
+ } else if(c == ';'){
+ buffer.push_back(c);
+ translate_gcode(buffer, saved);
+ break;
+ } else if(c != '\n'){
+ buffer.push_back(c);
+ }
+ }
+ }
+
+ void translate_gcode(string line, int line_number){
+ char c;
+ string buffer;
+ int toAdd[6] = {1, 1, 1, 1, 1, 1} ;
+
+ line.append(" ");
+
+ gotX = 0;
+ gotY = 0;
+ gotZ = 0;
+ gotF = 0;
+ gotG = 0;
+ gotM = 0;
+
+ //printf("Line: %s No: %d\r\n", line, line_number);
+ for(int i = 0; i < line.size(); i++){
+ c = line[i];
+
+ if(c == 'G'){
+ set_variables(1, 0, 0, 0, 0, 0);
+ }
+ if(c == 'X'){
+ set_variables(0, 1, 0, 0, 0, 0);
+ }
+ if(c == 'Y'){
+ set_variables(0, 0, 1, 0, 0, 0);
+ }
+ if(c == 'Z'){
+ set_variables(0, 0, 0, 1, 0, 0);
+ }
+ if(c == 'F'){
+ set_variables(0, 0, 0, 0, 1, 0);
+ }
+ if(c == 'M'){
+ set_variables(0, 0, 0, 0, 0, 1);
+ }
+
+ if(gotG && c != 'G'){
+ if(c != ' ' && c != ';'){
+ buffer.push_back(c);
+ } else if(toAdd[0]){
+ path[0][line_number] = atof(buffer.c_str());
+ buffer = "";
+ toAdd[0] = 0;
+ //printf("G: %f\r\n", path[0][line_number]);
+ }
+ }
+
+ if(gotX && c != 'X'){
+ if(c != ' ' && c != ';'){
+ buffer.push_back(c);
+ } else if(toAdd[1]){
+ points[0][line_number] = atof(buffer.c_str());
+ buffer = "";
+ toAdd[1] = 0;
+ //printf("X: %f\r\n", points[0][line_number]);
+ }
+ }
+
+ if(gotY && c != 'Y'){
+ if(c != ' ' && c != ';'){
+ buffer.push_back(c);
+ } else if(toAdd[2]){
+ points[1][line_number] = atof(buffer.c_str());
+ buffer = "";
+ toAdd[2] = 0;
+ //printf("Y: %f\r\n", points[1][line_number]);
+ }
+ }
+
+ if(gotZ && c != 'Z'){
+ if(c != ' ' && c != ';'){
+ buffer.push_back(c);
+ } else if(toAdd[3]){
+ points[2][line_number] = atof(buffer.c_str());
+ buffer = "";
+ toAdd[3] = 0;
+ //printf("Z: %f\r\n", points[2][line_number]);
+ }
+ }
+
+ if(gotF && c != 'F'){
+ if(c != ' ' && c != ';'){
+ buffer.push_back(c);
+ } else if(toAdd[4]){
+ path[1][line_number] = atof(buffer.c_str());
+ buffer = "";
+ toAdd[4] = 0;
+ //printf("F: %f\r\n", path[1][line_number]);
+ }
+ }
+
+ if(gotM && c != 'M'){
+ if(c != ' ' && c != ';'){
+ buffer.push_back(c);
+ } else if(toAdd[5]){
+ path[2][line_number] = atof(buffer.c_str());
+ buffer = "";
+ toAdd[5] = 0;
+ //printf("M: %f\r\n", path[2][line_number]);
+ }
+ }
+ }
+
+ if(toAdd[1]){
+ points[0][line_number] = points[0][line_number-1];
+ }
+
+ if(toAdd[2]){
+ points[1][line_number] = points[1][line_number-1];
+ }
+
+ if(toAdd[3]){
+ points[2][line_number] = points[2][line_number-1];
+ }
+
+ if(toAdd[4]){
+ path[1][line_number] = path[1][line_number-1];
+ }
+
+ if(toAdd[5]){
+ path[2][line_number] = path[2][line_number-1];
+ }
+
+ 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]);
+ }
+
+ void set_variables(int G, int X_val, int Y_val, int Z_val, int F, int M){
+ gotX = X_val;
+ gotY = Y_val;
+ gotZ = Z_val;
+ gotF = F;
+ gotG = G;
+ gotM = M;
+ }
+
+ void sendSaved(void){
+ string buffer = "u";
+ char buffer_char[8];
+ int n;
+
+ for(int i = 0; i <= saved; i++){
+ buffer.append("G");
+ n = sprintf(buffer_char, "%d ", (int)path[0][i]);
+ buffer.append(buffer_char);
+
+ buffer.append("X");
+ n = sprintf(buffer_char, "%.3f ", points[0][i]);
+ buffer.append(buffer_char);
+
+ buffer.append("Y");
+ n = sprintf(buffer_char, "%.3f ", points[1][i]);
+ buffer.append(buffer_char);
+
+ buffer.append("Z");
+ n = sprintf(buffer_char, "%.3f ", points[2][i]);
+ buffer.append(buffer_char);
+
+ buffer.append("F");
+ n = sprintf(buffer_char, "%.2f ", path[1][i]);
+ buffer.append(buffer_char);
+
+ buffer.append("M");
+ n = sprintf(buffer_char, "%d ", (int)path[2][i]);
+ buffer.append(buffer_char);
+
+ if(i == (saved)){
+ buffer.append(";");
+ } else {
+ buffer.append("\r\n");
+ }
+ }
+
+ printf("Sending: %s\n\r", buffer);
+ send(buffer);
+ }
private: