comunicaçao CAN com LCD

Dependencies:   mbed TextLCD

Revision:
1:dc5aef755b51
Parent:
0:f45252ccde11
--- 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
     }
 }