Dependencies:   mbed

Committer:
diogonac
Date:
Thu May 13 12:31:27 2021 +0000
Revision:
6:c344e6b93f34
Parent:
5:bfedd53bfd09
Child:
7:622a62f7c63e
v1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diogonac 3:ce5c55c100b1 1 #include "mbed.h"
diogonac 3:ce5c55c100b1 2
diogonac 3:ce5c55c100b1 3 Serial pc (USBTX, USBRX);
diogonac 3:ce5c55c100b1 4
diogonac 6:c344e6b93f34 5
diogonac 5:bfedd53bfd09 6 AnalogIn eixo_Z(A2);
diogonac 4:c3007ca446ec 7 InterruptIn posicao_salva(PA_8);
diogonac 4:c3007ca446ec 8 InterruptIn botao_emergencia(PB_10);
diogonac 3:ce5c55c100b1 9
diogonac 3:ce5c55c100b1 10 BusOut motor_x(PA_9, PC_7, PB_6, PA_7);
diogonac 3:ce5c55c100b1 11 BusOut motor_y(PA_11, PB_12, PB_11, PB_2);
diogonac 4:c3007ca446ec 12 BusOut motor_z(PB_1, PB_15, PB_14, PB_13);
diogonac 3:ce5c55c100b1 13
diogonac 3:ce5c55c100b1 14 double frequencia; //Hz
diogonac 3:ce5c55c100b1 15 double velocidade = 4; //RPM
diogonac 3:ce5c55c100b1 16 double tempo; //Segundos
diogonac 3:ce5c55c100b1 17 int i;
diogonac 4:c3007ca446ec 18 int X, Y, Z;
diogonac 4:c3007ca446ec 19 int pegaX, pegaY, pegaZ;
diogonac 4:c3007ca446ec 20 int posicao_salva_estado, botao_emergencia_estado;
diogonac 3:ce5c55c100b1 21
diogonac 4:c3007ca446ec 22 void rotina_posicao_salva(void);
diogonac 4:c3007ca446ec 23 void rotina_emergencia(void);
diogonac 3:ce5c55c100b1 24
diogonac 3:ce5c55c100b1 25
diogonac 3:ce5c55c100b1 26
diogonac 3:ce5c55c100b1 27 int main()
diogonac 3:ce5c55c100b1 28 {
diogonac 3:ce5c55c100b1 29 motor_x = 0x00;
diogonac 3:ce5c55c100b1 30 motor_y = 0x00;
diogonac 4:c3007ca446ec 31 motor_z = 0x00;
diogonac 3:ce5c55c100b1 32 pc.baud(115200);
diogonac 4:c3007ca446ec 33 posicao_salva.rise(&rotina_posicao_salva);
diogonac 4:c3007ca446ec 34 botao_emergencia.rise(&rotina_emergencia);
diogonac 3:ce5c55c100b1 35 frequencia = (2048*velocidade)/60;
diogonac 3:ce5c55c100b1 36 tempo = (1/frequencia);
diogonac 3:ce5c55c100b1 37
diogonac 3:ce5c55c100b1 38 while(1) {
diogonac 3:ce5c55c100b1 39
diogonac 3:ce5c55c100b1 40 X = eixo_X.read_u16();
diogonac 3:ce5c55c100b1 41 Y = eixo_Y.read_u16();
diogonac 4:c3007ca446ec 42 Z = eixo_Z.read_u16();
diogonac 4:c3007ca446ec 43 posicao_salva_estado = posicao_salva.read();
diogonac 4:c3007ca446ec 44 botao_emergencia_estado = botao_emergencia.read();
diogonac 3:ce5c55c100b1 45
diogonac 4:c3007ca446ec 46 pc.printf("X=%4d, Y=%4d, Z=%4d, PegaX=%4d, PegaY=%4d, PegaZ=%4d, Posicao_salva_estado=%d, Botao_emergencia_estado=%d \r\n", X, Y, Z, pegaX, pegaY, pegaZ, posicao_salva_estado, botao_emergencia_estado);
diogonac 3:ce5c55c100b1 47
diogonac 3:ce5c55c100b1 48 if(31000 <= X & X <= 35000) {
diogonac 3:ce5c55c100b1 49
diogonac 3:ce5c55c100b1 50 motor_x = 0x00;
diogonac 3:ce5c55c100b1 51 } else {
diogonac 3:ce5c55c100b1 52 if (X > 31000) {
diogonac 3:ce5c55c100b1 53 for(i = 0; i < 4; i++) {
diogonac 3:ce5c55c100b1 54 motor_x = 1 << i;
diogonac 3:ce5c55c100b1 55 wait(tempo);
diogonac 3:ce5c55c100b1 56 }
diogonac 3:ce5c55c100b1 57 }
diogonac 3:ce5c55c100b1 58
diogonac 3:ce5c55c100b1 59 if(X<35000) {
diogonac 3:ce5c55c100b1 60 for(i = 3; i > -1; i--) {
diogonac 3:ce5c55c100b1 61 motor_x = 1 << i;
diogonac 3:ce5c55c100b1 62 wait(tempo);
diogonac 3:ce5c55c100b1 63 }
diogonac 3:ce5c55c100b1 64 }
diogonac 3:ce5c55c100b1 65 }
diogonac 3:ce5c55c100b1 66
diogonac 3:ce5c55c100b1 67 if(31000 <= Y & Y <= 35000) {
diogonac 3:ce5c55c100b1 68
diogonac 3:ce5c55c100b1 69 motor_y = 0x00;
diogonac 3:ce5c55c100b1 70 }
diogonac 3:ce5c55c100b1 71
diogonac 3:ce5c55c100b1 72 else {
diogonac 4:c3007ca446ec 73 if (Y > 31000) {
diogonac 3:ce5c55c100b1 74 for(i = 0; i < 4; i++) {
diogonac 3:ce5c55c100b1 75 motor_y = 1 << i;
diogonac 3:ce5c55c100b1 76 wait(tempo);
diogonac 3:ce5c55c100b1 77 }
diogonac 3:ce5c55c100b1 78 }
diogonac 3:ce5c55c100b1 79
diogonac 4:c3007ca446ec 80 if(Y < 35000) {
diogonac 3:ce5c55c100b1 81 for(i = 3; i > -1; i--) {
diogonac 3:ce5c55c100b1 82 motor_y = 1 << i;
diogonac 3:ce5c55c100b1 83 wait(tempo);
diogonac 3:ce5c55c100b1 84 }
diogonac 3:ce5c55c100b1 85 }
diogonac 3:ce5c55c100b1 86 }
diogonac 4:c3007ca446ec 87
diogonac 4:c3007ca446ec 88 if(31000 <= X & X <= 35000) {
diogonac 4:c3007ca446ec 89
diogonac 4:c3007ca446ec 90 motor_z = 0x00;
diogonac 4:c3007ca446ec 91 } else {
diogonac 4:c3007ca446ec 92 if (X > 31000) {
diogonac 4:c3007ca446ec 93 for(i = 0; i < 4; i++) {
diogonac 4:c3007ca446ec 94 motor_z = 1 << i;
diogonac 4:c3007ca446ec 95 wait(tempo);
diogonac 4:c3007ca446ec 96 }
diogonac 4:c3007ca446ec 97 }
diogonac 4:c3007ca446ec 98
diogonac 4:c3007ca446ec 99 if(X<35000) {
diogonac 4:c3007ca446ec 100 for(i = 3; i > -1; i--) {
diogonac 4:c3007ca446ec 101 motor_z = 1 << i;
diogonac 4:c3007ca446ec 102 wait(tempo);
diogonac 4:c3007ca446ec 103 }
diogonac 4:c3007ca446ec 104 }
diogonac 4:c3007ca446ec 105 }
diogonac 4:c3007ca446ec 106
diogonac 3:ce5c55c100b1 107 }
diogonac 3:ce5c55c100b1 108 }
diogonac 3:ce5c55c100b1 109
diogonac 3:ce5c55c100b1 110
diogonac 4:c3007ca446ec 111 void rotina_posicao_salva()
diogonac 3:ce5c55c100b1 112 {
diogonac 4:c3007ca446ec 113 if(posicao_salva_estado == 0) {
diogonac 4:c3007ca446ec 114
diogonac 4:c3007ca446ec 115 pegaX = X;
diogonac 4:c3007ca446ec 116 pegaY = Y;
diogonac 4:c3007ca446ec 117 pegaZ = Z;
diogonac 4:c3007ca446ec 118
diogonac 4:c3007ca446ec 119 } else {
diogonac 4:c3007ca446ec 120
diogonac 4:c3007ca446ec 121 pegaX = 0;
diogonac 4:c3007ca446ec 122 pegaY = 0;
diogonac 4:c3007ca446ec 123 pegaZ = 0;
diogonac 4:c3007ca446ec 124
diogonac 4:c3007ca446ec 125 }
diogonac 4:c3007ca446ec 126 }
diogonac 4:c3007ca446ec 127
diogonac 4:c3007ca446ec 128 void rotina_emergencia()
diogonac 4:c3007ca446ec 129 {
diogonac 4:c3007ca446ec 130 if(botao_emergencia_estado == 0) {
diogonac 4:c3007ca446ec 131
diogonac 4:c3007ca446ec 132 motor_x = 0x00;
diogonac 4:c3007ca446ec 133 motor_y = 0x00;
diogonac 4:c3007ca446ec 134 motor_z = 0x00;
diogonac 4:c3007ca446ec 135
diogonac 4:c3007ca446ec 136 }
diogonac 3:ce5c55c100b1 137 }