System Management code
Dependencies: CANBuffer mbed SystemManagement mbed-rtos
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
PollSwitch/PollSwitch.cpp@7:5f6e31faa08e, 2014-10-10 (annotated)
- Committer:
- martydd3
- Date:
- Fri Oct 10 20:59:36 2014 +0000
- Revision:
- 7:5f6e31faa08e
PollSwitch code;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |