Sz_Insper
/
Can_between_NUCLEOS_LCD
comunicaçao CAN com LCD
Revision 1:dc5aef755b51, committed 2020-05-29
- Comitter:
- Marcelocostanzo
- Date:
- Fri May 29 10:54:45 2020 +0000
- Parent:
- 0:f45252ccde11
- Commit message:
- V1 - Funcionando
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r f45252ccde11 -r dc5aef755b51 main.cpp --- a/main.cpp Tue May 26 17:00:45 2020 +0000 +++ b/main.cpp Fri May 29 10:54:45 2020 +0000 @@ -6,6 +6,11 @@ //-------Declara uso da serial--------------------- Serial pc(USBTX, USBRX); // tx, rx + +//----------Pinos de entrada analogica (ADC)------ +AnalogIn AXIS_X(A3); +AnalogIn AXIS_Y(A5); + //--------Declara uso da CAN---------------------- CAN can1(PB_8, PB_9); @@ -15,16 +20,26 @@ //-----Declara uso do botao nativo da placa-------- DigitalIn SW(PC_13); -//------Dado da mensagem chamada de info que sera usada--------------- +//---------Dados em hexadecimal de cada mensagem------- static char info = 0x55; +static char left = 0x01; +static char right = 0x02; +static char up = 0x03; +static char down = 0x04; +static char stop = 0x05; int main() { lcd.setCursor(TextLCD::CurOff_BlkOff); lcd.cls(); - //------construção da mensagem CAN (ID, dado, tamanho em bits, Tipo de dado, Modo CAN)--- + //-----atribuição dos dados as mensagens---------- CANMessage msg(5, &info, 8, CANData, CANStandard); + CANMessage msg_up(5, &up, 8, CANData, CANStandard); + CANMessage msg_down(5, &down, 8, CANData, CANStandard); + CANMessage msg_left(5, &left, 8, CANData, CANStandard); + CANMessage msg_right(5, &right, 8, CANData, CANStandard); + CANMessage msg_stop(5, &stop, 8, CANData, CANStandard); //pisca o led LED = 1; @@ -36,54 +51,143 @@ pc.printf("Ola!!!\n"); lcd.locate(0,0); lcd.printf("Ola!!!"); + + float VAL_X = 0.0f, VAL_Y = 0.0f; while(1) { - //---checa se foi apertado o botão, com debounce - if(SW == 0) + + //------Leitura do joystick nos eixos X e Y -------------- + VAL_X = AXIS_X.read(); + VAL_Y = AXIS_Y.read(); + + //----Envia mensagem para +Y ----- + if(VAL_X > 0.7f) { - wait_ms(200); - if(SW == 0) + if(can1.write(msg_right)) + { + pc.printf("Direita enviada\n"); + } + + else { - //se a mensagem foi enviada - if(can1.write(msg)) + pc.printf("Direita NAO enviada\n"); + } + } + + //----Envia mensagem para -Y ----- + if(VAL_X < 0.3f) + { + //printf("\n\rLEFT"); + if(can1.write(msg_left)) + { + pc.printf("Esquerda enviada\n"); + } + + else + { + pc.printf("Esquerda NAO enviada\n"); + } + } + + //----Envia mensagem para +X ----- + if(VAL_Y > 0.7f) + { + //printf("\n\rUP"); + if(can1.write(msg_up)) { - lcd.cls(); - pc.printf("Mensagem enviada\n"); - lcd.locate(0,0); - lcd.printf("Msg enviada"); + pc.printf("Cima enviada\n"); } - //se a mensagem nao foi enviada else { - lcd.cls(); - pc.printf("Mensagem NAO enviada\n"); - lcd.locate(0,0); - lcd.printf("Msg NAO enviada"); - } + pc.printf("Cima NAO enviada\n"); + } + } + + //----Envia mensagem para -X ----- + if(VAL_Y < 0.3f) + { + //printf("\n\rDown"); + if(can1.write(msg_down)) + { + pc.printf("Baixo enviada\n"); } + + else + { + pc.printf("Baixo NAO enviada\n"); + } } + + //----Se o joystick estiver em repouso, envia mensagem para parar os motores dos eixos-------- + if(((VAL_Y < 0.65f) && (VAL_Y > 0.45f)) && ((VAL_X < 0.65f) && (VAL_X > 0.45f))) + { + //printf("\n\rStop"); + if(can1.write(msg_stop)) + { + pc.printf("Parada enviada\n"); + } + + else + { + pc.printf("Parada NAO enviada\n"); + } + } - //se a mensagem for recebida - if(can1.read(msg)) + //-----Verifica se recebeu uma mensagem na CAN------------- + if(can1.read(msg)) { - lcd.cls(); - //printa o valor da mensagem pc.printf("Mensagem recebida: %x\n", msg.data[0]); + } + + //------Se a mensagem for do tipo UP, então move para cima---- + if(msg.data[0] == up) + { + //move_up(); + pc.printf("Cima recebida: %x\n", msg_up.data[0]); lcd.locate(0,0); - lcd.printf("Mensagem recebida"); - lcd.locate(0,1); - lcd.printf("%x\n", msg.data[0]); - - //pisca o led - for(int i = 0; i < 5; i++) - { - LED = 1; - wait_ms(300); - LED = 0; - wait_ms(300); - } + lcd.printf("Cima "); + } + + //------Se a mensagem for do tipo DOWN, então move para baixo---- + if(msg.data[0] == down) + { + //move_down(); + pc.printf("Baixo recebida: %x\n", msg_down.data[0]); + lcd.locate(0,0); + lcd.printf("Baixo "); + } + + //------Se a mensagem for do tipo RIGHT, então move para direita---- + if(msg.data[0] == right) + { + //move_right(); + pc.printf("Direita recebida: %x\n", msg_right.data[0]); + lcd.locate(0,0); + lcd.printf("Direita "); } + + //------Se a mensagem for do tipo LEFT, então move para esquerda---- + if(msg.data[0] == left) + { + //move_left(); + pc.printf("Esquerda recebida: %x\n", msg_left.data[0]); + lcd.locate(0,0); + lcd.printf("Esquerda"); + } + + //------Se a mensagem for do tipo STOP, então para os motores------ + if(msg.data[0] == stop) + { + // move_stop(); + pc.printf("Parada recebida: %x\n", msg_stop.data[0]); + lcd.locate(0,0); + lcd.printf("Stop "); + } + + msg.data[0] = 0x00;//limpa a variavel + + wait_ms(200);//controla o envio/recebimento de mensagens } }