comit to publish

Dependencies:   CANnucleo CANnucleo_Hello mbed

Fork of CANnucleo_Hello by Zoltan Hudak

Files at this revision

API Documentation at this revision

Comitter:
ser1516
Date:
Mon Nov 28 23:15:14 2016 +0000
Parent:
20:eb1a8042605e
Commit message:
comit to publish

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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CANnucleo_Hello.lib	Mon Nov 28 23:15:14 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/hudakz/code/CANnucleo_Hello/#eb1a8042605e
--- a/main.cpp	Tue Aug 16 21:13:47 2016 +0000
+++ b/main.cpp	Mon Nov 28 23:15:14 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,28 @@
  *
  * 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
+#define start_charge_msg "\x22\x80\x24\x01"
+#define stop_charge_msg "\x22\x80\x24\x02"
+#define charger_startup_msg "\x0\xB\x0\x0\x0\x0\x0\xB"    // charger writes this during startup
+#define change_charger_can_bitrate_1Mbs "\x22\xDA\x20\x01\x04"
 
-#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 +42,136 @@
 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);
+DigitalOut              controller_key_switch(PA_6); // SS_Rel
+
 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
-    
-#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
+bool to_charge = 0;
+bool charge = 0;
+void led_error()
+{
+
+    led = !led;
+    wait(0.1);
+    led=!led;
+    wait(0.1);
+    led = !led;
+    wait(0.1);
+    led = !led;
+    wait(0.1);
+    led = !led;
+
+}
+int build_message(unsigned char * badjoras, const char * command)
+{
+    char *src;
+    strcpy(src,command);
+    strncpy((char *) badjoras,src,sizeof(command)-1);
+    return (sizeof(command)-1);
+}
 
-    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");
-        }
+void flip()
+{
+    to_send=1;                // append first data item
+    to_charge=1;
+    //controller_key_switch = !controller_key_switch;
+    led = !led;
+    charge = !charge;
+}
+
+bool controller = 0;//flag for turning on controller_key_switch
+Ticker flipper;
+void change_can_bitrate(){
+    to_send= 1;
+}
+InterruptIn button(PC_13);
+
+int main()
+
+{
+    can.frequency(125000);                     // set bit rate to 1Mbps
+    can.attach(&onMsgReceived);                 // attach 'CAN receive-complete' interrupt handler
+    flipper.attach(&change_can_bitrate, 5);           //heartbeat
+    button.rise(&flip);
+    led=0;
+    printf("badjoras\n");
+
+    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
+            int len = can.read(rxMsg);
+            printf("Id: %x ", rxMsg.id);
+            for(int i = 0; i<len; i++) {
+                printf("%x,", rxMsg.data[i]);
+            }
+            printf("\n\r");
+            /*
+            rxMsg >> controller;
+                            led = controller;
+                            controller_key_switch = controller;*/
+            if(rxMsg.id == 0x28B) {
+                if (memcmp(rxMsg.data,charger_startup_msg,8)==0) {
+                    printf(" this is the message\n\r");
+                    txMsg.clear();                      // clear Tx message storage
+                    txMsg.id = 0x60B;
+                    build_message(txMsg.data,stop_charge_msg);
+                    txMsg.len = 4;
+                    to_send = 1;
+                }
+            }
+        }
+        if(to_send) {
+            to_send = 0;
+            if(to_charge) {
+                to_charge = 0;
+                if(charge) {
+                    txMsg.clear();                      // clear Tx message storage
+                    txMsg.id = 0x60B;
+                    build_message(txMsg.data,start_charge_msg);
+                    txMsg.len = 4;
+                } else {
+                    txMsg.clear();                      // clear Tx message storage
+                    txMsg.id = 0x60B;
+                    build_message(txMsg.data,stop_charge_msg);
+                    txMsg.len = 4;
+                }
+
+            } else {
+                txMsg.clear();
+                txMsg.id = 0x60B;
+                build_message(txMsg.data, change_charger_can_bitrate_1Mbs);
+                txMsg.len = 8;
+            }
+            if(!can.write(txMsg)) {
+                led_error();
+            } else {
+                printf("sent message: ID: %x DATA: %x %x %x %x %x %x %x %x\n\r",txMsg.id,txMsg.data[0],txMsg.data[1],txMsg.data[2],txMsg.data[3],txMsg.data[4],txMsg.data[5],txMsg.data[6],txMsg.data[7]);
             }
         }
     }
--- a/mbed.bld	Tue Aug 16 21:13:47 2016 +0000
+++ b/mbed.bld	Mon Nov 28 23:15:14 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