TLMoto

Dependencies:   CANnucleo CANnucleo_Hello mbed

Fork of CANnucleo_Hello by Zoltan Hudak

Files at this revision

API Documentation at this revision

Comitter:
ser1516
Date:
Sat Oct 22 16:34:56 2016 +0000
Parent:
20:eb1a8042605e
Commit message:
comit antes de gerardo mexer

Changed in this revision

CANnucleo_Hello.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r eb1a8042605e -r dd8c642ca404 CANnucleo_Hello.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANnucleo_Hello.lib	Sat Oct 22 16:34:56 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/hudakz/code/CANnucleo_Hello/#eb1a8042605e
diff -r eb1a8042605e -r dd8c642ca404 main.cpp
--- a/main.cpp	Tue Aug 16 21:13:47 2016 +0000
+++ b/main.cpp	Sat Oct 22 16:34:56 2016 +0000
@@ -1,10 +1,10 @@
 /*
  * An example showing how to use the CANnucleo library:
  *
- * Two affordable (less than $3 on ebay) STM32F103C8T6 boards (20kB SRAM, 64kB Flash), 
- * (see [https://developer.mbed.org/users/hudakz/code/STM32F103C8T6_Hello/] for more details) 
- * are connected to the same CAN bus via transceivers (MCP2551 or TJA1040, or etc.). 
- * CAN transceivers are not part of NUCLEO boards, therefore must be added by you. 
+ * Two affordable (less than $3 on ebay) STM32F103C8T6 boards (20kB SRAM, 64kB Flash),
+ * (see [https://developer.mbed.org/users/hudakz/code/STM32F103C8T6_Hello/] for more details)
+ * are connected to the same CAN bus via transceivers (MCP2551 or TJA1040, or etc.).
+ * CAN transceivers are not part of NUCLEO boards, therefore must be added by you.
  * Remember also that CAN bus (even a short one) must be terminated with 120 Ohm resitors at both ends.
  *
  * For more details see the wiki page <https://developer.mbed.org/users/hudakz/code/CANnucleo_Hello/>
@@ -13,37 +13,24 @@
  *
  * The same code is used for both NUCLEO boards, but:
  *      For board #1 compile the example without any change.
- *      For board #2 comment out line 23 before compiling 
+ *      For board #2 comment out line 23 before compiling
  *
  * Once the binaries have been downloaded to the boards reset board #1.
  *
- */ 
+ */
 
-//#define TARGET_STM32F103C8T6  1     // uncomment this line when using STM32F103C8T6 boards!                                    
-#define BOARD1                1     // comment out this line when compiling for board #2
+//#define TARGET_STM32F103C8T6  1     // uncomment this line when using STM32F103C8T6 boards!
+//#define BOARD1                1     // comment out this line when compiling for board #2
 
-#if defined(TARGET_STM32F103C8T6)
-    #define LED_PIN PC_13
-    const int OFF = 1;
-    const int ON  = 0;
-#else
-    #define LED_PIN LED1
-    const int OFF = 0;
-    const int ON  = 1;
-#endif
+
 
-#if defined(BOARD1)
-    const unsigned int RX_ID = 0x100;
-    const unsigned int TX_ID = 0x101;
-#else
-    const unsigned int RX_ID = 0x101;
-    const unsigned int TX_ID = 0x100;
-#endif
+const unsigned int RX_ID = 0x100;
+const unsigned int TX_ID = 0x101;
 
 #include "CANnucleo.h"
 #include "mbed.h"
 
-/* 
+/*
  * To avaoid name collision with the CAN and CANMessage classes built into the mbed library
  * the CANnucleo's CAN and CANMessage classes have been moved into the CANnucleo namespace.
  * Remember to qualify them with the CANnucleo namespace.
@@ -51,80 +38,116 @@
 CANnucleo::CAN          can(PA_11, PA_12);  // CAN Rx pin name, CAN Tx pin name
 CANnucleo::CANMessage   rxMsg;
 CANnucleo::CANMessage   txMsg;
-DigitalOut              led(LED_PIN);
-int                     ledState;
+CANnucleo::CANMessage   throttle_txMsg;
+
+
+DigitalOut              led(PA_5);
+
 Timer                   timer;
 int                     counter = 0;
 volatile bool           msgAvailable = false;
+volatile bool           to_send = false;
 
 /**
  * @brief   'CAN receive-complete' interrup handler.
  * @note    Called on arrival of new CAN message.
  *          Keep it as short as possible.
- * @param   
- * @retval  
+ * @param
+ * @retval
  */
