Retrovisor CAN BUS funcionando

Dependencies:   mbed

Committer:
Marcelocostanzo
Date:
Fri Apr 12 12:49:31 2019 +0000
Revision:
0:20364736a14b
Retrovisor CAN BUS funcionando

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marcelocostanzo 0:20364736a14b 1 #include "mbed.h"
Marcelocostanzo 0:20364736a14b 2
Marcelocostanzo 0:20364736a14b 3 //-----------Pinos de saida (output)---------------
Marcelocostanzo 0:20364736a14b 4 DigitalOut IN1A(D5);
Marcelocostanzo 0:20364736a14b 5 DigitalOut IN2A(D4);
Marcelocostanzo 0:20364736a14b 6 DigitalOut EN_A(D2);
Marcelocostanzo 0:20364736a14b 7 DigitalOut IN1B(A0);
Marcelocostanzo 0:20364736a14b 8 DigitalOut IN2B(A1);
Marcelocostanzo 0:20364736a14b 9 DigitalOut EN_B(A4);
Marcelocostanzo 0:20364736a14b 10 DigitalOut LED(PA_5);
Marcelocostanzo 0:20364736a14b 11
Marcelocostanzo 0:20364736a14b 12 //-----------Pinos de saida (input)---------------
Marcelocostanzo 0:20364736a14b 13 DigitalIn SW(PC_13);
Marcelocostanzo 0:20364736a14b 14
Marcelocostanzo 0:20364736a14b 15 //----------Pinos de entrada analogica (ADC)------
Marcelocostanzo 0:20364736a14b 16 AnalogIn AXIS_X(A3);
Marcelocostanzo 0:20364736a14b 17 AnalogIn AXIS_Y(A5);
Marcelocostanzo 0:20364736a14b 18
Marcelocostanzo 0:20364736a14b 19 //---------Declaração de comunicação serial-------
Marcelocostanzo 0:20364736a14b 20 Serial pc(USBTX, USBRX);
Marcelocostanzo 0:20364736a14b 21
Marcelocostanzo 0:20364736a14b 22 //---------Declaração de comunicação CAN-------
Marcelocostanzo 0:20364736a14b 23 CAN can1(PB_8, PB_9);
Marcelocostanzo 0:20364736a14b 24
Marcelocostanzo 0:20364736a14b 25 //---------Declaração de interrupção para debug-------
Marcelocostanzo 0:20364736a14b 26 Ticker flip;
Marcelocostanzo 0:20364736a14b 27
Marcelocostanzo 0:20364736a14b 28
Marcelocostanzo 0:20364736a14b 29 //---------Dados em hexadecimal de cada mensagem-------
Marcelocostanzo 0:20364736a14b 30 static char info = 0x55;
Marcelocostanzo 0:20364736a14b 31 static char left = 0x01;
Marcelocostanzo 0:20364736a14b 32 static char right = 0x02;
Marcelocostanzo 0:20364736a14b 33 static char up = 0x03;
Marcelocostanzo 0:20364736a14b 34 static char down = 0x04;
Marcelocostanzo 0:20364736a14b 35 static char stop = 0x05;
Marcelocostanzo 0:20364736a14b 36
Marcelocostanzo 0:20364736a14b 37 //--------Rotina do debug--------------------------
Marcelocostanzo 0:20364736a14b 38 void debug()
Marcelocostanzo 0:20364736a14b 39 {
Marcelocostanzo 0:20364736a14b 40 LED =! LED;
Marcelocostanzo 0:20364736a14b 41 }
Marcelocostanzo 0:20364736a14b 42
Marcelocostanzo 0:20364736a14b 43 //-------Rotina para setar os pinos na direção -X -------
Marcelocostanzo 0:20364736a14b 44 void move_down()
Marcelocostanzo 0:20364736a14b 45 {
Marcelocostanzo 0:20364736a14b 46 EN_A = 1;
Marcelocostanzo 0:20364736a14b 47 EN_B = 1;
Marcelocostanzo 0:20364736a14b 48 IN1A = 1;
Marcelocostanzo 0:20364736a14b 49 IN2A = 0;
Marcelocostanzo 0:20364736a14b 50 IN1B = 0;
Marcelocostanzo 0:20364736a14b 51 IN2B = 0;
Marcelocostanzo 0:20364736a14b 52
Marcelocostanzo 0:20364736a14b 53 }
Marcelocostanzo 0:20364736a14b 54
Marcelocostanzo 0:20364736a14b 55 //-------Rotina para setar os pinos na direção +X -------
Marcelocostanzo 0:20364736a14b 56 void move_up()
Marcelocostanzo 0:20364736a14b 57 {
Marcelocostanzo 0:20364736a14b 58 EN_A = 1;
Marcelocostanzo 0:20364736a14b 59 EN_B = 1;
Marcelocostanzo 0:20364736a14b 60 IN1A = 0;
Marcelocostanzo 0:20364736a14b 61 IN2A = 1;
Marcelocostanzo 0:20364736a14b 62 IN1B = 1;
Marcelocostanzo 0:20364736a14b 63 IN2B = 0;
Marcelocostanzo 0:20364736a14b 64 }
Marcelocostanzo 0:20364736a14b 65
Marcelocostanzo 0:20364736a14b 66 //-------Rotina para setar os pinos na direção -Y -------
Marcelocostanzo 0:20364736a14b 67 void move_left()
Marcelocostanzo 0:20364736a14b 68 {
Marcelocostanzo 0:20364736a14b 69 EN_A = 1;
Marcelocostanzo 0:20364736a14b 70 EN_B = 1;
Marcelocostanzo 0:20364736a14b 71 IN1A = 1;
Marcelocostanzo 0:20364736a14b 72 IN2A = 1;
Marcelocostanzo 0:20364736a14b 73 IN1B = 0;
Marcelocostanzo 0:20364736a14b 74 IN2B = 0;
Marcelocostanzo 0:20364736a14b 75 }
Marcelocostanzo 0:20364736a14b 76
Marcelocostanzo 0:20364736a14b 77 //-------Rotina para setar os pinos na direção +Y -------
Marcelocostanzo 0:20364736a14b 78 void move_right()
Marcelocostanzo 0:20364736a14b 79 {
Marcelocostanzo 0:20364736a14b 80 EN_A = 1;
Marcelocostanzo 0:20364736a14b 81 EN_B = 1;
Marcelocostanzo 0:20364736a14b 82 IN1A = 0;
Marcelocostanzo 0:20364736a14b 83 IN2A = 0;
Marcelocostanzo 0:20364736a14b 84 IN1B = 1;
Marcelocostanzo 0:20364736a14b 85 IN2B = 0;
Marcelocostanzo 0:20364736a14b 86 }
Marcelocostanzo 0:20364736a14b 87
Marcelocostanzo 0:20364736a14b 88 //-------Rotina para desligar os motores de X e Y -------
Marcelocostanzo 0:20364736a14b 89 void move_stop()
Marcelocostanzo 0:20364736a14b 90 {
Marcelocostanzo 0:20364736a14b 91 EN_A = 0;
Marcelocostanzo 0:20364736a14b 92 EN_B = 0;
Marcelocostanzo 0:20364736a14b 93 }
Marcelocostanzo 0:20364736a14b 94
Marcelocostanzo 0:20364736a14b 95 int main()
Marcelocostanzo 0:20364736a14b 96 {
Marcelocostanzo 0:20364736a14b 97 //---------Garante que não haverá curto na ponte H ao ligar----
Marcelocostanzo 0:20364736a14b 98 IN1A = 0;
Marcelocostanzo 0:20364736a14b 99 IN2A = 0;
Marcelocostanzo 0:20364736a14b 100 EN_A = 1;
Marcelocostanzo 0:20364736a14b 101 IN1B = 0;
Marcelocostanzo 0:20364736a14b 102 IN2B = 0;
Marcelocostanzo 0:20364736a14b 103 EN_B = 1;
Marcelocostanzo 0:20364736a14b 104
Marcelocostanzo 0:20364736a14b 105 //-----atribuição dos dados as mensagens----------
Marcelocostanzo 0:20364736a14b 106 CANMessage msg(5, &info, 8, CANData, CANStandard);
Marcelocostanzo 0:20364736a14b 107 CANMessage msg_up(5, &up, 8, CANData, CANStandard);
Marcelocostanzo 0:20364736a14b 108 CANMessage msg_down(5, &down, 8, CANData, CANStandard);
Marcelocostanzo 0:20364736a14b 109 CANMessage msg_left(5, &left, 8, CANData, CANStandard);
Marcelocostanzo 0:20364736a14b 110 CANMessage msg_right(5, &right, 8, CANData, CANStandard);
Marcelocostanzo 0:20364736a14b 111 CANMessage msg_stop(5, &stop, 8, CANData, CANStandard);
Marcelocostanzo 0:20364736a14b 112
Marcelocostanzo 0:20364736a14b 113 //----Pisca o led e envia via serial uma string-------
Marcelocostanzo 0:20364736a14b 114 LED = 1;
Marcelocostanzo 0:20364736a14b 115 wait(0.5);
Marcelocostanzo 0:20364736a14b 116 LED = 0;
Marcelocostanzo 0:20364736a14b 117 wait(0.5);
Marcelocostanzo 0:20364736a14b 118 pc.printf("Start\n");
Marcelocostanzo 0:20364736a14b 119
Marcelocostanzo 0:20364736a14b 120 //-----Habilita a interrupção para debug--------------
Marcelocostanzo 0:20364736a14b 121 flip.attach(&debug, 0.5f);
Marcelocostanzo 0:20364736a14b 122
Marcelocostanzo 0:20364736a14b 123 //---------Declaração de variaveis locais----------------
Marcelocostanzo 0:20364736a14b 124 float VAL_X = 0.0f, VAL_Y = 0.0f;
Marcelocostanzo 0:20364736a14b 125
Marcelocostanzo 0:20364736a14b 126 while(1)
Marcelocostanzo 0:20364736a14b 127 {
Marcelocostanzo 0:20364736a14b 128
Marcelocostanzo 0:20364736a14b 129 //------Leitura do joystick nos eixos X e Y --------------
Marcelocostanzo 0:20364736a14b 130 VAL_X = AXIS_X.read();
Marcelocostanzo 0:20364736a14b 131 VAL_Y = AXIS_Y.read();
Marcelocostanzo 0:20364736a14b 132
Marcelocostanzo 0:20364736a14b 133 //----Envia mensagem para +Y -----
Marcelocostanzo 0:20364736a14b 134 if(VAL_X > 0.7f)
Marcelocostanzo 0:20364736a14b 135 {
Marcelocostanzo 0:20364736a14b 136 //printf("\n\rRIGHT");
Marcelocostanzo 0:20364736a14b 137 if(can1.write(msg_right))
Marcelocostanzo 0:20364736a14b 138 {
Marcelocostanzo 0:20364736a14b 139 pc.printf("Direita enviada\n");
Marcelocostanzo 0:20364736a14b 140 }
Marcelocostanzo 0:20364736a14b 141
Marcelocostanzo 0:20364736a14b 142 else
Marcelocostanzo 0:20364736a14b 143 {
Marcelocostanzo 0:20364736a14b 144 pc.printf("Direita NAO enviada\n");
Marcelocostanzo 0:20364736a14b 145 }
Marcelocostanzo 0:20364736a14b 146 }
Marcelocostanzo 0:20364736a14b 147
Marcelocostanzo 0:20364736a14b 148 //----Envia mensagem para -Y -----
Marcelocostanzo 0:20364736a14b 149 if(VAL_X < 0.3f)
Marcelocostanzo 0:20364736a14b 150 {
Marcelocostanzo 0:20364736a14b 151 //printf("\n\rLEFT");
Marcelocostanzo 0:20364736a14b 152 if(can1.write(msg_left))
Marcelocostanzo 0:20364736a14b 153 {
Marcelocostanzo 0:20364736a14b 154 pc.printf("Esquerda enviada\n");
Marcelocostanzo 0:20364736a14b 155 }
Marcelocostanzo 0:20364736a14b 156
Marcelocostanzo 0:20364736a14b 157 else
Marcelocostanzo 0:20364736a14b 158 {
Marcelocostanzo 0:20364736a14b 159 pc.printf("Esquerda NAO enviada\n");
Marcelocostanzo 0:20364736a14b 160 }
Marcelocostanzo 0:20364736a14b 161 }
Marcelocostanzo 0:20364736a14b 162
Marcelocostanzo 0:20364736a14b 163 //----Envia mensagem para +X -----
Marcelocostanzo 0:20364736a14b 164 if(VAL_Y > 0.7f)
Marcelocostanzo 0:20364736a14b 165 {
Marcelocostanzo 0:20364736a14b 166 //printf("\n\rUP");
Marcelocostanzo 0:20364736a14b 167 if(can1.write(msg_up))
Marcelocostanzo 0:20364736a14b 168 {
Marcelocostanzo 0:20364736a14b 169 pc.printf("Cima enviada\n");
Marcelocostanzo 0:20364736a14b 170 }
Marcelocostanzo 0:20364736a14b 171
Marcelocostanzo 0:20364736a14b 172 else
Marcelocostanzo 0:20364736a14b 173 {
Marcelocostanzo 0:20364736a14b 174 pc.printf("Cima NAO enviada\n");
Marcelocostanzo 0:20364736a14b 175 }
Marcelocostanzo 0:20364736a14b 176 }
Marcelocostanzo 0:20364736a14b 177
Marcelocostanzo 0:20364736a14b 178 //----Envia mensagem para -X -----
Marcelocostanzo 0:20364736a14b 179 if(VAL_Y < 0.3f)
Marcelocostanzo 0:20364736a14b 180 {
Marcelocostanzo 0:20364736a14b 181 //printf("\n\rDown");
Marcelocostanzo 0:20364736a14b 182 if(can1.write(msg_down))
Marcelocostanzo 0:20364736a14b 183 {
Marcelocostanzo 0:20364736a14b 184 pc.printf("Baixo enviada\n");
Marcelocostanzo 0:20364736a14b 185 }
Marcelocostanzo 0:20364736a14b 186
Marcelocostanzo 0:20364736a14b 187 else
Marcelocostanzo 0:20364736a14b 188 {
Marcelocostanzo 0:20364736a14b 189 pc.printf("Baixo NAO enviada\n");
Marcelocostanzo 0:20364736a14b 190 }
Marcelocostanzo 0:20364736a14b 191 }
Marcelocostanzo 0:20364736a14b 192
Marcelocostanzo 0:20364736a14b 193 //----Se o joystick estiver em repouso, envia mensagem para parar os motores dos eixos--------
Marcelocostanzo 0:20364736a14b 194 if(((VAL_Y < 0.65f) && (VAL_Y > 0.45f)) && ((VAL_X < 0.65f) && (VAL_X > 0.45f)))
Marcelocostanzo 0:20364736a14b 195 {
Marcelocostanzo 0:20364736a14b 196 //printf("\n\rStop");
Marcelocostanzo 0:20364736a14b 197 if(can1.write(msg_stop))
Marcelocostanzo 0:20364736a14b 198 {
Marcelocostanzo 0:20364736a14b 199 pc.printf("Parada enviada\n");
Marcelocostanzo 0:20364736a14b 200 }
Marcelocostanzo 0:20364736a14b 201
Marcelocostanzo 0:20364736a14b 202 else
Marcelocostanzo 0:20364736a14b 203 {
Marcelocostanzo 0:20364736a14b 204 pc.printf("Parada NAO enviada\n");
Marcelocostanzo 0:20364736a14b 205 }
Marcelocostanzo 0:20364736a14b 206 }
Marcelocostanzo 0:20364736a14b 207
Marcelocostanzo 0:20364736a14b 208 //-----Verifica se recebeu uma mensagem na CAN-------------
Marcelocostanzo 0:20364736a14b 209 if(can1.read(msg))
Marcelocostanzo 0:20364736a14b 210 {
Marcelocostanzo 0:20364736a14b 211 pc.printf("Mensagem recebida: %x\n", msg.data[0]);
Marcelocostanzo 0:20364736a14b 212 }
Marcelocostanzo 0:20364736a14b 213
Marcelocostanzo 0:20364736a14b 214 //------Se a mensagem for do tipo UP, então move para cima----
Marcelocostanzo 0:20364736a14b 215 if(msg.data[0] == up)
Marcelocostanzo 0:20364736a14b 216 {
Marcelocostanzo 0:20364736a14b 217 move_up();
Marcelocostanzo 0:20364736a14b 218 pc.printf("Cima recebida: %x\n", msg_up.data[0]);
Marcelocostanzo 0:20364736a14b 219 }
Marcelocostanzo 0:20364736a14b 220
Marcelocostanzo 0:20364736a14b 221 //------Se a mensagem for do tipo DOWN, então move para baixo----
Marcelocostanzo 0:20364736a14b 222 if(msg.data[0] == down)
Marcelocostanzo 0:20364736a14b 223 {
Marcelocostanzo 0:20364736a14b 224 move_down();
Marcelocostanzo 0:20364736a14b 225 pc.printf("Baixo recebida: %x\n", msg_down.data[0]);
Marcelocostanzo 0:20364736a14b 226 }
Marcelocostanzo 0:20364736a14b 227
Marcelocostanzo 0:20364736a14b 228 //------Se a mensagem for do tipo RIGHT, então move para direita----
Marcelocostanzo 0:20364736a14b 229 if(msg.data[0] == right)
Marcelocostanzo 0:20364736a14b 230 {
Marcelocostanzo 0:20364736a14b 231 move_right();
Marcelocostanzo 0:20364736a14b 232 pc.printf("Direita recebida: %x\n", msg_right.data[0]);
Marcelocostanzo 0:20364736a14b 233 }
Marcelocostanzo 0:20364736a14b 234
Marcelocostanzo 0:20364736a14b 235 //------Se a mensagem for do tipo LEFT, então move para esquerda----
Marcelocostanzo 0:20364736a14b 236 if(msg.data[0] == left)
Marcelocostanzo 0:20364736a14b 237 {
Marcelocostanzo 0:20364736a14b 238 move_left();
Marcelocostanzo 0:20364736a14b 239 pc.printf("Esquerda recebida: %x\n", msg_left.data[0]);
Marcelocostanzo 0:20364736a14b 240 }
Marcelocostanzo 0:20364736a14b 241
Marcelocostanzo 0:20364736a14b 242 //------Se a mensagem for do tipo STOP, então para os motores------
Marcelocostanzo 0:20364736a14b 243 if(msg.data[0] == stop)
Marcelocostanzo 0:20364736a14b 244 {
Marcelocostanzo 0:20364736a14b 245 move_stop();
Marcelocostanzo 0:20364736a14b 246 pc.printf("Parada recebida: %x\n", msg_stop.data[0]);
Marcelocostanzo 0:20364736a14b 247 }
Marcelocostanzo 0:20364736a14b 248
Marcelocostanzo 0:20364736a14b 249 msg.data[0] = 0x00;//limpa a variavel
Marcelocostanzo 0:20364736a14b 250
Marcelocostanzo 0:20364736a14b 251 wait_ms(10);//controla o envio/recebimento de mensagens
Marcelocostanzo 0:20364736a14b 252 }
Marcelocostanzo 0:20364736a14b 253 }