2 Motores + Joystick
Dependencies: X_NUCLEO_IHM01A1 TextLCD
Fork of HelloWorld_IHM01A1_2Motors_mbedOS by
Revision 60:9f4d34edef70, committed 2018-05-29
- 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;
- }
+ }*/
}
-
+}
