Touch screen drivers control dashboard for miniature locomotive. Features meters for speed, volts, power. Switches for lights, horns. Drives multiple STM3_ESC brushless motor controllers for complete brushless loco system as used in "The Brute" - www.jons-workshop.com

Dependencies:   TS_DISCO_F746NG mbed Servo LCD_DISCO_F746NG BSP_DISCO_F746NG QSPI_DISCO_F746NG AsyncSerial FastPWM

Committer:
JonFreeman
Date:
Mon Jan 14 16:39:41 2019 +0000
Revision:
12:a25bdf135348
Child:
14:6bcec5ac21ca
Tidied, better documented, more OOP, interim release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JonFreeman 12:a25bdf135348 1 #include "mbed.h"
JonFreeman 12:a25bdf135348 2 #include "Electric_Loco.h"
JonFreeman 12:a25bdf135348 3 /*class error_handling_Jan_2019
JonFreeman 12:a25bdf135348 4 {
JonFreeman 12:a25bdf135348 5 int32_t TS_fault[NUMOF_REPORTABLE_TS_ERRORS] ; // Some number of reportable error codes, accessible through set and read members
JonFreeman 12:a25bdf135348 6 public:
JonFreeman 12:a25bdf135348 7 error_handling_Jan_2019 () { // default constructor
JonFreeman 12:a25bdf135348 8 for (int i = 0; i < (sizeof(TS_fault) / sizeof(int32_t)); i++)
JonFreeman 12:a25bdf135348 9 TS_fault[i] = 0;
JonFreeman 12:a25bdf135348 10 }
JonFreeman 12:a25bdf135348 11 void set (uint32_t, int32_t) ;
JonFreeman 12:a25bdf135348 12 uint32_t read (uint32_t) ;
JonFreeman 12:a25bdf135348 13 bool all_good () ;
JonFreeman 12:a25bdf135348 14 void report_any () ;
JonFreeman 12:a25bdf135348 15 } ;
JonFreeman 12:a25bdf135348 16 */
JonFreeman 12:a25bdf135348 17
JonFreeman 12:a25bdf135348 18 const char * FaultList[] = {
JonFreeman 12:a25bdf135348 19 /*
JonFreeman 12:a25bdf135348 20 FAULT_0,
JonFreeman 12:a25bdf135348 21 FAULT_BOARD_ID_IN_MSG,
JonFreeman 12:a25bdf135348 22 FAULT_TS,
JonFreeman 12:a25bdf135348 23 FAULT_PC,
JonFreeman 12:a25bdf135348 24 FAULT_COM,
JonFreeman 12:a25bdf135348 25 FAULT_COM_NO_MATCH,
JonFreeman 12:a25bdf135348 26 FAULT_COM_LINE_LEN,
JonFreeman 12:a25bdf135348 27 FAULT_QSPI,
JonFreeman 12:a25bdf135348 28 FAULT_ODOMETER,
JonFreeman 12:a25bdf135348 29 FAULT_MAX,
JonFreeman 12:a25bdf135348 30 NUMOF_REPORTABLE_TS_ERRORS
JonFreeman 12:a25bdf135348 31 */
JonFreeman 12:a25bdf135348 32 "Zero",
JonFreeman 12:a25bdf135348 33 "BoardID in msg",
JonFreeman 12:a25bdf135348 34 "TouchScreen",
JonFreeman 12:a25bdf135348 35 "pc",
JonFreeman 12:a25bdf135348 36 "com no match",
JonFreeman 12:a25bdf135348 37 "com line len",
JonFreeman 12:a25bdf135348 38 "qspi",
JonFreeman 12:a25bdf135348 39 "odometer",
JonFreeman 12:a25bdf135348 40 "max",
JonFreeman 12:a25bdf135348 41 "endoflist",
JonFreeman 12:a25bdf135348 42 " ",
JonFreeman 12:a25bdf135348 43 } ;
JonFreeman 12:a25bdf135348 44
JonFreeman 12:a25bdf135348 45 bool error_handling_Jan_2019::all_good () {
JonFreeman 12:a25bdf135348 46 for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++)
JonFreeman 12:a25bdf135348 47 if (TS_fault[i])
JonFreeman 12:a25bdf135348 48 return false;
JonFreeman 12:a25bdf135348 49 return true;
JonFreeman 12:a25bdf135348 50 }
JonFreeman 12:a25bdf135348 51
JonFreeman 12:a25bdf135348 52 /**void error_handling_Jan_2019::set (uint32_t err_no, int32_t bits_to_set) {
JonFreeman 12:a25bdf135348 53 Used to set bits in error int
JonFreeman 12:a25bdf135348 54 Uses OR to set new bits without clearing other bits set previously
JonFreeman 12:a25bdf135348 55 */
JonFreeman 12:a25bdf135348 56 void error_handling_Jan_2019::set (uint32_t err_no, int32_t bits_to_set) {
JonFreeman 12:a25bdf135348 57 TS_fault[err_no] |= bits_to_set; // Uses OR to set new bits without clearing other bits set previously
JonFreeman 12:a25bdf135348 58 }
JonFreeman 12:a25bdf135348 59
JonFreeman 12:a25bdf135348 60 /**void error_handling_Jan_2019::clr (uint32_t err_no) {
JonFreeman 12:a25bdf135348 61 Used to clear all bits in error int
JonFreeman 12:a25bdf135348 62 */
JonFreeman 12:a25bdf135348 63 void error_handling_Jan_2019::clr (uint32_t err_no) {
JonFreeman 12:a25bdf135348 64 TS_fault[err_no] = 0;
JonFreeman 12:a25bdf135348 65 }
JonFreeman 12:a25bdf135348 66
JonFreeman 12:a25bdf135348 67 uint32_t error_handling_Jan_2019::read (uint32_t err_no) {
JonFreeman 12:a25bdf135348 68 return TS_fault[err_no];
JonFreeman 12:a25bdf135348 69 }
JonFreeman 12:a25bdf135348 70
JonFreeman 12:a25bdf135348 71 extern Serial pc;
JonFreeman 12:a25bdf135348 72 void error_handling_Jan_2019::report_any () {
JonFreeman 12:a25bdf135348 73 for (int i = 0; i < NUMOF_REPORTABLE_TS_ERRORS; i++) {
JonFreeman 12:a25bdf135348 74 if (TS_fault[i])
JonFreeman 12:a25bdf135348 75 pc.printf ("Error report, number %d, value %d, %s\r\n", i, TS_fault[i], FaultList[i]);
JonFreeman 12:a25bdf135348 76 }
JonFreeman 12:a25bdf135348 77 }
JonFreeman 12:a25bdf135348 78