pub
Dependencies: CANnucleo mbed-dev
Fork of CANnucleo_Hello by
Diff: main.cpp
- Revision:
- 26:1d0488a03905
- Parent:
- 25:e2907bcba75e
- Child:
- 27:f71400b1fa56
diff -r e2907bcba75e -r 1d0488a03905 main.cpp --- a/main.cpp Tue Mar 07 21:28:19 2017 +0000 +++ b/main.cpp Wed Mar 08 19:19:22 2017 +0000 @@ -20,7 +20,7 @@ */ #define BOARD1 1 // comment out this line when compiling for board #2 -#define TARGET_STM32F103C8T6 1 // uncomment this line when using STM32F103C8T6 boards! +//#define TARGET_STM32F103C8T6 1 // uncomment this line when using STM32F103C8T6 boards! #if defined(TARGET_STM32F103C8T6) #include "stm32f103c8t6.h" @@ -53,9 +53,10 @@ CANnucleo::CANMessage rxMsg; CANnucleo::CANMessage txMsg; DigitalOut led(LED_PIN); -int ledState; Timer timer; -int counter = 0; +uint8_t counter = 0; +AnalogIn analogIn(A0); +float voltage; volatile bool msgAvailable = false; Serial* pc; @@ -71,6 +72,23 @@ } /** + * @brief Prints CAN msg to PC's serial terminal + * @note} + * @param CANMessage to print + * @retval none + */ +void printMsg(CANnucleo::CANMessage& msg) { + pc->printf(" ID = 0x%.3x\r\n", msg.id); + pc->printf(" Type = %d\r\n", msg.type); + pc->printf(" Format = %d\r\n", msg.format); + pc->printf(" Length = %d\r\n", msg.len); + pc->printf(" Data ="); + for(int i = 0; i < msg.len; i++) + pc->printf(" %.2x", msg.data[i]); + pc->printf("\r\n"); + } + +/** * @brief Main * @note * @param @@ -99,24 +117,18 @@ 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 << ledState; // append data (total data length must be <= 8 bytes!) + voltage = (analogIn * 5)/4096.0f; // small floating voltage at analog input + txMsg << counter << voltage; // append data (total data length must be <= 8 bytes!) led = OFF; // turn LED off if(can->write(txMsg)) { // transmit message pc->printf("-----------------------------------\r\n"); - pc->printf("CAN message sent\r\n"); - pc->printf(" ID = 0x%.3x\r\n", txMsg.id); - pc->printf(" Type = %d\r\n", txMsg.type); - pc->printf(" Format = %d\r\n", txMsg.format); - pc->printf(" Length = %d\r\n", txMsg.len); - pc->printf(" Data ="); - for(int i = 0; i < txMsg.len; i++) - pc->printf(" %.2x", txMsg.data[i]); - pc->printf("\r\n"); + pc->printf("CAN message sent\r\n"); + printMsg(txMsg); pc->printf(" counter = %d\r\n", counter); - } + pc->printf(" voltage = %e V\r\n", voltage); + } else pc->printf("Transmission error\r\n"); } @@ -124,18 +136,12 @@ msgAvailable = false; // reset flag for next use can->read(rxMsg); // read message into Rx message storage pc->printf("CAN message received\r\n"); - pc->printf(" ID = 0x%.3x\r\n", rxMsg.id); - pc->printf(" Type = %d\r\n", rxMsg.type); - pc->printf(" Format = %d\r\n", rxMsg.format); - pc->printf(" Length = %d\r\n", rxMsg.len); - pc->printf(" Data ="); - for(int i = 0; i < rxMsg.len; i++) - pc->printf(" %.2x", rxMsg.data[i]); - pc->printf("\r\n"); + printMsg(rxMsg); // Filtering performed by software: if(rxMsg.id == RX_ID) { // About filtering performed by hardware see comments in CANnucleo.cpp - rxMsg >> counter >> ledState; // extract data + rxMsg >> counter >> voltage; // extract data pc->printf(" counter = %d\r\n", counter); + pc->printf(" voltage = %e V\r\n", voltage); led = ON; // turn LED on timer.start(); // transmission lag }