-void onMsgReceived() {
+void onMsgReceived()
+{
     msgAvailable = true;
 }
 
 /**
  * @brief   Main
  * @note
- * @param 
+ * @param
  * @retval
  */
-int main() {
-    can.frequency(1000000);                     // set bit rate to 1Mbps
-    can.attach(&onMsgReceived);                 // attach 'CAN receive-complete' interrupt handler
+
+bool key_switch = 0;
+
+void flip()
+{
+    key_switch = !key_switch;
+    led = key_switch;
+    txMsg.clear();
+    txMsg.id = 1000;
+    txMsg << key_switch;
+    to_send=1;
     
-#if defined(BOARD1)
-    led = ON;       // turn LED on
-    timer.start();  // start timer
-    printf("CANnucleo_Hello board #1\r\n");
-#else
-    led = OFF;      // turn LED off
-    printf("CANnucleo_Hello board #2\r\n");
-#endif
+    
+
+    //to_send = 1;
+}
+
+Ticker flipper;
 
-    while(1) {
-        if(timer.read() >= 1.0) {               // check for timeout
-            timer.stop();                       // stop timer
-            timer.reset();                      // reset timer
-            counter++;                          // increment counter
-            ledState = led.read();              // get led state
-            txMsg.clear();                      // clear Tx message storage
-            txMsg.id = TX_ID;                   // set ID
-            txMsg << counter;                   // append first data item
-            txMsg << ledState;                  // append second data item (total data lenght must be <= 8 bytes!)
-            led = OFF;                          // turn LED off
-            if(can.write(txMsg))                // transmit message
-                printf("CAN message sent\r\n"); 
-            else
-                printf("Transmission error\r\n");
-        }
+typedef union can_union {
+    int i[2];
+    char bytes[8];
+    float f[2];
+} data;
+float received[12];
+char missed_can=0;
+int main()
+
+{
+  
+    flipper.attach(&flip, 5);                 // turn on or off
+    led=key_switch;
+    timer.start();  // start timer
+    char counter = 0;
+    printf("started\r\n");  can.frequency(1000000);
+    data data;                 // set bit rate to 1Mbps
+    can.attach(&onMsgReceived);                 // attach 'CAN receive-complete' interrupt handler
+    while(true) {
+
         if(msgAvailable) {
             msgAvailable = false;               // reset flag for next use
-            can.read(rxMsg);                    // read message into Rx message storage
-            printf("CAN message received\r\n");
-            printf("  ID      = 0x%.3x\r\n", rxMsg.id);
-            printf("  Type    = %d\r\n", rxMsg.type);
-            printf("  Format  = %d\r\n", rxMsg.format);
-            printf("  Length  = %d\r\n", rxMsg.len);
-            printf("  Data    =");            
-            for(int i = 0; i < rxMsg.len; i++)
-                printf(" %.2x", rxMsg.data[i]);
-            printf("\r\n");
-            // Filtering performed by software:           
-            if(rxMsg.id == RX_ID) {             // See comments in CAN.cpp for filtering performed by hardware
-                rxMsg >> counter;               // extract first data item
-                rxMsg >> ledState;              // extract second data item
-                printf("  counter = %d\r\n", counter);
-                led = ON;                       // turn LED on
-                timer.start();                  // transmission lag
+            rxMsg.clear();
+            can.read(rxMsg);
+            //printf("ID: \t%d\n\r", rxMsg.id);
+            /*for(int i=0;i<rxMsg.len;i++){
+                printf("\t%x",rxMsg.data[i]);
+                }
+              */
+            data.bytes[0] = rxMsg.data[0];
+            data.bytes[1] = rxMsg.data[1];
+            data.bytes[2] = rxMsg.data[2];
+            data.bytes[3] = rxMsg.data[3];
+            data.bytes[4] = rxMsg.data[4];
+
+            //printf("\r\n");
+            //printf("%f\t%d\r\n", data.f[0], data.bytes[4]);
+            // Filtering performed by software:
+            received[counter]=data.f[0];
+
+            counter++;
+        }
+        if(counter == 12) {
+            printf("=======================\r\n");
+            printf("%d: %f, %d: %f, %d: %f, %d: %f,%d: %f, %d: %f, %d: %f, %d: %f,%d: %f, %d: %f, %d: %f, %d: %f\r\n",1,received[0],2,received[1],
+                    3,received[2],4,received[3],5,received[4],
+                    6,received[5],7,received[6],8,received[7],
+                    9,received[8],10,received[9],11,received[10],12,received[11]);
+            counter = 0;
+        }
+        if(to_send) {
+            to_send = 0;
+            if(can.write(txMsg)) {
+                printf("sent message");
+                
+            } else {
+                
+                printf("transmission error\n\r");
+                //to_send=1;
             }
         }
     }
+
 }
 
 
diff -r eb1a8042605e -r dd8c642ca404 mbed.bld
--- a/mbed.bld	Tue Aug 16 21:13:47 2016 +0000
+++ b/mbed.bld	Sat Oct 22 16:34:56 2016 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/b0220dba8be7
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/2e9cc70d1897
\ No newline at end of file