System Management code

Dependencies:   CANBuffer mbed SystemManagement mbed-rtos

Dependents:   SystemManagement

System Management code for Penn Electric Racing

Functions:

Controls Fans and Pumps via instruction from CAN Messages, ramps them up over time to prevent damage

Turns on/off DC-DC converter via instruction from CAN Messages

Committer:
martydd3
Date:
Fri Oct 10 20:59:36 2014 +0000
Revision:
7:5f6e31faa08e
PollSwitch code;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
martydd3 7:5f6e31faa08e 1 #include "PollSwitch.h"
martydd3 7:5f6e31faa08e 2
martydd3 7:5f6e31faa08e 3 LPC_pin PollPin[12]={p1_0, p1_1, p1_4, p1_8, p1_9, p1_10, p1_14, p1_15, p1_16, p1_17, p1_27, p1_28};
martydd3 7:5f6e31faa08e 4 LPCDigitalOut poll[12]={ LPCDigitalOut(PollPin[0]),
martydd3 7:5f6e31faa08e 5 LPCDigitalOut(PollPin[1]),
martydd3 7:5f6e31faa08e 6 LPCDigitalOut(PollPin[2]),
martydd3 7:5f6e31faa08e 7 LPCDigitalOut(PollPin[3]),
martydd3 7:5f6e31faa08e 8 LPCDigitalOut(PollPin[4]),
martydd3 7:5f6e31faa08e 9 LPCDigitalOut(PollPin[5]),
martydd3 7:5f6e31faa08e 10 LPCDigitalOut(PollPin[6]),
martydd3 7:5f6e31faa08e 11 LPCDigitalOut(PollPin[7]),
martydd3 7:5f6e31faa08e 12 LPCDigitalOut(PollPin[8]),
martydd3 7:5f6e31faa08e 13 LPCDigitalOut(PollPin[9]),
martydd3 7:5f6e31faa08e 14 LPCDigitalOut(PollPin[10]),
martydd3 7:5f6e31faa08e 15 LPCDigitalOut(PollPin[11])};
martydd3 7:5f6e31faa08e 16
martydd3 7:5f6e31faa08e 17 CANBuffer *tx_Poll_Buffer;
martydd3 7:5f6e31faa08e 18
martydd3 7:5f6e31faa08e 19 union int_to_char {
martydd3 7:5f6e31faa08e 20 char ch[2];
martydd3 7:5f6e31faa08e 21 uint16_t i;
martydd3 7:5f6e31faa08e 22 } converter;
martydd3 7:5f6e31faa08e 23
martydd3 7:5f6e31faa08e 24 PollSwitch::PollSwitch(CANBuffer *can){
martydd3 7:5f6e31faa08e 25 tx_Poll_Buffer = can;
martydd3 7:5f6e31faa08e 26 for(int i = 0; i < 12; i++){
martydd3 7:5f6e31faa08e 27 poll[i].mode(PullDown);
martydd3 7:5f6e31faa08e 28 }
martydd3 7:5f6e31faa08e 29 }
martydd3 7:5f6e31faa08e 30
martydd3 7:5f6e31faa08e 31 uint16_t poll_switches(){
martydd3 7:5f6e31faa08e 32 uint16_t a = 0;
martydd3 7:5f6e31faa08e 33 int i = 0;
martydd3 7:5f6e31faa08e 34
martydd3 7:5f6e31faa08e 35 // if a low signal is detected, previous switch is broken
martydd3 7:5f6e31faa08e 36 for(i = 1; i < 12; i++){
martydd3 7:5f6e31faa08e 37 if(!poll[i].read())
martydd3 7:5f6e31faa08e 38 break;
martydd3 7:5f6e31faa08e 39 }
martydd3 7:5f6e31faa08e 40
martydd3 7:5f6e31faa08e 41 // bit on: switch may be broken
martydd3 7:5f6e31faa08e 42 a = 0 & (0xFF >> (i-1));
martydd3 7:5f6e31faa08e 43 return a;
martydd3 7:5f6e31faa08e 44 }
martydd3 7:5f6e31faa08e 45
martydd3 7:5f6e31faa08e 46 void update_poll(const void *arg){
martydd3 7:5f6e31faa08e 47 char data[4] = {0};
martydd3 7:5f6e31faa08e 48 while(1){
martydd3 7:5f6e31faa08e 49 converter.i = poll_switches();
martydd3 7:5f6e31faa08e 50 data[0] = converter.ch[0];
martydd3 7:5f6e31faa08e 51 data[1] = converter.ch[1];
martydd3 7:5f6e31faa08e 52 CANMessage txMessage(TX_POLL_ID, data, 4);
martydd3 7:5f6e31faa08e 53 tx_Poll_Buffer->txWrite(txMessage);
martydd3 7:5f6e31faa08e 54
martydd3 7:5f6e31faa08e 55 Thread::wait(100); //10 Hz update
martydd3 7:5f6e31faa08e 56 }
martydd3 7:5f6e31faa08e 57 }
martydd3 7:5f6e31faa08e 58
martydd3 7:5f6e31faa08e 59 void PollSwitch::start_update(){
martydd3 7:5f6e31faa08e 60 Thread update_thread(update_poll);
martydd3 7:5f6e31faa08e 61 }