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:35:07 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 13ac27349025 CANnucleo_Hello.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANnucleo_Hello.lib	Sat Oct 22 16:35:07 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/hudakz/code/CANnucleo_Hello/#eb1a8042605e
diff -r eb1a8042605e -r 13ac27349025 main.cpp
--- a/main.cpp	Tue Aug 16 21:13:47 2016 +0000
+++ b/main.cpp	Sat Oct 22 16:35:07 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,77 +38,113 @@
 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() {
+
+bool key_switch = 0;
+
+void flip()
+{
+    key_switch = !key_switch;
+    led = key_switch;
+
+    to_send=1;
+    //printf("controller switch\r\n");
+
+
+
+    // to_send = 1;
+}
+
+Ticker flipper;
+
+typedef union can_union {
+    int i[2];
+    char bytes[8];
+    float f[2];
+} data;
+
+int main()
+
+{
     can.frequency(1000000);                     // set bit rate to 1Mbps
     can.attach(&onMsgReceived);                 // attach 'CAN receive-complete' interrupt handler
-    
-#if defined(BOARD1)
-    led = ON;       // turn LED on
+    flipper.attach(&flip, 30);                 // turn on or off
+    led=key_switch;
     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
+
+    printf("started\r\n");
+    while(true) {
+
+        if(msgAvailable) {
+            static int counter = 0;
+            data data;
+            int len = can.read(rxMsg);
+            data.bytes[0] = rxMsg.data[0];
+            data.bytes[1] = rxMsg.data[1];
+            data.bytes[2] = rxMsg.data[2];
+            data.bytes[3] = rxMsg.data[3];
+            msgAvailable = false;               // reset flag for next use
+            printf(" Id: %d, data: %f, counter : %d\n", rxMsg.id, data.f[0],rxMsg.data[4]);
 
-    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");
+            /*
+            printf("\r\nreceived message ID: \t%d\n\r", rxMsg.id);
+            for(int i=0; i<len; i++) {
+                printf("\t%x",rxMsg.data[i]);
+            }*/
+            printf("\r\n");
+            counter++;
+            if(counter == 12) {
+
+                counter = 0;
+                printf("\r\n""""""""""""""""""""""""""""""""""""""""""""""""\r\n");
+            }
+            // Filtering performed by software:
         }
-        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
+        if(to_send) {
+            to_send = 0;
+            txMsg.clear();
+            txMsg.id = 10;
+            txMsg << key_switch;
+            if(can.write(txMsg)) {
+                printf("sent message\r\n");
+            } else {
+                static char count = 0;
+                count++;
+                printf("transmission error\n\r overflow: %x\n\r", count);
+                if(count == 3) {
+                    count = 0;
+                    NVIC_SystemReset();
+                    // attach 'CAN receive-complete' interrupt handler
+
+                }
+
             }
         }
     }
diff -r eb1a8042605e -r 13ac27349025 mbed.bld
--- a/mbed.bld	Tue Aug 16 21:13:47 2016 +0000
+++ b/mbed.bld	Sat Oct 22 16:35:07 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