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: mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP
Fork of SystemManagement by
PollSwitch/PollSwitch.cpp@8:ecf68db484af, 2014-10-10 (annotated)
- Committer:
- martydd3
- Date:
- Fri Oct 10 21:46:52 2014 +0000
- Revision:
- 8:ecf68db484af
- Parent:
- 7:5f6e31faa08e
- Child:
- 12:e0adb697fcdb
Added IMD monitoring code based on Kiran's calculations
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 | 8:ecf68db484af | 26 | |
| martydd3 | 8:ecf68db484af | 27 | /* |
| martydd3 | 7:5f6e31faa08e | 28 | for(int i = 0; i < 12; i++){ |
| martydd3 | 7:5f6e31faa08e | 29 | poll[i].mode(PullDown); |
| martydd3 | 7:5f6e31faa08e | 30 | } |
| martydd3 | 8:ecf68db484af | 31 | */ |
| martydd3 | 7:5f6e31faa08e | 32 | } |
| martydd3 | 7:5f6e31faa08e | 33 | |
| martydd3 | 7:5f6e31faa08e | 34 | uint16_t poll_switches(){ |
| martydd3 | 7:5f6e31faa08e | 35 | uint16_t a = 0; |
| martydd3 | 7:5f6e31faa08e | 36 | int i = 0; |
| martydd3 | 7:5f6e31faa08e | 37 | |
| martydd3 | 7:5f6e31faa08e | 38 | // if a low signal is detected, previous switch is broken |
| martydd3 | 7:5f6e31faa08e | 39 | for(i = 1; i < 12; i++){ |
| martydd3 | 7:5f6e31faa08e | 40 | if(!poll[i].read()) |
| martydd3 | 7:5f6e31faa08e | 41 | break; |
| martydd3 | 7:5f6e31faa08e | 42 | } |
| martydd3 | 7:5f6e31faa08e | 43 | |
| martydd3 | 7:5f6e31faa08e | 44 | // bit on: switch may be broken |
| martydd3 | 7:5f6e31faa08e | 45 | a = 0 & (0xFF >> (i-1)); |
| martydd3 | 7:5f6e31faa08e | 46 | return a; |
| martydd3 | 7:5f6e31faa08e | 47 | } |
| martydd3 | 7:5f6e31faa08e | 48 | |
| martydd3 | 7:5f6e31faa08e | 49 | void update_poll(const void *arg){ |
| martydd3 | 7:5f6e31faa08e | 50 | char data[4] = {0}; |
| martydd3 | 7:5f6e31faa08e | 51 | while(1){ |
| martydd3 | 7:5f6e31faa08e | 52 | converter.i = poll_switches(); |
| martydd3 | 7:5f6e31faa08e | 53 | data[0] = converter.ch[0]; |
| martydd3 | 7:5f6e31faa08e | 54 | data[1] = converter.ch[1]; |
| martydd3 | 7:5f6e31faa08e | 55 | CANMessage txMessage(TX_POLL_ID, data, 4); |
| martydd3 | 7:5f6e31faa08e | 56 | tx_Poll_Buffer->txWrite(txMessage); |
| martydd3 | 7:5f6e31faa08e | 57 | |
| martydd3 | 7:5f6e31faa08e | 58 | Thread::wait(100); //10 Hz update |
| martydd3 | 7:5f6e31faa08e | 59 | } |
| martydd3 | 7:5f6e31faa08e | 60 | } |
| martydd3 | 7:5f6e31faa08e | 61 | |
| martydd3 | 7:5f6e31faa08e | 62 | void PollSwitch::start_update(){ |
| martydd3 | 7:5f6e31faa08e | 63 | Thread update_thread(update_poll); |
| martydd3 | 7:5f6e31faa08e | 64 | } |
