Código para o menu no LCD
Dependencies: mbed SDFileSystemSD TextLCD
Fork of TextLCD_HelloWorld2 by
classes.h
- Committer:
- claraluques
- Date:
- 2018-05-23
- Revision:
- 33:0149960e95c1
- Parent:
- 32:c293f89170b0
- Child:
- 34:7c7fac39a250
- Child:
- 45:6701e27510f9
File content as of revision 33:0149960e95c1:
#define tx PC_10 #define rx PC_11 Serial Mach(tx, rx); Timer t; string file_name; vector <string> filenames; class Machine { int n; string buffer; char buffer_char[2]; public: int debug; // PUBLIC FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------- void move_to(float x, float y, float z, string type, int speed){ } void move(int x_axis, int y_axis, int z_axis, float pct_speed){ buffer = ""; buffer.append("f"); //buffer.append("X"); n = sprintf(buffer_char, "%d", x_axis); buffer.append(buffer_char); //buffer.append("Y"); n = sprintf(buffer_char, "%d", y_axis); buffer.append(buffer_char); //buffer.append("Z"); n = sprintf(buffer_char, "%d", z_axis); buffer.append(buffer_char); buffer.append("F"); n = sprintf(buffer_char, "%.2f", pct_speed); buffer.append(buffer_char); send(buffer); } void save_point(int mode, float pct_speed){ buffer = ""; buffer.append("s"); n = sprintf(buffer_char, "M%d", mode); buffer.append(buffer_char); n = sprintf(buffer_char, "F%.2f", pct_speed); buffer.append(buffer_char); send(buffer); } void start_program(void){ send("b"); printf("b\n\r"); } void cancel_program(void){ send("c"); } void get_status(void){ send("s"); } void machine_zero(void){ send("zm"); } void set_zero(string axis){ buffer = ""; buffer.append("z"); buffer+=axis; send(buffer); } void jog(void){ send("j"); printf("j\n\r"); } void kill_jog(void){ send("jk"); printf("jk\n\r"); } void reset (void){ send("r"); } void upload_gcode(string gcode){ buffer = ""; buffer.append("u"); buffer.append(gcode); send(buffer); } void get_saved_points(void){ send("l"); } private: // PRIVATE FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------- void send(string msg){ msg.append("x"); for(int i = 0; i < msg.length(); i++){ Mach.putc(msg[i]); wait_ms(20); } } }; Machine machine; SDFileSystem sd(PB_15, PB_14, PB_13, PB_1, "sd"); //MOSI - D4, MISO - D5, SCLK - D3, CS - D7 DIR *dp; string folderString = "Programas"; class SDCard{ public: int save_GCODE(string name, string gcode){ string file_path = "/sd/" + folderString + "/" + name; char * path = str_to_char(file_path); printf(path); printf("going...\n\r"); FILE *fp = fopen(path, "w"); if(fp == NULL) { error("Could not open file for write\n\r"); return 0; } char * write_file = str_to_char(gcode); fprintf(fp, write_file); fclose(fp); printf("Cool\n\r"); return 1; } int send_gcode(string name){ string file_path = "/sd/" + folderString + "/" + name; char * path = str_to_char(file_path); unsigned char c; string buffer; printf(path); printf("going...\n\r"); FILE *fp = fopen(path, "r"); if(fp == NULL) { error("Could not open file for write\n\r"); return 0; } t.start(); while(1){ if(t.read() > 4.0){ fclose(fp); return 0; } c = fgetc(fp); printf("%c\n\r", c); buffer.push_back(c); if(c == ';'){ fclose(fp); break; } } fclose(fp); printf("%s\n\r", buffer); machine.upload_gcode(buffer); return 1; } int check_name_available(string name){ string file_path = "/sd/" + folderString; char * dir = str_to_char(file_path); struct dirent *dirp; string filename; printf(dir); dp = opendir(dir); t.start(); while((dirp = readdir(dp)) != NULL) { if(t.read() > 2.0){ t.stop(); closedir(dp); return 0; } filename = (dirp->d_name); printf("%s\n\r", filename); if(filename == name){ closedir(dp); return 0; } } closedir(dp); return 1; } int get_file_names(void){ string file_path = "/sd/" + folderString; char * dir = str_to_char(file_path); struct dirent *dirp; string filename; filenames.empty(); printf(dir); dp = opendir(dir); while((dirp = readdir(dp)) != NULL) { filename = (dirp->d_name); printf("%s\n\r", filename); filenames.push_back(filename); } return 1; } int create_folders(void){ int gotFolder = 0; string filename; struct dirent *dirp; dp = opendir("/sd"); t.start(); while((dirp = readdir(dp)) != NULL) { if(t.read() > 2){ t.stop(); return 0; } filename = (dirp->d_name); printf("%s\n\r", filename); if(filename == folderString){ gotFolder = 1; } } if(!gotFolder){ char * path = str_to_char(("/sd/" + folderString)); mkdir(path, 0777); } closedir(dp); return 1; } private: char * str_to_char(string str){ char * path = new char[str.length() + 1]; std::strcpy(path, str.c_str()); return path; } }; SDCard sdcard; //criar classe "menu" (funções para as telas) class Menu{ public: int linha; int func; string nome; void movercursor(int min, int max, int col){ //função para mover cursor de seleção linha = min; lcd.locate(col,min); lcd.printf("%c", 0x3E); while (bot_enter==penter){ if (bot_cima==0){ if (linha==min){ lcd.locate(col,min); lcd.printf(" "); linha=max; lcd.locate(col, linha); lcd.printf("%c", 0x3E); } else { lcd.locate(col,linha); lcd.printf(" "); linha--; lcd.locate(col, linha); lcd.printf("%c", 0x3E); } bot_cima = 1; } else if (bot_baixo==0){ if (linha==max){ lcd.locate(col,max); lcd.printf(" "); linha=min; lcd.locate(col, linha); lcd.printf("%c", 0x3E); } else { lcd.locate(col,linha); lcd.printf(" "); linha++; lcd.locate(col, linha); lcd.printf("%c", 0x3E); } bot_baixo = 1; } } } //func 0 void inicializar(){ //função tela incial de boas-vindas int status; printf("Starting...\n\r"); machine.reset(); lcd.cls(); lcd.locate(4,0); lcd.printf("Bem-vindo(a)"); lcd.locate(0,1); lcd.printf("Utilize seu EPI para operar a maquina."); wait(1); /*status = sdcard.get_file_names(); if(status){ printf("Filenames: \n\r"); for(int i = 0; i < filenames.size(); i++){ printf("%s\n\r", filenames[i]); } }*/ func = 1; } //func 1 void menuprincipal(){ //função menu principal bot_enter = penter; lcd.cls(); lcd.locate(1,0); lcd.printf("Modo JOG"); lcd.locate(1,1); lcd.printf("Modo Automatico"); lcd.locate(1,2); lcd.printf("Zerar"); lcd.locate(1,3); lcd.printf("Config"); movercursor(0,3,0); if (bot_enter!=penter){ if (linha==0){ func = 2; } else if (linha==1) { func = 3; } else if (linha==2) { func = 8; } else if (linha==3) { func = 4; } } } //func 2 void jog(){ //função tela jog lcd.cls(); bot_enter = penter; machine.kill_jog(); wait(0.1); machine.jog(); lcd.locate(4,0); lcd.printf(""); lcd.locate(6,1); lcd.printf("Salvar"); lcd.locate(6,2); lcd.printf("Concluir"); lcd.locate(6,3); lcd.printf("Cancelar"); movercursor(1,3,5); if (bot_enter!=penter){ if (linha==1){ if (pontos==0 && maxpontos>10){ cx_salva = 0; cy_salva = 0; cz_salva = 0; pontos++; maxpontos--; func = 22; } else if (pontos>=1 && maxpontos>10){ cx_salva = cx; cy_salva = cy; cz_salva = cz; pontos++; maxpontos--; func = 22; } else if (maxpontos<=10){ cx_salva = cx; cy_salva = cy; cz_salva = cz; pontos++; maxpontos--; func = 5; } else if (maxpontos==0){ func = 16; } } else if (linha==2) { machine.kill_jog(); func = 17; } else if (linha==3) { machine.kill_jog(); wait(0.1); machine.cancel_program(); func = 1; pontos = 10; } } } //func 3 void automatico(){ //tela modo automatico lcd.cls(); bot_enter = penter; lcd.printf("Modo automatico"); lcd.locate(7,2); lcd.printf("OK"); lcd.locate(7,3); lcd.printf("Voltar"); movercursor(2,3,6); if (bot_enter!=penter) { if (linha==2){ func = 12; } else if (linha==3){ func = 1; } } } //func 4 void config() { lcd.cls(); bot_enter = penter; //printf("%d,tela\n\r", penter); lcd.locate(1,0); lcd.printf("Definir velocidade"); lcd.locate(1,1); lcd.printf("Limpar seringa cola"); lcd.locate(1,2); lcd.printf("Origem maquina"); lcd.locate(1,3); lcd.printf("Voltar"); movercursor(0,3,0); if (bot_enter!=penter){ if (linha==0) { func = 13; } else if (linha==1) { func = 14; } else if (linha==2) { home = 1; func = 18; } else if (linha==3) { func = 1; } } } //func 5 void telasalvamento(){ //função para quando salvar um ponto lcd.cls(); lcd.locate(0,0); lcd.printf("Voce salvou"); lcd.locate(1,1); lcd.printf("X:%.2f ", cx_salva); lcd.locate(1,2); lcd.printf("Y:%.2f ", cy_salva); lcd.locate(1,3); lcd.printf("Z:%.2f ", cz_salva); lcd.locate(13,1); lcd.printf("Pontos"); lcd.locate(13,2); lcd.printf("livres"); lcd.locate(16,3); lcd.printf("%d", maxpontos); wait(1); if (pontos>0){ func = 6; } else if (pontos==0){ func = 2; } } //func 6 void telacola(){ //tela para escolher o tipo de sequencia da cola lcd.cls(); bot_enter = penter; lcd.printf("P/ o proximo ponto:"); lcd.locate(3,1); lcd.printf("Sem cola"); lcd.locate(3,2); lcd.printf("Cola no ponto"); lcd.locate(3,3); lcd.printf("Cola continua"); movercursor(1,3,2); if (bot_enter!=penter){ if (linha==1){ cola = 0; func = 2; } else if (linha==2) { cola = 1; func = 2; } else if (linha==3) { cola = 2; func = 2; } machine.save_point(cola,2); } } //func 7 void executarprograma() { //tela para selecionar se deseja executar o programa lcd.cls(); bot_enter = penter; lcd.locate(2,0); lcd.printf("VOCE CONCLUIU SEU"); lcd.locate(5,1); lcd.printf("PROGRAMA."); lcd.locate(0,2); lcd.printf("Deseja"); lcd.locate(0,3); lcd.printf("executa-lo?"); lcd.locate(14,2); lcd.printf("Sim"); lcd.locate(14,3); lcd.printf("Voltar"); movercursor(2,3,13); if (bot_enter!=penter) { if (linha==2){ machine.kill_jog(); wait(0.1); //machine.start_program(); exec = 1; func = 9; } else if (linha==3){ exec = 0; func = 2; } } } //func 8 void telazerar(){ //tela para zerar a máquina lcd.cls(); bot_enter = penter; machine.kill_jog(); machine.jog(); lcd.locate(2,0); lcd.printf("Zerar:"); lcd.locate(0,1); lcd.printf("X:"); lcd.locate(0,2); lcd.printf("Y:"); lcd.locate(0,3); lcd.printf("Z:"); lcd.locate(13,0); lcd.printf("X"); lcd.locate(13,1); lcd.printf("Y"); lcd.locate(13,2); lcd.printf("Z"); lcd.locate(13,3); lcd.printf("Voltar"); movercursor(0,3,12); if (bot_enter!=penter) { if (linha==0){ cx = 0; func = 10; machine.set_zero("X"); } else if (linha==1){ cy = 0; func = 10; machine.set_zero("Y"); } else if (linha==2){ cz = 0; func = 10; machine.set_zero("Z"); } else if (linha==3){ func = 1; machine.kill_jog(); } } } //func 9 void executando(){ //tela de executando lcd.cls(); machine.start_program(); lcd.locate(4,1); lcd.printf("Executando"); while (exec == 1){ if (Mach.readable()){ readSerial(); }/* lcd.locate(14,1); lcd.printf(". "); wait(0.5); lcd.locate(14,1); lcd.printf(".. "); wait(0.5); lcd.locate(14,1); lcd.printf("..."); wait(0.5); lcd.locate(14,1); lcd.printf(" "); wait(0.5);*/ } printf("saiu\n\r"); func = 11; } //func 10 void zerado() { //tela avisando que a máquina foi zerada lcd.cls(); lcd.locate(5,1); lcd.printf("Voce zerou"); lcd.locate(6,2); lcd.printf("o eixo!"); wait(1); func = 8; } //func 11 void finalizado() { //tela aviso programa finalizado lcd.cls(); lcd.locate(6,1); lcd.printf("PROGRAMA"); lcd.locate(5,2); lcd.printf("FINALIZADO"); wait(1); func = 1; } //func 12 //func 13 //func 14 //func 15 void gohome(){ lcd.cls(); machine.machine_zero(); while (home == 1){ if (Mach.readable()){ readSerial(); } } func = 19; } //func 16 void limitepontos(){ //tela para quando acabam os pontos lcd.cls(); lcd.printf(" Voce atingiu o n%c maximo de pontos", 0xDF); lcd.locate(9,2); lcd.printf("(%d)", pontos); lcd.locate(0,3); lcd.printf("Conclua seu programa"); wait(1); func = 2; } //func 17 void salvarprog(){ lcd.cls(); bot_enter = penter; lcd.printf("Voce deseja salvar este programa?"); lcd.locate(5,2); lcd.printf("Sim"); lcd.locate(5,3); lcd.printf("Nao"); movercursor(2,3,4); if (bot_enter!=penter){ if (linha==2){ salvar = 1; //printf("salvar\n\r"); func = 20; } if (linha==3){ salvar = 0; func = 7; } } } //func 18 void ctzhome(){ lcd.cls(); bot_enter = penter; lcd.printf("Certifique-se de que a maquina pode se"); lcd.locate(5,2); lcd.printf("movimentar"); lcd.locate(9,3); lcd.printf("OK"); movercursor(3,3,8); if (bot_enter!=penter){ if (linha==3){ func = 15; } } } //func 19 void origem(){ lcd.cls(); lcd.locate(5,1); lcd.printf("A MAQUINA"); lcd.locate(2,2); lcd.printf("ESTA NA ORIGEM"); wait(1); func = 4; } //func 20 void nomeprog(){ nome = ""; sair = 0; voltar = 0; coluna = 1; lcd.cls(); bot_enter = penter; escrever(); //lcd.setCursor(TextLCD::CurOff_BlkOff); if (sair==1){ int len = nome.length(); printf("%d\n\r", len); nome.erase(len - 1); nome.append(".txt"); printf("%s\n\r", nome); int verificar = sdcard.check_name_available(nome); printf("%d", verificar); if (verificar==1){ file_name = nome; machine.get_saved_points(); printf("ok\n\r"); func = 7; } else if (verificar==0){ func = 20; printf("nok\n\r"); } } } //func 21 void mudar_nome(){ lcd.cls(); wait(1); func = 20; } //func 22 void salva2(){ lcd.cls(); lcd.locate(0,0); lcd.printf("Voce salvou o ponto:"); lcd.locate(5,1); lcd.printf("X:"); lcd.locate(5,2); lcd.printf("Y:"); lcd.locate(5,3); lcd.printf("Z:"); //x if (cx<=-1 && cx>=-9){ lcd.locate(7,1); lcd.printf(" %.2f ", cx); } if (cx<=-10 && cx>=-99){ lcd.locate(7,1); lcd.printf(" %.2f ", cx); } if (cx<=-100){ lcd.locate(7,1); lcd.printf("%.2f ", cx); } if (cx<=9 && cx>=0){ lcd.locate(7,1); lcd.printf(" %.2f ", cx); } if (cx>=10 && cx<=99){ lcd.locate(7,1); lcd.printf(" %.2f ", cx); } if (cx>=100){ lcd.locate(7,1); lcd.printf(" %.2f ", cx); } //y if (cy<=-1 && cy>=-9){ lcd.locate(7,2); lcd.printf(" %.2f ", cy); } if (cy<=-10 && cx>=-99){ lcd.locate(7,2); lcd.printf(" %.2f ", cy); } if (cy<=-100){ lcd.locate(7,2); lcd.printf("%.2f ", cy); } if (cy<=9 && cy>=0){ lcd.locate(7,2); lcd.printf(" %.2f ", cy); } if (cy>=10 && cx<=99){ lcd.locate(7,2); lcd.printf(" %.2f ", cy); } if (cy>=100){ lcd.locate(7,2); lcd.printf(" %.2f ", cy); } //z if (cz<=-1 && cz>=-9){ lcd.locate(7,3); lcd.printf(" %.2f ", cz); } if (cz<=-10 && cx>=-99){ lcd.locate(7,3); lcd.printf(" %.2f ", cz); } if (cz<=-100){ lcd.locate(7,3); lcd.printf("%.2f ", cz); } if (cz<=9 && cz>=0){ lcd.locate(7,3); lcd.printf(" %.2f ", cz); } if (cz>=10 && cx<=99){ lcd.locate(7,3); lcd.printf(" %.2f ", cz); } if (cz>=100){ lcd.locate(7,3); lcd.printf(" %.2f ", cz); } wait(1); func = 6; } //função para escrever nome arquivo void escrever(){ char alfabeto[38] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', '0','1','2','3','4','5','6','7','8','9','-','_'}; int imax = 37; int imin = 0; //lcd.locate(1,1); while (sair==0){ voltar = 0; int i = 0; //lcd.locate(0,2); //lcd.setCursor(TextLCD::CurOn_BlkOn); lcd.locate(1,1); lcd.printf("%s", nome); while (bot_enter==penter){ if (bot_cima == 0){ if (i==imin){ i = imax; } else if (i>imin && i<=imax){ i--; } bot_cima = 1; } else if (bot_baixo == 0){ if (i==imax){ i = imin; } else if (i<imax && i>=imin){ i++; } bot_baixo = 1; } lcd.locate(coluna, 1); lcd.printf("%c", alfabeto[i]); lcd.locate(coluna,2); lcd.printf("%c", 0x5E); } if (coluna<=18){ char carac = alfabeto[i]; nome.push_back(carac); printf("%s\n\r", nome); bot_enter = penter; if (coluna<18){ if (voltar==1){ printf("voltar\n\r"); if (coluna>1){ //nome[coluna-1]=""; lcd.locate(coluna, 1); lcd.printf(" "); lcd.locate(coluna, 2); lcd.printf(" "); coluna--; nome.erase(coluna-1); lcd.locate(coluna, 2); lcd.printf("%c", 0x5E); } } if (voltar==0){ lcd.locate(coluna, 2); lcd.printf(" "); coluna++; lcd.locate(coluna, 2); lcd.printf("%c", 0x5E); } } /*char carac = alfabeto[i]; nome.push_back(carac); printf("%s\n\r", nome); bot_enter = penter;*/ } } } //função para ler os pontos void readSerial(){ char recv; int points = 0; int pointx = 0; int pointy = 0; int pointz = 0; int action = 0; int uploading_saved = 0; string coordx = ""; string coordy = ""; string coordz = ""; string recv_buffer; while(1){ recv = Mach.getc(); printf("%c\n\r", recv); if (recv == 'a'){ home = 0; exec = 0; printf("oi\n\r"); action = 1; } if (recv == 'p'){ points = 1; } if(recv == 'u'){ uploading_saved = 1; } if (points){ if (recv == 'X'){ pointx = 1; pointy = 0; pointz = 0; } else if (recv == 'Y'){ pointy = 1; pointx = 0; pointz = 0; } else if (recv == 'Z'){ pointz = 1; pointx = 0; pointy = 0; } else if (recv == 'x'){ cx = atof(coordx.c_str()); cy = atof(coordy.c_str()); cz = atof(coordz.c_str()); printf("%s,%s,%s\n\r", coordx, coordy, coordz); break; } } if (pointx){ if (recv!='X'){ coordx.push_back(recv); } } if (pointy){ if (recv!='Y'){ coordy.push_back(recv); } } if (pointz){ if (recv!='Z'){ coordz.push_back(recv); } } if (action){ if (recv=='x'){ break; } } if(recv == 'x' && uploading_saved){ sdcard.save_GCODE(file_name, recv_buffer); break; } else if(uploading_saved && recv != 'u'){ recv_buffer.push_back(recv); } } } Menu(); //não apagar };