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@28:8c2fa2473b78, 2014-10-24 (annotated)
- Committer:
- pspatel321
- Date:
- Fri Oct 24 22:37:32 2014 +0000
- Revision:
- 28:8c2fa2473b78
- Parent:
- 26:78c0d7facfa7
Re-branch3
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}; |
| pspatel321 | 26:78c0d7facfa7 | 4 | |
| pspatel321 | 28:8c2fa2473b78 | 5 | LPCDigitalOut poll[12]={ LPCDigitalIn(PollPin[0], PullDown), |
| martydd3 | 7:5f6e31faa08e | 6 | LPCDigitalOut(PollPin[1]), |
| martydd3 | 7:5f6e31faa08e | 7 | LPCDigitalOut(PollPin[2]), |
| martydd3 | 7:5f6e31faa08e | 8 | LPCDigitalOut(PollPin[3]), |
| martydd3 | 7:5f6e31faa08e | 9 | LPCDigitalOut(PollPin[4]), |
| martydd3 | 7:5f6e31faa08e | 10 | LPCDigitalOut(PollPin[5]), |
| martydd3 | 7:5f6e31faa08e | 11 | LPCDigitalOut(PollPin[6]), |
| martydd3 | 7:5f6e31faa08e | 12 | LPCDigitalOut(PollPin[7]), |
| martydd3 | 7:5f6e31faa08e | 13 | LPCDigitalOut(PollPin[8]), |
| martydd3 | 7:5f6e31faa08e | 14 | LPCDigitalOut(PollPin[9]), |
| martydd3 | 7:5f6e31faa08e | 15 | LPCDigitalOut(PollPin[10]), |
| martydd3 | 7:5f6e31faa08e | 16 | LPCDigitalOut(PollPin[11])}; |
| martydd3 | 7:5f6e31faa08e | 17 | |
| martydd3 | 7:5f6e31faa08e | 18 | CANBuffer *tx_Poll_Buffer; |
| martydd3 | 7:5f6e31faa08e | 19 | |
| martydd3 | 7:5f6e31faa08e | 20 | union int_to_char { |
| martydd3 | 7:5f6e31faa08e | 21 | char ch[2]; |
| martydd3 | 7:5f6e31faa08e | 22 | uint16_t i; |
| martydd3 | 7:5f6e31faa08e | 23 | } converter; |
| martydd3 | 7:5f6e31faa08e | 24 | |
| martydd3 | 7:5f6e31faa08e | 25 | PollSwitch::PollSwitch(CANBuffer *can){ |
| martydd3 | 7:5f6e31faa08e | 26 | tx_Poll_Buffer = can; |
| martydd3 | 8:ecf68db484af | 27 | |
| martydd3 | 8:ecf68db484af | 28 | /* |
| martydd3 | 7:5f6e31faa08e | 29 | for(int i = 0; i < 12; i++){ |
| martydd3 | 7:5f6e31faa08e | 30 | poll[i].mode(PullDown); |
| martydd3 | 7:5f6e31faa08e | 31 | } |
| martydd3 | 8:ecf68db484af | 32 | */ |
| martydd3 | 7:5f6e31faa08e | 33 | } |
| martydd3 | 7:5f6e31faa08e | 34 | |
| martydd3 | 7:5f6e31faa08e | 35 | uint16_t poll_switches(){ |
| martydd3 | 7:5f6e31faa08e | 36 | uint16_t a = 0; |
| martydd3 | 7:5f6e31faa08e | 37 | int i = 0; |
| martydd3 | 7:5f6e31faa08e | 38 | |
| martydd3 | 7:5f6e31faa08e | 39 | // if a low signal is detected, previous switch is broken |
| martydd3 | 7:5f6e31faa08e | 40 | for(i = 1; i < 12; i++){ |
| martydd3 | 7:5f6e31faa08e | 41 | if(!poll[i].read()) |
| martydd3 | 7:5f6e31faa08e | 42 | break; |
| martydd3 | 7:5f6e31faa08e | 43 | } |
| martydd3 | 7:5f6e31faa08e | 44 | |
| martydd3 | 7:5f6e31faa08e | 45 | // bit on: switch may be broken |
| martydd3 | 7:5f6e31faa08e | 46 | a = 0 & (0xFF >> (i-1)); |
| martydd3 | 7:5f6e31faa08e | 47 | return a; |
| martydd3 | 7:5f6e31faa08e | 48 | } |
| martydd3 | 7:5f6e31faa08e | 49 | |
| martydd3 | 7:5f6e31faa08e | 50 | void update_poll(const void *arg){ |
| martydd3 | 12:e0adb697fcdb | 51 | char data[2] = {0}; |
| martydd3 | 7:5f6e31faa08e | 52 | while(1){ |
| martydd3 | 7:5f6e31faa08e | 53 | converter.i = poll_switches(); |
| martydd3 | 7:5f6e31faa08e | 54 | data[0] = converter.ch[0]; |
| martydd3 | 7:5f6e31faa08e | 55 | data[1] = converter.ch[1]; |
| martydd3 | 12:e0adb697fcdb | 56 | CANMessage txMessage(TX_POLL_ID, data, 2); |
| martydd3 | 7:5f6e31faa08e | 57 | tx_Poll_Buffer->txWrite(txMessage); |
| martydd3 | 7:5f6e31faa08e | 58 | |
| martydd3 | 7:5f6e31faa08e | 59 | Thread::wait(100); //10 Hz update |
| martydd3 | 7:5f6e31faa08e | 60 | } |
| martydd3 | 7:5f6e31faa08e | 61 | } |
| martydd3 | 7:5f6e31faa08e | 62 | |
| martydd3 | 7:5f6e31faa08e | 63 | void PollSwitch::start_update(){ |
| martydd3 | 7:5f6e31faa08e | 64 | Thread update_thread(update_poll); |
| martydd3 | 7:5f6e31faa08e | 65 | } |
