Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SoftPWM MotorSMLAP
Fork of CANnucleo_Hello by
Diff: main.cpp
- Revision:
- 25:1d0488a03905
- Parent:
- 24:e2907bcba75e
- Child:
- 26:f71400b1fa56
--- 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
}
