2 Motores + Joystick

Dependencies:   X_NUCLEO_IHM01A1 TextLCD

Fork of HelloWorld_IHM01A1_2Motors_mbedOS by ST

Committer:
digo1234
Date:
Tue May 29 19:08:55 2018 +0000
Revision:
61:b7ef7d06c57b
Parent:
60:9f4d34edef70
tudo good menos calibra??o + deletado codigo antigo;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 0:e6a49a092e2a 1 /**
Davidroid 0:e6a49a092e2a 2 ******************************************************************************
Davidroid 0:e6a49a092e2a 3 * @file main.cpp
Davidroid 17:aae1446c67f4 4 * @author Davide Aliprandi, STMicroelectronics
Davidroid 0:e6a49a092e2a 5 * @version V1.0.0
digo1234 57:270b6c82d071 6 * @date October 14th, 1025
Davidroid 17:aae1446c67f4 7 * @brief mbed test application for the STMicroelectronics X-NUCLEO-IHM01A1
Davidroid 3:02d9ec4f88b2 8 * Motor Control Expansion Board: control of 2 motors.
Davidroid 0:e6a49a092e2a 9 ******************************************************************************
Davidroid 0:e6a49a092e2a 10 * @attention
Davidroid 0:e6a49a092e2a 11 *
digo1234 57:270b6c82d071 12 * <h2><center>&copy; COPYRIGHT(c) 1025 STMicroelectronics</center></h2>
Davidroid 0:e6a49a092e2a 13 *
Davidroid 0:e6a49a092e2a 14 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 0:e6a49a092e2a 15 * are permitted provided that the following conditions are met:
Davidroid 0:e6a49a092e2a 16 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 0:e6a49a092e2a 17 * this list of conditions and the following disclaimer.
Davidroid 0:e6a49a092e2a 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 0:e6a49a092e2a 19 * this list of conditions and the following disclaimer in the documentation
Davidroid 0:e6a49a092e2a 20 * and/or other materials provided with the distribution.
Davidroid 0:e6a49a092e2a 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 0:e6a49a092e2a 22 * may be used to endorse or promote products derived from this software
Davidroid 0:e6a49a092e2a 23 * without specific prior written permission.
Davidroid 0:e6a49a092e2a 24 *
Davidroid 0:e6a49a092e2a 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 0:e6a49a092e2a 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 0:e6a49a092e2a 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 0:e6a49a092e2a 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 0:e6a49a092e2a 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 0:e6a49a092e2a 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 0:e6a49a092e2a 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 0:e6a49a092e2a 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 0:e6a49a092e2a 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 0:e6a49a092e2a 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 0:e6a49a092e2a 35 *
Davidroid 0:e6a49a092e2a 36 ******************************************************************************
Davidroid 0:e6a49a092e2a 37 */
Davidroid 0:e6a49a092e2a 38
Davidroid 0:e6a49a092e2a 39
Davidroid 0:e6a49a092e2a 40 /* Includes ------------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 41
Davidroid 0:e6a49a092e2a 42 /* mbed specific header files. */
Davidroid 0:e6a49a092e2a 43 #include "mbed.h"
Davidroid 0:e6a49a092e2a 44
Davidroid 0:e6a49a092e2a 45 /* Helper header files. */
Davidroid 0:e6a49a092e2a 46 #include "DevSPI.h"
Davidroid 0:e6a49a092e2a 47
Davidroid 0:e6a49a092e2a 48 /* Component specific header files. */
Davidroid 29:526970c1d998 49 #include "L6474.h"
Davidroid 0:e6a49a092e2a 50
leogrotti 46:63b15a56cbe5 51 #include <list>
leogrotti 46:63b15a56cbe5 52
leogrotti 53:7c56b06e694e 53 /* includes para os lcds */
leogrotti 53:7c56b06e694e 54 #include "TextLCD.h"
leogrotti 53:7c56b06e694e 55 /* definindo apertado e solto para lcd */
digo1234 56:5aedf3b4e184 56 #define apertado 1
digo1234 56:5aedf3b4e184 57 #define solto 0
leogrotti 53:7c56b06e694e 58
Davidroid 0:e6a49a092e2a 59
Davidroid 0:e6a49a092e2a 60 /* Definitions ---------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 61
Davidroid 24:8cb3c4ad055f 62 /* Number of steps. */
digo1234 57:270b6c82d071 63 #define STEPS 3101
Davidroid 0:e6a49a092e2a 64
Davidroid 24:8cb3c4ad055f 65 /* Delay in milliseconds. */
leogrotti 42:a04bff02f231 66 #define DELAY_1 20
digo1234 57:270b6c82d071 67 #define DELAY_2 101
digo1234 57:270b6c82d071 68 #define DELAY_3 1010
Davidroid 24:8cb3c4ad055f 69
Davidroid 24:8cb3c4ad055f 70 /* Speed in pps (Pulses Per Second).
Davidroid 24:8cb3c4ad055f 71 In Full Step mode: 1 pps = 1 step/s).
Davidroid 24:8cb3c4ad055f 72 In 1/N Step Mode: N pps = 1 step/s). */
leogrotti 34:098efd69c86d 73 #define SPEED_1 1300
leogrotti 35:a05bef8dd995 74 #define SPEED_2 1300
Davidroid 24:8cb3c4ad055f 75
Davidroid 0:e6a49a092e2a 76
Brunoporto2702 32:481674c0f90d 77
Davidroid 0:e6a49a092e2a 78 /* Variables -----------------------------------------------------------------*/
leogrotti 40:0b517b49f70d 79
leogrotti 50:58a2df31077a 80 DigitalIn fim_curso_X (PD_2);
leogrotti 50:58a2df31077a 81 DigitalIn fim_curso_Y (PC_11);
leogrotti 53:7c56b06e694e 82 DigitalIn fim_curso_Z (PC_8);
leogrotti 42:a04bff02f231 83
digo1234 59:8d34a4bfc2b7 84 DigitalOut solenoide (PB_15);
Brunoporto2702 32:481674c0f90d 85
Brunoporto2702 32:481674c0f90d 86 Serial pc(USBTX, USBRX);
Brunoporto2702 32:481674c0f90d 87
leogrotti 53:7c56b06e694e 88
leogrotti 53:7c56b06e694e 89 /* LCD */
leogrotti 53:7c56b06e694e 90 I2C i2c_lcd(D14,D15); // sda, scl
leogrotti 53:7c56b06e694e 91
leogrotti 53:7c56b06e694e 92 TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD20x4); // I2C exp: I2C bus, PCF8574 Slaveaddress, LCD Type
leogrotti 53:7c56b06e694e 93
leogrotti 53:7c56b06e694e 94 int menu=0;
digo1234 60:9f4d34edef70 95 int menu_memoria=0;
digo1234 60:9f4d34edef70 96 //float xmenu=1.0, ymenu=2.0, zmenu=3.0;
leogrotti 53:7c56b06e694e 97 int inicial= 1;
leogrotti 53:7c56b06e694e 98 int pisca =0;
leogrotti 53:7c56b06e694e 99 float i=0.0;
leogrotti 53:7c56b06e694e 100
leogrotti 53:7c56b06e694e 101 /* FIM LCD */
leogrotti 53:7c56b06e694e 102
leogrotti 42:a04bff02f231 103 AnalogIn eixo_X(A2);
leogrotti 42:a04bff02f231 104 AnalogIn eixo_Y(A3);
leogrotti 42:a04bff02f231 105 AnalogIn eixo_ZU(A0);
leogrotti 42:a04bff02f231 106 AnalogIn eixo_ZD(A1);
Brunoporto2702 32:481674c0f90d 107
leogrotti 54:175e4f3682e8 108 DigitalIn botao1 (PC_1); //1
leogrotti 54:175e4f3682e8 109 DigitalIn botao2 (PC_0); //2
leogrotti 54:175e4f3682e8 110 DigitalIn botao3 (PC_10); //3
leogrotti 54:175e4f3682e8 111 DigitalIn botao4 (PC_12); //4
digo1234 58:c600f21ab6f9 112 DigitalIn emergencia(PC_4);// butão de emergencia
leogrotti 43:d08a3f6b65b5 113
Brunoporto2702 32:481674c0f90d 114 float x;
Brunoporto2702 32:481674c0f90d 115 float y;
Brunoporto2702 32:481674c0f90d 116 float w;
Brunoporto2702 32:481674c0f90d 117 float u;
leogrotti 42:a04bff02f231 118 float zu;
leogrotti 42:a04bff02f231 119 float zd;
leogrotti 43:d08a3f6b65b5 120 float a;
leogrotti 43:d08a3f6b65b5 121 float pos;
leogrotti 43:d08a3f6b65b5 122 float sp;
leogrotti 43:d08a3f6b65b5 123 float vc;
Brunoporto2702 32:481674c0f90d 124
leogrotti 50:58a2df31077a 125 int Dir_X;
leogrotti 50:58a2df31077a 126 int Dir_Y;
leogrotti 50:58a2df31077a 127 int Dir_Z;
leogrotti 51:3f0e4e641054 128 int segu_fim_curso;
leogrotti 43:d08a3f6b65b5 129
leogrotti 50:58a2df31077a 130 int count;
leogrotti 44:eecdc0b60f14 131
leogrotti 44:eecdc0b60f14 132 int dif_posX1;
leogrotti 44:eecdc0b60f14 133 int dif_posY1;
leogrotti 44:eecdc0b60f14 134 int dif_posZ1;
leogrotti 44:eecdc0b60f14 135 int dif_posX2;
leogrotti 44:eecdc0b60f14 136 int dif_posY2;
leogrotti 44:eecdc0b60f14 137 int dif_posZ2;
leogrotti 44:eecdc0b60f14 138 int dif_posX3;
leogrotti 44:eecdc0b60f14 139 int dif_posY3;
leogrotti 44:eecdc0b60f14 140 int dif_posZ3;
leogrotti 44:eecdc0b60f14 141
digo1234 59:8d34a4bfc2b7 142 int listaX[20];
digo1234 59:8d34a4bfc2b7 143 int listaY[20];
digo1234 59:8d34a4bfc2b7 144 int listaZ[20];
digo1234 60:9f4d34edef70 145 int listaCola[20];
leogrotti 46:63b15a56cbe5 146
leogrotti 46:63b15a56cbe5 147 int index = 0;
leogrotti 46:63b15a56cbe5 148
leogrotti 42:a04bff02f231 149 bool flagX1=0;
leogrotti 42:a04bff02f231 150 bool flagY1=0;
leogrotti 35:a05bef8dd995 151
digo1234 56:5aedf3b4e184 152 int safe = 0;
digo1234 58:c600f21ab6f9 153 int safe_emergencia = 0;
digo1234 60:9f4d34edef70 154 int safe_menu = 0;
digo1234 60:9f4d34edef70 155 int safe_eixoY = 0;
digo1234 56:5aedf3b4e184 156
leogrotti 34:098efd69c86d 157 unsigned int minspeed = 1300;
Brunoporto2702 32:481674c0f90d 158
leogrotti 34:098efd69c86d 159 //int step = 0x08;
Brunoporto2702 32:481674c0f90d 160
leogrotti 35:a05bef8dd995 161 unsigned int speed1;
leogrotti 35:a05bef8dd995 162 unsigned int speed2;
leogrotti 39:7e30bcc989d3 163 unsigned int speed3;
leogrotti 36:0cd4fdbb40af 164
leogrotti 38:c3d77ff8168a 165 //unsigned int pos3;
Brunoporto2702 32:481674c0f90d 166
Davidroid 0:e6a49a092e2a 167
Davidroid 0:e6a49a092e2a 168 /* Motor Control Component. */
Davidroid 3:02d9ec4f88b2 169 L6474 *motor1;
Davidroid 3:02d9ec4f88b2 170 L6474 *motor2;
leogrotti 39:7e30bcc989d3 171 L6474 *motor3;
Davidroid 0:e6a49a092e2a 172
Davidroid 0:e6a49a092e2a 173
Davidroid 0:e6a49a092e2a 174 /* Main ----------------------------------------------------------------------*/
leogrotti 55:b2ad60cc21a1 175 // função de correção de passos
leogrotti 44:eecdc0b60f14 176 int correcao_passo (int passo){
leogrotti 44:eecdc0b60f14 177 int passo_verdade;
leogrotti 45:8fab21ab1251 178 if (passo != 0){
leogrotti 44:eecdc0b60f14 179 passo_verdade = passo/1.0892 - 15,56;
leogrotti 45:8fab21ab1251 180 }
leogrotti 47:b5dc79d3fb35 181 else {
leogrotti 47:b5dc79d3fb35 182 passo_verdade = 0;
leogrotti 47:b5dc79d3fb35 183 }
leogrotti 55:b2ad60cc21a1 184 return (passo_verdade);
leogrotti 44:eecdc0b60f14 185 }
leogrotti 55:b2ad60cc21a1 186 // função salva posição
leogrotti 53:7c56b06e694e 187 void salva_posicao(){
leogrotti 53:7c56b06e694e 188 listaX[index] = motor2->get_position();
leogrotti 53:7c56b06e694e 189 listaY[index] = motor1->get_position();
leogrotti 53:7c56b06e694e 190 listaZ[index] = motor3->get_position();
leogrotti 53:7c56b06e694e 191 for (int j=0; j<=index; j++) {
digo1234 60:9f4d34edef70 192 printf("posX%d %d: \r\n", j+1, listaX[j]);
digo1234 60:9f4d34edef70 193 printf("posY%d %d: \r\n", j+1, listaY[j]);
digo1234 60:9f4d34edef70 194 printf("posZ%d %d: \r\n", j+1, listaZ[j]);
digo1234 60:9f4d34edef70 195 printf("Cola? :entre %d e %d %d \r\n", j+1,j, listaCola[j]);
leogrotti 53:7c56b06e694e 196 }
leogrotti 53:7c56b06e694e 197 index = index+1;
leogrotti 53:7c56b06e694e 198 wait_ms(DELAY_2);
leogrotti 53:7c56b06e694e 199 }
leogrotti 55:b2ad60cc21a1 200 // função percorre caminho
digo1234 60:9f4d34edef70 201 void vai_caminho_desejado (int listapontosX[20], int listapontosY[20], int listapontosZ[20], int listapontosCola[20], int index_local) {
leogrotti 46:63b15a56cbe5 202 int PYatual = motor1->get_position();
leogrotti 46:63b15a56cbe5 203 int PXatual = motor2->get_position();
leogrotti 46:63b15a56cbe5 204 int PZatual = motor3->get_position();
leogrotti 44:eecdc0b60f14 205
leogrotti 46:63b15a56cbe5 206 int calcdeltaX = correcao_passo(listapontosX[0] - PXatual);
leogrotti 46:63b15a56cbe5 207 int calcdeltaY = correcao_passo(listapontosY[0] - PYatual);
leogrotti 46:63b15a56cbe5 208 int calcdeltaZ = correcao_passo(listapontosZ[0] - PZatual);
leogrotti 46:63b15a56cbe5 209
digo1234 59:8d34a4bfc2b7 210 if (calcdeltaZ > 0) {
digo1234 59:8d34a4bfc2b7 211 motor3->move(StepperMotor::FWD, calcdeltaZ);
digo1234 59:8d34a4bfc2b7 212 motor3->wait_while_active();
digo1234 59:8d34a4bfc2b7 213 }
digo1234 59:8d34a4bfc2b7 214 else {
digo1234 59:8d34a4bfc2b7 215 motor3->move(StepperMotor::BWD, -calcdeltaZ);
digo1234 59:8d34a4bfc2b7 216 motor3->wait_while_active();
digo1234 59:8d34a4bfc2b7 217 }
digo1234 59:8d34a4bfc2b7 218
leogrotti 50:58a2df31077a 219 if (calcdeltaX >= 0 and calcdeltaY >= 0 ) {
leogrotti 46:63b15a56cbe5 220 motor2->move(StepperMotor::FWD, calcdeltaX);
leogrotti 47:b5dc79d3fb35 221 motor1->move(StepperMotor::FWD, calcdeltaY);
leogrotti 46:63b15a56cbe5 222 motor2->wait_while_active();
leogrotti 47:b5dc79d3fb35 223 motor1->wait_while_active();
leogrotti 46:63b15a56cbe5 224 }
leogrotti 50:58a2df31077a 225 if (calcdeltaX >= 0 and calcdeltaY < 0 ) {
leogrotti 47:b5dc79d3fb35 226 motor2->move(StepperMotor::FWD, calcdeltaX);
leogrotti 47:b5dc79d3fb35 227 motor1->move(StepperMotor::BWD, -calcdeltaY);
leogrotti 47:b5dc79d3fb35 228 motor2->wait_while_active();
leogrotti 46:63b15a56cbe5 229 motor1->wait_while_active();
leogrotti 46:63b15a56cbe5 230 }
leogrotti 50:58a2df31077a 231 if (calcdeltaX < 0 and calcdeltaY >= 0 ) {
leogrotti 47:b5dc79d3fb35 232 motor2->move(StepperMotor::BWD, -calcdeltaX);
leogrotti 47:b5dc79d3fb35 233 motor1->move(StepperMotor::FWD, calcdeltaY);
leogrotti 47:b5dc79d3fb35 234 motor2->wait_while_active();
leogrotti 47:b5dc79d3fb35 235 motor1->wait_while_active();
leogrotti 47:b5dc79d3fb35 236 }
leogrotti 47:b5dc79d3fb35 237 if (calcdeltaX < 0 and calcdeltaY < 0 ) {
leogrotti 47:b5dc79d3fb35 238 motor2->move(StepperMotor::BWD, -calcdeltaX);
leogrotti 47:b5dc79d3fb35 239 motor1->move(StepperMotor::BWD, -calcdeltaY);
leogrotti 47:b5dc79d3fb35 240 motor2->wait_while_active();
leogrotti 47:b5dc79d3fb35 241 motor1->wait_while_active();
leogrotti 47:b5dc79d3fb35 242 }
leogrotti 47:b5dc79d3fb35 243
digo1234 59:8d34a4bfc2b7 244
leogrotti 50:58a2df31077a 245
leogrotti 46:63b15a56cbe5 246 printf("O for vai rodar: %d \r\n", index_local-1);
leogrotti 46:63b15a56cbe5 247 for (int i = 1; i< index_local ; i++) {
digo1234 60:9f4d34edef70 248 if (i==index_local-1){
digo1234 59:8d34a4bfc2b7 249 solenoide.write(0);
digo1234 59:8d34a4bfc2b7 250 }
digo1234 60:9f4d34edef70 251
digo1234 60:9f4d34edef70 252 if (listapontosCola[i] == 0){
digo1234 60:9f4d34edef70 253 printf("solenoide desliga %i \r\n",listapontosCola[i]);
digo1234 60:9f4d34edef70 254 solenoide.write(1);
digo1234 60:9f4d34edef70 255 }
digo1234 60:9f4d34edef70 256
digo1234 60:9f4d34edef70 257 else {
digo1234 60:9f4d34edef70 258 printf("solenoide liga %i \r\n",listapontosCola[i]);
digo1234 60:9f4d34edef70 259 solenoide.write(0);
digo1234 60:9f4d34edef70 260 }
leogrotti 46:63b15a56cbe5 261
leogrotti 46:63b15a56cbe5 262 calcdeltaX = correcao_passo(listapontosX[i] - listapontosX[i-1]);
leogrotti 46:63b15a56cbe5 263 calcdeltaY = correcao_passo(listapontosY[i] - listapontosY[i-1]);
leogrotti 46:63b15a56cbe5 264 calcdeltaZ = correcao_passo(listapontosZ[i] - listapontosZ[i-1]);
leogrotti 46:63b15a56cbe5 265
digo1234 59:8d34a4bfc2b7 266 if (calcdeltaZ > 0) {
digo1234 59:8d34a4bfc2b7 267 motor3->move(StepperMotor::FWD, calcdeltaZ);
digo1234 59:8d34a4bfc2b7 268 motor3->wait_while_active();
digo1234 59:8d34a4bfc2b7 269 }
digo1234 59:8d34a4bfc2b7 270 else {
digo1234 59:8d34a4bfc2b7 271 motor3->move(StepperMotor::BWD, -calcdeltaZ);
digo1234 59:8d34a4bfc2b7 272 motor3->wait_while_active();
digo1234 59:8d34a4bfc2b7 273 }
digo1234 59:8d34a4bfc2b7 274
leogrotti 50:58a2df31077a 275 if (calcdeltaX >= 0 and calcdeltaY >= 0) {
leogrotti 46:63b15a56cbe5 276 motor2->move(StepperMotor::FWD, calcdeltaX);
leogrotti 48:76ccfa408a33 277 motor1->move(StepperMotor::FWD, calcdeltaY);
leogrotti 46:63b15a56cbe5 278 motor2->wait_while_active();
leogrotti 48:76ccfa408a33 279 motor1->wait_while_active();
leogrotti 46:63b15a56cbe5 280 }
leogrotti 50:58a2df31077a 281 if (calcdeltaX >= 0 and calcdeltaY < 0) {
leogrotti 48:76ccfa408a33 282 motor2->move(StepperMotor::FWD, calcdeltaX);
leogrotti 48:76ccfa408a33 283 motor1->move(StepperMotor::BWD, -calcdeltaY);
leogrotti 48:76ccfa408a33 284 motor2->wait_while_active();
leogrotti 46:63b15a56cbe5 285 motor1->wait_while_active();
leogrotti 46:63b15a56cbe5 286 }
leogrotti 50:58a2df31077a 287 if (calcdeltaX < 0 and calcdeltaY >= 0) {
leogrotti 48:76ccfa408a33 288 motor2->move(StepperMotor::BWD, -calcdeltaX);
leogrotti 48:76ccfa408a33 289 motor1->move(StepperMotor::FWD, calcdeltaY);
leogrotti 48:76ccfa408a33 290 motor2->wait_while_active();
leogrotti 48:76ccfa408a33 291 motor1->wait_while_active();
leogrotti 48:76ccfa408a33 292 }
leogrotti 48:76ccfa408a33 293 if (calcdeltaX < 0 and calcdeltaY < 0) {
leogrotti 48:76ccfa408a33 294 motor2->move(StepperMotor::BWD, -calcdeltaX);
leogrotti 48:76ccfa408a33 295 motor1->move(StepperMotor::BWD, -calcdeltaY);
leogrotti 48:76ccfa408a33 296 motor2->wait_while_active();
leogrotti 48:76ccfa408a33 297 motor1->wait_while_active();
leogrotti 48:76ccfa408a33 298 }
leogrotti 46:63b15a56cbe5 299 }
leogrotti 46:63b15a56cbe5 300 }
leogrotti 46:63b15a56cbe5 301
leogrotti 46:63b15a56cbe5 302 int main()
Davidroid 0:e6a49a092e2a 303 {
Davidroid 8:cec4c2c03a27 304 /*----- Initialization. -----*/
Davidroid 8:cec4c2c03a27 305
Davidroid 0:e6a49a092e2a 306 /* Initializing SPI bus. */
Davidroid 0:e6a49a092e2a 307 DevSPI dev_spi(D11, D12, D13);
Davidroid 0:e6a49a092e2a 308
Davidroid 9:a9e51320aee4 309 /* Initializing Motor Control Components. */
Davidroid 5:a0268a435bb1 310 motor1 = new L6474(D2, D8, D7, D9, D10, dev_spi);
Davidroid 16:810667a9f31f 311 motor2 = new L6474(D2, D8, D4, D3, D10, dev_spi);
leogrotti 39:7e30bcc989d3 312 motor3 = new L6474(D2, D8, D5, D6, D10, dev_spi);
Davidroid 29:526970c1d998 313 if (motor1->init() != COMPONENT_OK) {
Davidroid 14:fcd452b03d1a 314 exit(EXIT_FAILURE);
Davidroid 28:3f17a4152bcf 315 }
Davidroid 29:526970c1d998 316 if (motor2->init() != COMPONENT_OK) {
Davidroid 14:fcd452b03d1a 317 exit(EXIT_FAILURE);
Davidroid 28:3f17a4152bcf 318 }
leogrotti 39:7e30bcc989d3 319 if (motor3->init() != COMPONENT_OK) {
leogrotti 39:7e30bcc989d3 320 exit(EXIT_FAILURE);
leogrotti 39:7e30bcc989d3 321 }
Davidroid 0:e6a49a092e2a 322
leogrotti 55:b2ad60cc21a1 323 //ligando lcd
leogrotti 53:7c56b06e694e 324 lcd.setBacklight(TextLCD::LightOn);
leogrotti 53:7c56b06e694e 325 lcd.setCursor(TextLCD::CurOff_BlkOff);
leogrotti 55:b2ad60cc21a1 326 //abrindo menu inicial lcd
leogrotti 53:7c56b06e694e 327 lcd.cls();
leogrotti 53:7c56b06e694e 328 lcd.setAddress(3,0);
leogrotti 53:7c56b06e694e 329 lcd.printf("MENU PRINCIPAL");
leogrotti 53:7c56b06e694e 330 lcd.setAddress(0,2);
leogrotti 53:7c56b06e694e 331 lcd.printf("1-SALVAR PONTOS");
leogrotti 53:7c56b06e694e 332 lcd.setAddress(0,3);
leogrotti 53:7c56b06e694e 333 lcd.printf("2-INICIAR PROGRAMA");
digo1234 60:9f4d34edef70 334 printf("programa rodando \r\n");
Davidroid 28:3f17a4152bcf 335 while(true) {
digo1234 58:c600f21ab6f9 336 if (!botao1 && !botao2 && !botao3 && !botao4 && !emergencia){
digo1234 56:5aedf3b4e184 337 safe = 0;
digo1234 56:5aedf3b4e184 338 }
digo1234 60:9f4d34edef70 339 solenoide.write(1);
leogrotti 42:a04bff02f231 340 count = count +1;
digo1234 60:9f4d34edef70 341 //printf("programa rodando \r\n");
leogrotti 42:a04bff02f231 342 // Leitura analógica
Brunoporto2702 32:481674c0f90d 343 u = eixo_X.read();
Brunoporto2702 32:481674c0f90d 344 w = eixo_Y.read();
leogrotti 42:a04bff02f231 345 zu = eixo_ZU.read();
leogrotti 42:a04bff02f231 346 zd = eixo_ZD.read();
leogrotti 54:175e4f3682e8 347 sp = botao1.read();
leogrotti 54:175e4f3682e8 348 vc = botao2.read();
leogrotti 52:7f80fc02710e 349 if (count == 50) {
digo1234 60:9f4d34edef70 350 //printf("programa rodando \r\n");
digo1234 60:9f4d34edef70 351 printf("u =%f \r\n\n", u);
leogrotti 52:7f80fc02710e 352 wait_ms(DELAY_1);
leogrotti 52:7f80fc02710e 353
leogrotti 43:d08a3f6b65b5 354 count = 0;
leogrotti 43:d08a3f6b65b5 355 }
leogrotti 43:d08a3f6b65b5 356
leogrotti 42:a04bff02f231 357
leogrotti 42:a04bff02f231 358 // Movimentando eixo Z cima caso botão 1 apertado
digo1234 60:9f4d34edef70 359 if (zu >0.7 && !fim_curso_Z ) {
leogrotti 42:a04bff02f231 360 motor3->run(StepperMotor::FWD);
leogrotti 53:7c56b06e694e 361 segu_fim_curso = 1;
leogrotti 53:7c56b06e694e 362 Dir_Z = 1;
leogrotti 53:7c56b06e694e 363 wait_ms(DELAY_1);
leogrotti 53:7c56b06e694e 364 }
leogrotti 53:7c56b06e694e 365
leogrotti 53:7c56b06e694e 366 // Movimentando eixo Z baixo caso botão 2 apertado
digo1234 60:9f4d34edef70 367 else if (zd >0.7 && !fim_curso_Z ) {
leogrotti 53:7c56b06e694e 368 motor3->run(StepperMotor::BWD);
leogrotti 53:7c56b06e694e 369 segu_fim_curso = 1;
leogrotti 53:7c56b06e694e 370 Dir_Z = 0;
leogrotti 50:58a2df31077a 371 wait_ms(DELAY_1);
leogrotti 42:a04bff02f231 372 }
leogrotti 34:098efd69c86d 373
leogrotti 42:a04bff02f231 374 // Parando eixo Z caso botão 1 e 2 liberado
leogrotti 53:7c56b06e694e 375 else /*(zu< 0.7 && zd < 0.7 )*/{
leogrotti 42:a04bff02f231 376 motor3->hard_stop();
leogrotti 52:7f80fc02710e 377 wait_ms(DELAY_1);
leogrotti 53:7c56b06e694e 378 if (fim_curso_Z && segu_fim_curso==1) {
leogrotti 53:7c56b06e694e 379 printf("Fim de curso Z apertada \r\n");
leogrotti 53:7c56b06e694e 380 if (Dir_Z == 1){
leogrotti 53:7c56b06e694e 381 motor3->move(StepperMotor::BWD, 1000);
leogrotti 53:7c56b06e694e 382 motor3->wait_while_active();
leogrotti 53:7c56b06e694e 383 segu_fim_curso = 0;
leogrotti 53:7c56b06e694e 384 wait_ms(DELAY_1);
leogrotti 53:7c56b06e694e 385 }
leogrotti 53:7c56b06e694e 386 if (Dir_Z == 0){
leogrotti 53:7c56b06e694e 387 motor3->move(StepperMotor::FWD, 1000);
leogrotti 53:7c56b06e694e 388 motor3->wait_while_active();
leogrotti 53:7c56b06e694e 389 segu_fim_curso = 0;
leogrotti 53:7c56b06e694e 390 wait_ms(DELAY_1);
leogrotti 53:7c56b06e694e 391 }
leogrotti 53:7c56b06e694e 392 }
leogrotti 42:a04bff02f231 393 }
leogrotti 42:a04bff02f231 394
leogrotti 52:7f80fc02710e 395 // Movimentando eixo Y duas direções com joystick
leogrotti 42:a04bff02f231 396 // Movimentando eixo Y fwd
digo1234 60:9f4d34edef70 397 if (u>0.820 && !fim_curso_Y && !botao1 && !botao2 && zu<0.7 && zd<0.7) {
digo1234 60:9f4d34edef70 398 printf("motor y indo para frente");
leogrotti 42:a04bff02f231 399 motor1->run(StepperMotor::FWD);
leogrotti 50:58a2df31077a 400 Dir_Y = 1;
leogrotti 51:3f0e4e641054 401 segu_fim_curso = 1;
leogrotti 52:7f80fc02710e 402 wait_ms(DELAY_1);
leogrotti 42:a04bff02f231 403 }
leogrotti 42:a04bff02f231 404 // Movimentando eixo Y bwd
digo1234 60:9f4d34edef70 405 else if(u<0.65 && !fim_curso_Y && !botao1 && !botao2 && zu<0.7 && zd<0.7) {
digo1234 60:9f4d34edef70 406 printf("motor y indo para tras");
leogrotti 42:a04bff02f231 407 motor1->run(StepperMotor::BWD);
leogrotti 50:58a2df31077a 408 Dir_Y = 0;
leogrotti 51:3f0e4e641054 409 segu_fim_curso = 1;
leogrotti 52:7f80fc02710e 410 wait_ms(DELAY_1);
Brunoporto2702 32:481674c0f90d 411 }
leogrotti 50:58a2df31077a 412
leogrotti 42:a04bff02f231 413 // parando eixo Y
leogrotti 50:58a2df31077a 414 else {
leogrotti 42:a04bff02f231 415 motor1->hard_stop();
leogrotti 50:58a2df31077a 416 wait_ms(DELAY_1);
digo1234 60:9f4d34edef70 417 if (fim_curso_Y && segu_fim_curso==1 ) {
leogrotti 51:3f0e4e641054 418 printf("Fim de curso Y apertada \r\n");
leogrotti 50:58a2df31077a 419 if (Dir_Y == 1){
leogrotti 50:58a2df31077a 420 motor1->move(StepperMotor::BWD, 1000);
leogrotti 50:58a2df31077a 421 motor1->wait_while_active();
leogrotti 51:3f0e4e641054 422 segu_fim_curso = 0;
leogrotti 52:7f80fc02710e 423 wait_ms(DELAY_1);
leogrotti 50:58a2df31077a 424 }
leogrotti 50:58a2df31077a 425 if (Dir_Y == 0){
leogrotti 50:58a2df31077a 426 motor1->move(StepperMotor::FWD, 1000);
leogrotti 50:58a2df31077a 427 motor1->wait_while_active();
leogrotti 51:3f0e4e641054 428 segu_fim_curso = 0;
leogrotti 52:7f80fc02710e 429 wait_ms(DELAY_1);
leogrotti 50:58a2df31077a 430 }
leogrotti 50:58a2df31077a 431 }
leogrotti 42:a04bff02f231 432 }
leogrotti 42:a04bff02f231 433
leogrotti 42:a04bff02f231 434 // Movimentando eixo X duas direções com joystick
leogrotti 43:d08a3f6b65b5 435 // Movimentando eixo X fwd
leogrotti 50:58a2df31077a 436 if (w>0.80 && !fim_curso_X) {
leogrotti 34:098efd69c86d 437 motor2->run(StepperMotor::BWD);
leogrotti 50:58a2df31077a 438 Dir_X = 1;
leogrotti 51:3f0e4e641054 439 segu_fim_curso = 1;
leogrotti 52:7f80fc02710e 440 wait_ms(DELAY_1);
leogrotti 50:58a2df31077a 441 }
leogrotti 50:58a2df31077a 442
leogrotti 43:d08a3f6b65b5 443 // Movimentando eixo X Bwd
leogrotti 50:58a2df31077a 444 else if(w<0.60 && !fim_curso_X) {
leogrotti 50:58a2df31077a 445 motor2->run(StepperMotor::FWD);
leogrotti 50:58a2df31077a 446 Dir_X = 0;
leogrotti 51:3f0e4e641054 447 segu_fim_curso = 1;
leogrotti 52:7f80fc02710e 448 wait_ms(DELAY_1);
leogrotti 42:a04bff02f231 449 }
leogrotti 42:a04bff02f231 450 // parando eixo X
leogrotti 50:58a2df31077a 451 else{
Brunoporto2702 32:481674c0f90d 452 motor2->hard_stop();
leogrotti 50:58a2df31077a 453 wait_ms(DELAY_1);
leogrotti 51:3f0e4e641054 454 if (fim_curso_X && segu_fim_curso==1) {
leogrotti 51:3f0e4e641054 455 printf("Fim de curso X apertada \r\n");
leogrotti 50:58a2df31077a 456 if (Dir_X == 1){
leogrotti 50:58a2df31077a 457 motor2->move(StepperMotor::FWD, 1000);
leogrotti 50:58a2df31077a 458 motor2->wait_while_active();
leogrotti 51:3f0e4e641054 459 segu_fim_curso = 0;
leogrotti 52:7f80fc02710e 460 wait_ms(DELAY_1);
leogrotti 50:58a2df31077a 461 }
leogrotti 50:58a2df31077a 462 if (Dir_X == 0){
leogrotti 50:58a2df31077a 463 motor2->move(StepperMotor::BWD, 1000);
leogrotti 50:58a2df31077a 464 motor2->wait_while_active();
leogrotti 51:3f0e4e641054 465 segu_fim_curso = 0;
leogrotti 52:7f80fc02710e 466 wait_ms(DELAY_1);
leogrotti 50:58a2df31077a 467 }
leogrotti 50:58a2df31077a 468 }
Brunoporto2702 32:481674c0f90d 469 }
digo1234 58:c600f21ab6f9 470
digo1234 58:c600f21ab6f9 471 // botão de emergencia apertado
digo1234 58:c600f21ab6f9 472 if(emergencia && safe_emergencia==0){
digo1234 58:c600f21ab6f9 473 lcd.cls();
digo1234 58:c600f21ab6f9 474 lcd.setAddress(0,1);
digo1234 58:c600f21ab6f9 475 lcd.printf("BOTAO DE EMERGENCIA");
digo1234 58:c600f21ab6f9 476 lcd.setAddress(4,2);
digo1234 58:c600f21ab6f9 477 lcd.printf("PRESSIONADO");
digo1234 58:c600f21ab6f9 478 safe_emergencia=1;
digo1234 58:c600f21ab6f9 479 }
digo1234 58:c600f21ab6f9 480 if(!emergencia && safe_emergencia==1){
digo1234 58:c600f21ab6f9 481 lcd.cls();
digo1234 58:c600f21ab6f9 482 lcd.setAddress(0,0);
digo1234 58:c600f21ab6f9 483 lcd.printf("PONTOS PERDIDOS");
digo1234 58:c600f21ab6f9 484 lcd.setAddress(0,1);
digo1234 58:c600f21ab6f9 485 lcd.printf("MAQUINA REINICIANDO");
digo1234 58:c600f21ab6f9 486 wait(2);
digo1234 58:c600f21ab6f9 487 safe_emergencia=0;
digo1234 58:c600f21ab6f9 488 NVIC_SystemReset();
digo1234 58:c600f21ab6f9 489 }
digo1234 58:c600f21ab6f9 490
digo1234 58:c600f21ab6f9 491
digo1234 60:9f4d34edef70 492 // Menus
digo1234 60:9f4d34edef70 493
digo1234 60:9f4d34edef70 494 if (menu == 0 && safe_menu == 0 ){
digo1234 60:9f4d34edef70 495 lcd.cls();
digo1234 60:9f4d34edef70 496 lcd.setAddress(3,0);
digo1234 60:9f4d34edef70 497 lcd.printf("MENU PRINCIPAL");
digo1234 60:9f4d34edef70 498 lcd.setAddress(0,2);
digo1234 60:9f4d34edef70 499 lcd.printf("1-SALVAR NOVOS PONTOS");
digo1234 60:9f4d34edef70 500 lcd.setAddress(0,3);
digo1234 60:9f4d34edef70 501 lcd.printf("2-INICIAR PROGRAMA");
digo1234 60:9f4d34edef70 502 safe_menu = 1;
digo1234 60:9f4d34edef70 503 }
digo1234 60:9f4d34edef70 504
digo1234 60:9f4d34edef70 505 if (menu == 1 && safe_menu == 0 ) {
digo1234 60:9f4d34edef70 506 lcd.cls();
digo1234 60:9f4d34edef70 507 lcd.setCursor(TextLCD::CurOff_BlkOff);
digo1234 60:9f4d34edef70 508 lcd.setAddress(0,0);
digo1234 60:9f4d34edef70 509 lcd.printf("1-SALVAR PONTO %i",index+1);
digo1234 60:9f4d34edef70 510 lcd.setAddress(0,1);
digo1234 60:9f4d34edef70 511 lcd.printf("2-VOLTAR");
digo1234 60:9f4d34edef70 512 lcd.setAddress(0,2);
digo1234 60:9f4d34edef70 513 lcd.printf("3-CANCELAR ");
digo1234 60:9f4d34edef70 514 lcd.setAddress(0,3);
digo1234 60:9f4d34edef70 515 lcd.printf("4-CONCLUIR ");
digo1234 60:9f4d34edef70 516 safe_menu = 1;
digo1234 60:9f4d34edef70 517 }
digo1234 60:9f4d34edef70 518
digo1234 60:9f4d34edef70 519 if (menu == 2 && safe_menu == 0 ) {
digo1234 60:9f4d34edef70 520 lcd.cls();
digo1234 60:9f4d34edef70 521 lcd.setCursor(TextLCD::CurOff_BlkOff);
digo1234 60:9f4d34edef70 522 lcd.setAddress(0,0);
digo1234 60:9f4d34edef70 523 lcd.printf("QUER APLICAR COLA ");
digo1234 60:9f4d34edef70 524 lcd.setAddress(0,1);
digo1234 60:9f4d34edef70 525 lcd.printf("ENTRE PONTO %i E %i",index,index-1);
digo1234 60:9f4d34edef70 526 lcd.setAddress(0,3);
digo1234 60:9f4d34edef70 527 lcd.printf("1-SIM ");
digo1234 60:9f4d34edef70 528 lcd.setAddress(8,3);
digo1234 60:9f4d34edef70 529 lcd.printf("2-NAO");
digo1234 60:9f4d34edef70 530 safe_menu = 1;
digo1234 60:9f4d34edef70 531 }
digo1234 60:9f4d34edef70 532
digo1234 60:9f4d34edef70 533 if (menu == 3 && safe_menu == 0 ) {
digo1234 60:9f4d34edef70 534 lcd.cls();
digo1234 60:9f4d34edef70 535 lcd.setAddress(2,0);
digo1234 60:9f4d34edef70 536 lcd.printf("TEM CERTEZA QUE");
digo1234 60:9f4d34edef70 537 lcd.setAddress(2,1);
digo1234 60:9f4d34edef70 538 lcd.printf("DESEJA CANCELAR?");
digo1234 60:9f4d34edef70 539 lcd.setAddress(1,2);
digo1234 60:9f4d34edef70 540 lcd.printf("PONTOS IRAO APAGAR");
digo1234 60:9f4d34edef70 541 lcd.setAddress(1,4);
digo1234 60:9f4d34edef70 542 lcd.printf("1-SIM");
digo1234 60:9f4d34edef70 543 lcd.setAddress(10,4);
digo1234 60:9f4d34edef70 544 lcd.printf("2-NAO");
digo1234 60:9f4d34edef70 545 safe_menu = 1;
digo1234 60:9f4d34edef70 546 }
digo1234 60:9f4d34edef70 547
digo1234 60:9f4d34edef70 548 if (menu == 4 && safe_menu == 0 ){
digo1234 60:9f4d34edef70 549 lcd.cls();
digo1234 60:9f4d34edef70 550 lcd.setAddress(0,0);
digo1234 60:9f4d34edef70 551 lcd.printf("PONTOS SALVOS");
digo1234 60:9f4d34edef70 552 lcd.setAddress(0,2);
digo1234 60:9f4d34edef70 553 lcd.printf("1-INICIAR PROGRAMA");
digo1234 60:9f4d34edef70 554 lcd.setAddress(0,3);
digo1234 60:9f4d34edef70 555 lcd.printf("2-VOLTAR A SALVAR");
digo1234 60:9f4d34edef70 556 safe_menu = 1;
digo1234 60:9f4d34edef70 557 }
digo1234 60:9f4d34edef70 558
digo1234 60:9f4d34edef70 559 if (menu == 5 && safe_menu == 0 ){
digo1234 60:9f4d34edef70 560 lcd.cls();
digo1234 60:9f4d34edef70 561 lcd.setAddress(0,0);
digo1234 60:9f4d34edef70 562 lcd.printf("SALVE SEU PONTO");
digo1234 60:9f4d34edef70 563 lcd.setAddress(0,1);
digo1234 60:9f4d34edef70 564 lcd.printf("DE RETIRADA");
digo1234 60:9f4d34edef70 565 lcd.setAddress(0,4);
digo1234 60:9f4d34edef70 566 lcd.printf("1-SALVAR PONTO");
digo1234 60:9f4d34edef70 567 safe_menu = 1;
digo1234 60:9f4d34edef70 568 }
digo1234 60:9f4d34edef70 569
digo1234 60:9f4d34edef70 570 if (menu ==6 && safe_menu == 0) {
digo1234 60:9f4d34edef70 571 lcd.cls();
digo1234 60:9f4d34edef70 572 lcd.setAddress(0,1);
digo1234 60:9f4d34edef70 573 lcd.printf("NAO HA PONTOS SALVOS");
digo1234 60:9f4d34edef70 574 wait(2);
digo1234 60:9f4d34edef70 575 menu=0;
digo1234 60:9f4d34edef70 576 }
digo1234 60:9f4d34edef70 577
digo1234 60:9f4d34edef70 578 if (menu == 7 && safe_menu == 0) {
digo1234 60:9f4d34edef70 579 lcd.setAddress(0,1);
digo1234 60:9f4d34edef70 580 lcd.printf("AGUARDE...");
digo1234 60:9f4d34edef70 581 safe_menu =1;
digo1234 60:9f4d34edef70 582 }
digo1234 60:9f4d34edef70 583
digo1234 60:9f4d34edef70 584
digo1234 60:9f4d34edef70 585 // botao1
digo1234 60:9f4d34edef70 586
digo1234 60:9f4d34edef70 587 if (botao1 && menu == 0 && safe == 0){
digo1234 60:9f4d34edef70 588 for (int i=0; i<21;i++){
digo1234 60:9f4d34edef70 589 listaX[i] = 0;
digo1234 60:9f4d34edef70 590 listaY[i] = 0;
digo1234 60:9f4d34edef70 591 listaZ[i] = 0;
digo1234 60:9f4d34edef70 592 }
digo1234 60:9f4d34edef70 593 index = 0;
digo1234 60:9f4d34edef70 594 menu = 0;
digo1234 60:9f4d34edef70 595 menu = 1;
digo1234 60:9f4d34edef70 596 safe =1;
digo1234 60:9f4d34edef70 597 safe_menu = 0;
digo1234 60:9f4d34edef70 598 }
digo1234 60:9f4d34edef70 599
digo1234 60:9f4d34edef70 600 if (botao1 && menu == 1 && safe == 0) {
digo1234 60:9f4d34edef70 601 if (index<1){
digo1234 60:9f4d34edef70 602 listaCola[index-1]=0;
digo1234 60:9f4d34edef70 603 salva_posicao();
digo1234 60:9f4d34edef70 604 }
digo1234 60:9f4d34edef70 605 else {
digo1234 60:9f4d34edef70 606 menu = 2;
digo1234 60:9f4d34edef70 607 salva_posicao();
digo1234 60:9f4d34edef70 608 }
digo1234 60:9f4d34edef70 609 safe = 1;
digo1234 60:9f4d34edef70 610 safe_menu = 0;
digo1234 60:9f4d34edef70 611 }
digo1234 60:9f4d34edef70 612
digo1234 60:9f4d34edef70 613 if (botao1 && menu == 2 && safe == 0) {
digo1234 60:9f4d34edef70 614 listaCola[index-1]=1;
digo1234 60:9f4d34edef70 615 for (int a=0; a<=index; a++){
digo1234 60:9f4d34edef70 616 printf("cola : %i \r\n", listaCola[a]);
digo1234 60:9f4d34edef70 617 }
digo1234 60:9f4d34edef70 618 menu = 1;
digo1234 60:9f4d34edef70 619 safe = 1;
digo1234 60:9f4d34edef70 620 safe_menu = 0;
digo1234 60:9f4d34edef70 621 }
digo1234 60:9f4d34edef70 622
digo1234 60:9f4d34edef70 623 if (botao1 && menu == 3 && safe == 0) {
digo1234 60:9f4d34edef70 624 for (int i=0; i<21;i++){
digo1234 60:9f4d34edef70 625 listaX[i] = 0;
digo1234 60:9f4d34edef70 626 listaY[i] = 0;
digo1234 60:9f4d34edef70 627 listaZ[i] = 0;
digo1234 60:9f4d34edef70 628 }
digo1234 60:9f4d34edef70 629 index = 0;
digo1234 60:9f4d34edef70 630 lcd.cls();
digo1234 60:9f4d34edef70 631 lcd.setAddress(0,1);
digo1234 60:9f4d34edef70 632 lcd.printf("OPERACAO CANCELADA!");
digo1234 60:9f4d34edef70 633 lcd.setAddress(0,2);
digo1234 60:9f4d34edef70 634 lcd.printf("PONTOS APAGADOS!");
digo1234 60:9f4d34edef70 635 wait(2);
digo1234 60:9f4d34edef70 636 menu = 0;
digo1234 60:9f4d34edef70 637 safe = 1;
digo1234 60:9f4d34edef70 638 safe_menu = 0;
digo1234 60:9f4d34edef70 639 }
digo1234 60:9f4d34edef70 640
digo1234 60:9f4d34edef70 641 if (botao1 && menu == 4 && safe == 0) {
digo1234 60:9f4d34edef70 642
digo1234 60:9f4d34edef70 643 menu = 5;
digo1234 60:9f4d34edef70 644 safe = 1;
digo1234 60:9f4d34edef70 645 safe_menu = 0;
digo1234 60:9f4d34edef70 646 }
digo1234 60:9f4d34edef70 647
digo1234 60:9f4d34edef70 648 if (botao1 && menu == 5 && safe == 0) {
digo1234 60:9f4d34edef70 649 salva_posicao();
digo1234 60:9f4d34edef70 650 listaCola[index]=0;
digo1234 60:9f4d34edef70 651 lcd.cls();
digo1234 60:9f4d34edef70 652 lcd.setAddress(0,1);
digo1234 60:9f4d34edef70 653 lcd.printf("AGUARDE...");
digo1234 60:9f4d34edef70 654 vai_caminho_desejado(listaX, listaY, listaZ, listaCola, index);
digo1234 60:9f4d34edef70 655 menu = 0;
digo1234 60:9f4d34edef70 656 safe = 1;
digo1234 60:9f4d34edef70 657 safe_menu = 0;
digo1234 60:9f4d34edef70 658 }
digo1234 60:9f4d34edef70 659
digo1234 60:9f4d34edef70 660 // botao2
digo1234 60:9f4d34edef70 661
digo1234 60:9f4d34edef70 662 if (botao2 && menu == 0 && safe == 0) {
digo1234 60:9f4d34edef70 663 if (listaX[1]==0&& listaY[1]==0 && listaZ[1]==0) {
digo1234 60:9f4d34edef70 664 menu = 6;
digo1234 60:9f4d34edef70 665 }
digo1234 60:9f4d34edef70 666 else {
digo1234 60:9f4d34edef70 667 vai_caminho_desejado(listaX, listaY, listaZ, listaCola, index);
digo1234 60:9f4d34edef70 668 menu = 0;
digo1234 60:9f4d34edef70 669 }
digo1234 60:9f4d34edef70 670 safe = 1;
digo1234 60:9f4d34edef70 671 safe_menu = 0;
digo1234 60:9f4d34edef70 672 }
digo1234 60:9f4d34edef70 673
digo1234 60:9f4d34edef70 674 if (botao2 && menu == 1 && safe == 0) {
digo1234 60:9f4d34edef70 675 listaX[index] = 0;
digo1234 60:9f4d34edef70 676 listaY[index] = 0;
digo1234 60:9f4d34edef70 677 listaZ[index] = 0;
digo1234 60:9f4d34edef70 678 listaCola[index]=0;
digo1234 60:9f4d34edef70 679 index = index - 1;
digo1234 60:9f4d34edef70 680 menu = 1;
digo1234 60:9f4d34edef70 681 if (index<0){
digo1234 60:9f4d34edef70 682 index=0;
digo1234 60:9f4d34edef70 683 menu=0;
digo1234 60:9f4d34edef70 684 }
digo1234 60:9f4d34edef70 685 safe = 1;
digo1234 60:9f4d34edef70 686 safe_menu = 0;
digo1234 60:9f4d34edef70 687 }
digo1234 60:9f4d34edef70 688
digo1234 60:9f4d34edef70 689 if (botao2 && menu == 2 && safe == 0) {
digo1234 60:9f4d34edef70 690 listaCola[index-1]=0;
digo1234 60:9f4d34edef70 691 for (int a=0; a<=index; a++){
digo1234 60:9f4d34edef70 692 printf("cola : %i \r\n", listaCola[a]);
digo1234 60:9f4d34edef70 693 }
digo1234 60:9f4d34edef70 694 menu=1;
digo1234 60:9f4d34edef70 695 safe = 1;
digo1234 60:9f4d34edef70 696 safe_menu = 0;
digo1234 60:9f4d34edef70 697 }
digo1234 60:9f4d34edef70 698
digo1234 60:9f4d34edef70 699 if (botao2 && menu == 3 && safe == 0) {
digo1234 60:9f4d34edef70 700 menu = 1;
digo1234 60:9f4d34edef70 701 safe = 1;
digo1234 60:9f4d34edef70 702 safe_menu = 0;
digo1234 60:9f4d34edef70 703 }
digo1234 60:9f4d34edef70 704
digo1234 60:9f4d34edef70 705 if (botao2 && menu == 4 && safe == 0) {
digo1234 60:9f4d34edef70 706 menu = 1;
digo1234 60:9f4d34edef70 707 safe = 1;
digo1234 60:9f4d34edef70 708 safe_menu = 0;
digo1234 60:9f4d34edef70 709 }
digo1234 60:9f4d34edef70 710
digo1234 60:9f4d34edef70 711 // botao3
digo1234 60:9f4d34edef70 712
digo1234 60:9f4d34edef70 713 if (botao3 && menu == 1 && safe == 0) {
digo1234 60:9f4d34edef70 714 menu = 3;
digo1234 60:9f4d34edef70 715 safe = 1;
digo1234 60:9f4d34edef70 716 safe_menu = 0;
digo1234 60:9f4d34edef70 717 }
digo1234 60:9f4d34edef70 718
digo1234 60:9f4d34edef70 719 // botao4
digo1234 60:9f4d34edef70 720
digo1234 60:9f4d34edef70 721 if (botao4 && menu == 1 && safe ==0) {
digo1234 60:9f4d34edef70 722 menu = 4;
digo1234 60:9f4d34edef70 723 safe = 1;
digo1234 60:9f4d34edef70 724 safe_menu = 0;
digo1234 60:9f4d34edef70 725 }
digo1234 60:9f4d34edef70 726
digo1234 60:9f4d34edef70 727
digo1234 60:9f4d34edef70 728
leogrotti 50:58a2df31077a 729 }
leogrotti 44:eecdc0b60f14 730
digo1234 60:9f4d34edef70 731 }