2 Motores + Joystick

Dependencies:   X_NUCLEO_IHM01A1 TextLCD

Fork of HelloWorld_IHM01A1_2Motors_mbedOS by ST

Files at this revision

API Documentation at this revision

Comitter:
digo1234
Date:
Tue May 29 18:58:40 2018 +0000
Parent:
59:8d34a4bfc2b7
Child:
61:b7ef7d06c57b
Commit message:
tudo good, menos a calibra??o;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed May 23 19:53:32 2018 +0000
+++ b/main.cpp	Tue May 29 18:58:40 2018 +0000
@@ -92,7 +92,8 @@
 TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD20x4);                  // I2C exp: I2C bus, PCF8574 Slaveaddress, LCD Type
 
 int menu=0;
-float xmenu=1.0, ymenu=2.0, zmenu=3.0;
+int menu_memoria=0;
+//float xmenu=1.0, ymenu=2.0, zmenu=3.0;
 int inicial= 1;
 int pisca =0;
 float i=0.0;
@@ -141,6 +142,7 @@
 int listaX[20];
 int listaY[20];
 int listaZ[20];
+int listaCola[20];
 
 int index = 0;
 
@@ -149,6 +151,8 @@
 
 int safe = 0;
 int safe_emergencia = 0;
+int safe_menu = 0;
+int safe_eixoY = 0;
 
 unsigned int minspeed = 1300;
 
@@ -185,15 +189,16 @@
     listaY[index] = motor1->get_position();
     listaZ[index] = motor3->get_position();
         for (int j=0; j<=index; j++) {
-            printf("posX%d %d: \r\n", j, listaX[j]);
-            printf("posY%d %d: \r\n", j, listaY[j]);
-            printf("posZ%d %d: \r\n", j, listaZ[j]);
+            printf("posX%d %d: \r\n", j+1, listaX[j]);
+            printf("posY%d %d: \r\n", j+1, listaY[j]);
+            printf("posZ%d %d: \r\n", j+1, listaZ[j]);
+            printf("Cola? :entre %d e %d %d \r\n", j+1,j, listaCola[j]);
             }
         index = index+1;
         wait_ms(DELAY_2);
     }
 // função percorre caminho
