System Management code
Dependencies: CANBuffer mbed SystemManagement mbed-rtos
PollSwitch.cpp
00001 #include "PollSwitch.h" 00002 00003 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}; 00004 LPCDigitalOut poll[12]={ LPCDigitalOut(PollPin[0]), 00005 LPCDigitalOut(PollPin[1]), 00006 LPCDigitalOut(PollPin[2]), 00007 LPCDigitalOut(PollPin[3]), 00008 LPCDigitalOut(PollPin[4]), 00009 LPCDigitalOut(PollPin[5]), 00010 LPCDigitalOut(PollPin[6]), 00011 LPCDigitalOut(PollPin[7]), 00012 LPCDigitalOut(PollPin[8]), 00013 LPCDigitalOut(PollPin[9]), 00014 LPCDigitalOut(PollPin[10]), 00015 LPCDigitalOut(PollPin[11])}; 00016 00017 CANBuffer *tx_Poll_Buffer; 00018 00019 union int_to_char { 00020 char ch[2]; 00021 uint16_t i; 00022 } converter; 00023 00024 PollSwitch::PollSwitch(CANBuffer *can){ 00025 tx_Poll_Buffer = can; 00026 for(int i = 0; i < 12; i++){ 00027 poll[i].mode(PullDown); 00028 } 00029 } 00030 00031 uint16_t poll_switches(){ 00032 uint16_t a = 0; 00033 int i = 0; 00034 00035 // if a low signal is detected, previous switch is broken 00036 for(i = 1; i < 12; i++){ 00037 if(!poll[i].read()) 00038 break; 00039 } 00040 00041 // bit on: switch may be broken 00042 a = 0 & (0xFF >> (i-1)); 00043 return a; 00044 } 00045 00046 void update_poll(const void *arg){ 00047 char data[4] = {0}; 00048 while(1){ 00049 converter.i = poll_switches(); 00050 data[0] = converter.ch[0]; 00051 data[1] = converter.ch[1]; 00052 CANMessage txMessage(TX_POLL_ID, data, 4); 00053 tx_Poll_Buffer->txWrite(txMessage); 00054 00055 Thread::wait(100); //10 Hz update 00056 } 00057 } 00058 00059 void PollSwitch::start_update(){ 00060 Thread update_thread(update_poll); 00061 }
Generated on Sat Aug 13 2022 03:42:38 by 1.7.2