- void vai_caminho_desejado (int listapontosX[20], int listapontosY[20], int listapontosZ[20], int index_local) {
+ void vai_caminho_desejado (int listapontosX[20], int listapontosY[20], int listapontosZ[20], int listapontosCola[20], int index_local) {
     int PYatual = motor1->get_position();
     int PXatual = motor2->get_position();
     int PZatual = motor3->get_position();
@@ -240,28 +245,24 @@
             
     printf("O for vai rodar: %d \r\n", index_local-1);
     for (int i = 1; i< index_local ; i++) {
-        if (i<index_local-1){
-            solenoide.write(1);
-            }
-        else {
+        if (i==index_local-1){
             solenoide.write(0);
             }
-        printf("X deveria estar : %d \r\n", listapontosX[i-1] );
-        printf("Y deveria estar: %d \r\n", listapontosY[i-1]);
-        printf("Z deveria estar: %d \r\n", listapontosZ[i-1]);
-        
-        printf("X quer ir : %d \r\n", listapontosX[i] );
-        printf("Y quer ir: %d \r\n", listapontosY[i]);
-        printf("Z quer ir: %d \r\n", listapontosZ[i]);
+            
+        if (listapontosCola[i] == 0){
+            printf("solenoide desliga %i \r\n",listapontosCola[i]);
+            solenoide.write(1);
+            }
+            
+        else {
+            printf("solenoide liga %i \r\n",listapontosCola[i]);
+            solenoide.write(0);
+            }
         
         calcdeltaX = correcao_passo(listapontosX[i] - listapontosX[i-1]);
         calcdeltaY = correcao_passo(listapontosY[i] - listapontosY[i-1]);
         calcdeltaZ = correcao_passo(listapontosZ[i] - listapontosZ[i-1]);
         
-        printf("X vai andar: %d \r\n", calcdeltaX);
-        printf("Y vai andar: %d \r\n", calcdeltaY);
-        printf("Z vai andar: %d \r\n", calcdeltaZ);
-        
         if (calcdeltaZ > 0) {
         motor3->move(StepperMotor::FWD, calcdeltaZ);
         motor3->wait_while_active();
@@ -330,13 +331,14 @@
             lcd.printf("1-SALVAR PONTOS");
             lcd.setAddress(0,3);
             lcd.printf("2-INICIAR PROGRAMA");
- 
+ printf("programa rodando \r\n");
     while(true) {
         if (!botao1 && !botao2 && !botao3 && !botao4 && !emergencia){
             safe = 0;
             }
-        solenoide.write(0);
+        solenoide.write(1);
         count = count +1;
+        //printf("programa rodando \r\n");
         // Leitura analógica
         u = eixo_X.read();
         w = eixo_Y.read();
@@ -345,8 +347,8 @@
         sp = botao1.read();
         vc = botao2.read();
         if (count == 50) {
-            //printf("w =%f \r\n\n", w);
-            //printf("u =%f \r\n\n", u);
+            //printf("programa rodando \r\n");
+            printf("u =%f \r\n\n", u);
             wait_ms(DELAY_1);
 
             count = 0;
@@ -354,7 +356,7 @@
 
     
  // Movimentando eixo Z cima caso botão 1 apertado
-    if (zu >0.7 && !fim_curso_Z) {
+    if (zu >0.7 && !fim_curso_Z ) {
         motor3->run(StepperMotor::FWD);
         segu_fim_curso = 1;
         Dir_Z = 1;
@@ -362,7 +364,7 @@
         }           
                      
 // Movimentando eixo Z baixo caso botão 2 apertado
-    else if (zd >0.7 && !fim_curso_Z) {
+    else if (zd >0.7 && !fim_curso_Z ) {
         motor3->run(StepperMotor::BWD);
         segu_fim_curso = 1;
         Dir_Z = 0;
@@ -390,17 +392,18 @@
                     }
             }
             
-             
 // Movimentando eixo Y duas direções com joystick       
 // Movimentando eixo Y fwd        
-        if (u>0.820 && !fim_curso_Y) {
+        if (u>0.820 && !fim_curso_Y && !botao1 && !botao2 && zu<0.7 && zd<0.7) {
+            printf("motor y indo para frente");
             motor1->run(StepperMotor::FWD);
             Dir_Y = 1;
             segu_fim_curso = 1;
             wait_ms(DELAY_1);
             }
 // Movimentando eixo Y bwd             
-            else if(u<0.65 && !fim_curso_Y) {
+            else if(u<0.65 && !fim_curso_Y && !botao1 && !botao2 && zu<0.7 && zd<0.7) {
+                printf("motor y indo para tras");
                 motor1->run(StepperMotor::BWD);
                 Dir_Y = 0;
                 segu_fim_curso = 1;
@@ -411,7 +414,7 @@
             else {
                 motor1->hard_stop();
                 wait_ms(DELAY_1);
-                if (fim_curso_Y && segu_fim_curso==1) {
+                if (fim_curso_Y && segu_fim_curso==1 ) {
                     printf("Fim de curso Y apertada \r\n");
                     if (Dir_Y == 1){
                         motor1->move(StepperMotor::BWD, 1000);
@@ -480,16 +483,250 @@
             lcd.printf("PONTOS PERDIDOS");
             lcd.setAddress(0,1);
             lcd.printf("MAQUINA REINICIANDO");
-            lcd.setAddress(5,3);
-            lcd.printf("SE FUDEU");
             wait(2);
             safe_emergencia=0;      
             NVIC_SystemReset();
             }
             
             
+// Menus 
+
+    if (menu == 0 && safe_menu == 0 ){
+        lcd.cls();
+        lcd.setAddress(3,0);
+        lcd.printf("MENU PRINCIPAL");
+        lcd.setAddress(0,2);
+        lcd.printf("1-SALVAR NOVOS PONTOS");
+        lcd.setAddress(0,3);
+        lcd.printf("2-INICIAR PROGRAMA"); 
+        safe_menu = 1;
+        }
+        
+    if (menu == 1 && safe_menu == 0 ) {
+        lcd.cls();
+        lcd.setCursor(TextLCD::CurOff_BlkOff);
+        lcd.setAddress(0,0);
+        lcd.printf("1-SALVAR PONTO %i",index+1);
+        lcd.setAddress(0,1);
+        lcd.printf("2-VOLTAR");
+        lcd.setAddress(0,2);
+        lcd.printf("3-CANCELAR ");
+        lcd.setAddress(0,3);
+        lcd.printf("4-CONCLUIR ");
+        safe_menu = 1;
+        }
+    
+    if (menu == 2 && safe_menu == 0 ) {
+        lcd.cls();
+        lcd.setCursor(TextLCD::CurOff_BlkOff);
+        lcd.setAddress(0,0);
+        lcd.printf("QUER APLICAR COLA ");
+        lcd.setAddress(0,1);
+        lcd.printf("ENTRE PONTO %i E %i",index,index-1);
+        lcd.setAddress(0,3);
+        lcd.printf("1-SIM ");
+        lcd.setAddress(8,3);
+        lcd.printf("2-NAO");
+        safe_menu = 1;
+        }
+    
+    if (menu == 3 && safe_menu == 0 ) {
+        lcd.cls();
+        lcd.setAddress(2,0);
+        lcd.printf("TEM CERTEZA QUE");
+        lcd.setAddress(2,1);
+        lcd.printf("DESEJA CANCELAR?");
+        lcd.setAddress(1,2);
+        lcd.printf("PONTOS IRAO APAGAR");
+        lcd.setAddress(1,4);
+        lcd.printf("1-SIM");
+        lcd.setAddress(10,4);
+        lcd.printf("2-NAO");
+        safe_menu = 1;
+        }
+    
+    if (menu == 4 && safe_menu == 0 ){
+        lcd.cls();
+        lcd.setAddress(0,0);
+        lcd.printf("PONTOS SALVOS");
+        lcd.setAddress(0,2);
+        lcd.printf("1-INICIAR PROGRAMA");
+        lcd.setAddress(0,3);
+        lcd.printf("2-VOLTAR A SALVAR");
+        safe_menu = 1;
+        }
+    
+    if (menu == 5 && safe_menu == 0 ){
+        lcd.cls();
+        lcd.setAddress(0,0);
+        lcd.printf("SALVE SEU PONTO");
+        lcd.setAddress(0,1);
+        lcd.printf("DE RETIRADA");
+        lcd.setAddress(0,4);
+        lcd.printf("1-SALVAR PONTO");
+        safe_menu = 1;
+        }
+        
+    if (menu ==6 && safe_menu == 0) {
+        lcd.cls();
+        lcd.setAddress(0,1);
+        lcd.printf("NAO HA PONTOS SALVOS");
+        wait(2);
+        menu=0;
+        }
+    
+    if (menu == 7 && safe_menu == 0) {    
+        lcd.setAddress(0,1);
+        lcd.printf("AGUARDE...");
+        safe_menu =1;
+        }
+        
+    
+ //   botao1
+ 
+    if (botao1 && menu == 0 && safe == 0){
+        for (int i=0; i<21;i++){
+            listaX[i] = 0;
+            listaY[i] = 0;
+            listaZ[i] = 0;
+            } 
+        index = 0;    
+        menu = 0;
+        menu = 1;
+        safe =1;
+        safe_menu = 0;
+        }
+    
+    if (botao1 && menu == 1 && safe == 0) {
+        if (index<1){
+            listaCola[index-1]=0;
+            salva_posicao();
+            }
+        else {
+            menu = 2;
+            salva_posicao();
+            }
+        safe = 1;
+        safe_menu = 0;
+        }
+    
+    if (botao1 && menu == 2 && safe == 0) {
+        listaCola[index-1]=1;
+        for (int a=0; a<=index; a++){
+            printf("cola : %i \r\n", listaCola[a]);
+            }
+        menu = 1;
+        safe = 1;
+        safe_menu = 0;
+        }
+    
+    if (botao1 && menu == 3 && safe == 0) {
+        for (int i=0; i<21;i++){
+            listaX[i] = 0;
+            listaY[i] = 0;
+            listaZ[i] = 0;
+            } 
+        index = 0;    
+        lcd.cls();
+        lcd.setAddress(0,1);
+        lcd.printf("OPERACAO CANCELADA!");
+        lcd.setAddress(0,2);
+        lcd.printf("PONTOS APAGADOS!");
+        wait(2);
+        menu = 0;
+        safe = 1;
+        safe_menu = 0;
+        }
+    
+    if (botao1 && menu == 4 && safe == 0) {
+
+        menu = 5;
+        safe = 1;
+        safe_menu = 0;
+        }
+    
+    if (botao1 && menu == 5 && safe == 0) {
+        salva_posicao();
+        listaCola[index]=0;
+        lcd.cls();
+        lcd.setAddress(0,1);
+        lcd.printf("AGUARDE...");
+        vai_caminho_desejado(listaX, listaY, listaZ, listaCola, index);
+        menu = 0;
+        safe = 1;
+        safe_menu = 0;
+        }
+        
+// botao2
+
+    if (botao2 && menu == 0  && safe == 0) {
+        if (listaX[1]==0&& listaY[1]==0 && listaZ[1]==0) {
+            menu = 6;
+            }
+        else {
+            vai_caminho_desejado(listaX, listaY, listaZ, listaCola, index);
+            menu = 0;
+            }
+        safe = 1;
+        safe_menu = 0;
+        }
+        
+    if (botao2 && menu == 1  && safe == 0) {
+        listaX[index] = 0;
+        listaY[index] = 0;
+        listaZ[index] = 0; 
+        listaCola[index]=0;
+        index = index - 1;
+        menu = 1;
+        if (index<0){
+            index=0;
+            menu=0;
+            }
+        safe = 1;
+        safe_menu = 0;
+        }
+        
+    if (botao2 && menu == 2  && safe == 0) {
+        listaCola[index-1]=0;
+        for (int a=0; a<=index; a++){
+            printf("cola : %i \r\n", listaCola[a]);
+            }
+        menu=1;
+        safe = 1;
+        safe_menu = 0;
+        }
+    
+    if (botao2 && menu == 3  && safe == 0) {
+        menu = 1;
+        safe = 1;
+        safe_menu = 0;
+        }
+        
+    if (botao2 && menu == 4  && safe == 0) {
+        menu = 1;
+        safe = 1;
+        safe_menu = 0;
+        }
+    
+// botao3 
+
+    if (botao3 && menu == 1  && safe == 0) {
+        menu = 3;
+        safe = 1;
+        safe_menu = 0;
+        }
+        
+// botao4
+    
+    if (botao4 && menu == 1 && safe ==0) {
+        menu = 4;
+        safe = 1;
+        safe_menu = 0;
+        }
+        
+        
 // vai caminho de um programa ja salvo depois do menu inicial     
-    if (botao2 && menu==0 && safe == 0) {
+    /*if (botao2 && menu==0 && safe == 0) {
         lcd.cls();
         if (listaX[1]==0&& listaY[1]==0 && listaZ[1]==0){
             lcd.setAddress(0,1);
@@ -550,7 +787,7 @@
             }
 // vai para tela de salvar pontos       
     if (botao1 && menu == 0 && safe == 0){
-        for (int i=0; i<11;i++){
+        for (int i=0; i<21;i++){
             listaX[i] = 0;
             listaY[i] = 0;
             listaZ[i] = 0;
@@ -560,7 +797,7 @@
         lcd.cls();
         lcd.setCursor(TextLCD::CurOff_BlkOff);
         lcd.setAddress(0,0);
-        lcd.printf("1-SALVAR PONTO %i",menu);
+        lcd.printf("1-SALVAR PONTO %i",index+1);
         lcd.setAddress(0,1);
         lcd.printf("2-VOLTAR");
         lcd.setAddress(0,2);
@@ -568,13 +805,16 @@
         lcd.setAddress(0,3);
         lcd.printf("4-CONCLUIR ");
         safe = 1;
-        wait_ms(DELAY_2);
+        //wait_ms(DELAY_2);
         }
  
 // salva pontos       
     if (botao1 && menu>0 && menu <99 && safe ==0){
+            if (menu ==1 ) {
+                salva_posicao();
+                }
             lcd.cls();
-            salva_posicao();
+           // salva_posicao();
             lcd.setCursor(TextLCD::CurOff_BlkOff);
             lcd.setAddress(0,0);
             lcd.printf("1-SALVAR PONTO %i",menu+1);
@@ -584,9 +824,72 @@
             lcd.printf("3-CANCELAR ");
             lcd.setAddress(0,3);
             lcd.printf("4-CONCLUIR ");
-            menu=menu+1;
+            //menu = menu +1;
+            menu_memoria = menu;
+            menu=104;
+            //menu=menu+1;
             safe=1;
         }
+        
+        
+     if (botao1 && menu==104 && safe ==0 && index>0){
+            lcd.cls();
+             salva_posicao();
+            //menu=menu_memoria;
+            lcd.setCursor(TextLCD::CurOff_BlkOff);
+            lcd.setAddress(0,0);
+            lcd.printf("QUER APLICAR COLA ");
+            lcd.setAddress(0,1);
+            lcd.printf("ENTRE PONTO %i E %i",index,index-1);
+            lcd.setAddress(0,3);
+            lcd.printf("1-SIM ");
+            lcd.setAddress(8,3);
+            lcd.printf("2-NAO");
+            menu=105;
+            safe = 1;
+            }
+    
+    if (botao1 && menu == 105 && safe == 0 && index>0) {
+        lcd.cls();
+        // salva_posicao();
+        listaCola[index]=1;
+        menu = menu_memoria;
+        lcd.setCursor(TextLCD::CurOff_BlkOff);
+        lcd.setAddress(0,0);
+        lcd.printf("1-SALVAR PONTO %i",menu+2);
+        lcd.setAddress(0,1);
+        lcd.printf("2-VOLTAR");
+        lcd.setAddress(0,2);
+        lcd.printf("3-CANCELAR ");
+        lcd.setAddress(0,3);
+        lcd.printf("4-CONCLUIR ");
+        menu = menu+1;
+        menu_memoria = menu;
+        menu = 104;
+        safe = 1;
+        }
+    
+    if (botao2 && menu == 105 && safe == 0 && index>0) {
+        lcd.cls();
+        // salva_posicao();
+        listaCola[index]=0;
+        menu = menu_memoria;
+        lcd.setCursor(TextLCD::CurOff_BlkOff);
+        lcd.setAddress(0,0);
+        lcd.printf("1-SALVAR PONTO %i",menu+2);
+        lcd.setAddress(0,1);
+        lcd.printf("2-VOLTAR");
+        lcd.setAddress(0,2);
+        lcd.printf("3-CANCELAR ");
+        lcd.setAddress(0,3);
+        lcd.printf("4-CONCLUIR ");
+        menu = menu +1;
+        menu_memoria = menu;
+        menu = 104;
+        safe = 1;
+        }
+
+
 // descarta último ponto      
     if (botao2 && menu>1 && menu <99 && safe == 0){
             lcd.cls();  
@@ -636,7 +939,7 @@
             }
 // cancela a operação em definitivo e vai para o menu principal
     if (botao1 && menu==100 && safe == 0){
-        for (int i=0; i<11;i++){
+        for (int i=0; i<21;i++){
             listaX[i] = 0;
             listaY[i] = 0;
             listaZ[i] = 0;
@@ -724,7 +1027,7 @@
         menu=0;
         safe = 1;
         }        
-   /* if (botao2 && menu == 0 && safe == 0) {
+    if (botao2 && menu == 0 && safe == 0) {
         lcd.cls();
         lcd.setAddress(3,0);
         lcd.printf("TEM CERTEZA QUE");
@@ -733,10 +1036,10 @@
         lcd.setAddress(0,3);
         lcd.printf("2-INICIAR PROGRAMA"); 
         menu=0;
-        safe = 1;*/
+        safe = 1;
             
             
-        }
+        }*/
         }   
 
-
+}