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.
main.cpp@2:691ccdef6f1e, 2013-05-26 (annotated)
- Committer:
- MRSa
- Date:
- Sun May 26 13:39:31 2013 +0000
- Revision:
- 2:691ccdef6f1e
- Parent:
- 1:05e9a83b721c
- Child:
- 3:ce23e131fdbd
add led control.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MRSa | 0:516a9e85a3fb | 1 | #include "mbed.h" |
| MRSa | 0:516a9e85a3fb | 2 | #include "bc_ant.h" |
| MRSa | 0:516a9e85a3fb | 3 | |
| MRSa | 0:516a9e85a3fb | 4 | /** USBTX - Tranmit on USB USBRX - receive on USB **/ |
| MRSa | 0:516a9e85a3fb | 5 | Serial pc(USBTX, USBRX); |
| MRSa | 0:516a9e85a3fb | 6 | |
| MRSa | 0:516a9e85a3fb | 7 | /** LPC1768 LEDs **/ |
| MRSa | 0:516a9e85a3fb | 8 | BusOut myLeds(LED1, LED2, LED3, LED4); |
| MRSa | 0:516a9e85a3fb | 9 | |
| MRSa | 0:516a9e85a3fb | 10 | /** for BC-ANT-SERIAL (LPC1768) **/ |
| MRSa | 0:516a9e85a3fb | 11 | bc_ant antPort(p13, p14, p15, 9600); |
| MRSa | 0:516a9e85a3fb | 12 | |
| MRSa | 0:516a9e85a3fb | 13 | /** DIP-SW (for NODE SHARED ADDRESS) **/ |
| MRSa | 0:516a9e85a3fb | 14 | DigitalIn dip1(p20); // DIP-SW1 |
| MRSa | 0:516a9e85a3fb | 15 | DigitalIn dip2(p19); // DIP-SW2 |
| MRSa | 0:516a9e85a3fb | 16 | |
| MRSa | 0:516a9e85a3fb | 17 | /** OUTPUT DEVICES **/ |
| MRSa | 0:516a9e85a3fb | 18 | DigitalOut led0(p21); |
| MRSa | 1:05e9a83b721c | 19 | DigitalOut led1(p22); |
| MRSa | 0:516a9e85a3fb | 20 | |
| MRSa | 0:516a9e85a3fb | 21 | /** ANT DEFINES **/ |
| MRSa | 0:516a9e85a3fb | 22 | #define MAX_BUFSIZE 64 |
| MRSa | 0:516a9e85a3fb | 23 | #define ANT_CH 0 |
| MRSa | 0:516a9e85a3fb | 24 | #define DEVICE_NUMBER 65 |
| MRSa | 0:516a9e85a3fb | 25 | #define ANT_NETWORK_NUMBER 0 // Network Number |
| MRSa | 0:516a9e85a3fb | 26 | #define TRANS_TYPE_WILDCARD 0 // Wild Card |
| MRSa | 0:516a9e85a3fb | 27 | #define TRANS_TYPE_INDEPENDENT 1 // Independent Channel |
| MRSa | 0:516a9e85a3fb | 28 | #define TRANS_TYPE_SHARED_2BYTES 3 // Shared Channel using 2byte address |
| MRSa | 0:516a9e85a3fb | 29 | #define DEVICE_TYPE_WILDCARD 0 |
| MRSa | 0:516a9e85a3fb | 30 | #define DEVICE_TYPE_ID 3 // Device Type ID |
| MRSa | 0:516a9e85a3fb | 31 | |
| MRSa | 0:516a9e85a3fb | 32 | /** DIP-SWITCH ASSIGN **/ |
| MRSa | 0:516a9e85a3fb | 33 | #define ID_1 0x00001 // 1:off, 2:off |
| MRSa | 0:516a9e85a3fb | 34 | #define ID_2 0x00002 // 1:on, 2:off |
| MRSa | 0:516a9e85a3fb | 35 | #define ID_3 0x00004 // 1:off, 2:on |
| MRSa | 0:516a9e85a3fb | 36 | #define ID_4 0x00008 // 1:on, 2:on |
| MRSa | 0:516a9e85a3fb | 37 | |
| MRSa | 0:516a9e85a3fb | 38 | |
| MRSa | 0:516a9e85a3fb | 39 | /** |
| MRSa | 0:516a9e85a3fb | 40 | * CHECK DIP-SW STATUS |
| MRSa | 0:516a9e85a3fb | 41 | */ |
| MRSa | 0:516a9e85a3fb | 42 | int check_DipSw() |
| MRSa | 0:516a9e85a3fb | 43 | { |
| MRSa | 0:516a9e85a3fb | 44 | if (dip1 == 0) |
| MRSa | 0:516a9e85a3fb | 45 | { |
| MRSa | 0:516a9e85a3fb | 46 | return ((dip2 == 0) ? 4 : 2); |
| MRSa | 0:516a9e85a3fb | 47 | } |
| MRSa | 0:516a9e85a3fb | 48 | return ((dip2 == 0) ? 3 : 1); |
| MRSa | 0:516a9e85a3fb | 49 | } |
| MRSa | 0:516a9e85a3fb | 50 | |
| MRSa | 0:516a9e85a3fb | 51 | /** |
| MRSa | 0:516a9e85a3fb | 52 | * GET LED LAMP ID |
| MRSa | 0:516a9e85a3fb | 53 | */ |
| MRSa | 0:516a9e85a3fb | 54 | int getLampId(int id) |
| MRSa | 0:516a9e85a3fb | 55 | { |
| MRSa | 0:516a9e85a3fb | 56 | int lampId = ID_1; |
| MRSa | 0:516a9e85a3fb | 57 | switch (id) |
| MRSa | 0:516a9e85a3fb | 58 | { |
| MRSa | 0:516a9e85a3fb | 59 | case 4: |
| MRSa | 0:516a9e85a3fb | 60 | lampId = ID_4; |
| MRSa | 0:516a9e85a3fb | 61 | break; |
| MRSa | 0:516a9e85a3fb | 62 | case 3: |
| MRSa | 0:516a9e85a3fb | 63 | lampId = ID_3; |
| MRSa | 0:516a9e85a3fb | 64 | break; |
| MRSa | 0:516a9e85a3fb | 65 | case 2: |
| MRSa | 0:516a9e85a3fb | 66 | lampId = ID_2; |
| MRSa | 0:516a9e85a3fb | 67 | break; |
| MRSa | 0:516a9e85a3fb | 68 | case 1: |
| MRSa | 0:516a9e85a3fb | 69 | default: |
| MRSa | 0:516a9e85a3fb | 70 | lampId = ID_1; |
| MRSa | 0:516a9e85a3fb | 71 | break; |
| MRSa | 0:516a9e85a3fb | 72 | } |
| MRSa | 0:516a9e85a3fb | 73 | return (lampId); |
| MRSa | 0:516a9e85a3fb | 74 | } |
| MRSa | 0:516a9e85a3fb | 75 | |
| MRSa | 0:516a9e85a3fb | 76 | /** |
| MRSa | 2:691ccdef6f1e | 77 | * |
| MRSa | 2:691ccdef6f1e | 78 | */ |
| MRSa | 2:691ccdef6f1e | 79 | void executeAction(uint8_t commandType, uint8_t channel, uint8_t command) |
| MRSa | 2:691ccdef6f1e | 80 | { |
| MRSa | 2:691ccdef6f1e | 81 | if (commandType != 0x4e) |
| MRSa | 2:691ccdef6f1e | 82 | { |
| MRSa | 2:691ccdef6f1e | 83 | // do nothing! |
| MRSa | 2:691ccdef6f1e | 84 | return; |
| MRSa | 2:691ccdef6f1e | 85 | } |
| MRSa | 2:691ccdef6f1e | 86 | // execute! |
| MRSa | 2:691ccdef6f1e | 87 | if ((command & 0x40) != 0) |
| MRSa | 2:691ccdef6f1e | 88 | { |
| MRSa | 2:691ccdef6f1e | 89 | led0 = 1; |
| MRSa | 2:691ccdef6f1e | 90 | } |
| MRSa | 2:691ccdef6f1e | 91 | else |
| MRSa | 2:691ccdef6f1e | 92 | { |
| MRSa | 2:691ccdef6f1e | 93 | led0 = 0; |
| MRSa | 2:691ccdef6f1e | 94 | } |
| MRSa | 2:691ccdef6f1e | 95 | if ((command & 0x08) != 0) |
| MRSa | 2:691ccdef6f1e | 96 | { |
| MRSa | 2:691ccdef6f1e | 97 | led1 = 1; |
| MRSa | 2:691ccdef6f1e | 98 | } |
| MRSa | 2:691ccdef6f1e | 99 | else |
| MRSa | 2:691ccdef6f1e | 100 | { |
| MRSa | 2:691ccdef6f1e | 101 | led1 = 0; |
| MRSa | 2:691ccdef6f1e | 102 | } |
| MRSa | 2:691ccdef6f1e | 103 | |
| MRSa | 2:691ccdef6f1e | 104 | } |
| MRSa | 2:691ccdef6f1e | 105 | |
| MRSa | 2:691ccdef6f1e | 106 | /** |
| MRSa | 0:516a9e85a3fb | 107 | * Recieved a message from ANT port. |
| MRSa | 0:516a9e85a3fb | 108 | */ |
| MRSa | 0:516a9e85a3fb | 109 | void receivedFromAnt() |
| MRSa | 0:516a9e85a3fb | 110 | { |
| MRSa | 0:516a9e85a3fb | 111 | uint8_t receivedLength = 0; |
| MRSa | 0:516a9e85a3fb | 112 | uint8_t receivedBuffer[MAX_BUFSIZE]; |
| MRSa | 0:516a9e85a3fb | 113 | receivedLength = antPort.BC_ANT_RecvPacket(receivedBuffer, MAX_BUFSIZE); |
| MRSa | 0:516a9e85a3fb | 114 | |
| MRSa | 2:691ccdef6f1e | 115 | executeAction(receivedBuffer[2], receivedBuffer[4], receivedBuffer[6]); |
| MRSa | 2:691ccdef6f1e | 116 | |
| MRSa | 0:516a9e85a3fb | 117 | printf("RX(%3d):", receivedLength); |
| MRSa | 0:516a9e85a3fb | 118 | for (int index = 0; index < receivedLength; index++) |
| MRSa | 0:516a9e85a3fb | 119 | { |
| MRSa | 0:516a9e85a3fb | 120 | printf("%02x ", receivedBuffer[index]); |
| MRSa | 0:516a9e85a3fb | 121 | } |
| MRSa | 0:516a9e85a3fb | 122 | printf("\r\n"); |
| MRSa | 0:516a9e85a3fb | 123 | } |
| MRSa | 0:516a9e85a3fb | 124 | |
| MRSa | 0:516a9e85a3fb | 125 | /** |
| MRSa | 0:516a9e85a3fb | 126 | * Moving command received from HOST |
| MRSa | 0:516a9e85a3fb | 127 | */ |
| MRSa | 0:516a9e85a3fb | 128 | void sendToAnt(uint8_t *buffer) |
| MRSa | 0:516a9e85a3fb | 129 | { |
| MRSa | 0:516a9e85a3fb | 130 | antPort.ANT_SendAcknowledgedData(ANT_CH, buffer); |
| MRSa | 0:516a9e85a3fb | 131 | } |
| MRSa | 0:516a9e85a3fb | 132 | |
| MRSa | 0:516a9e85a3fb | 133 | /** |
| MRSa | 0:516a9e85a3fb | 134 | * initializes ANT port |
| MRSa | 0:516a9e85a3fb | 135 | */ |
| MRSa | 0:516a9e85a3fb | 136 | int initialize_ANTport(bool isReceive) |
| MRSa | 0:516a9e85a3fb | 137 | { |
| MRSa | 0:516a9e85a3fb | 138 | antPort.ANT_ResetSystem(); |
| MRSa | 0:516a9e85a3fb | 139 | antPort.ANT_AssignChannel(ANT_CH, ANT_Shared_Bidirectional_Slave, ANT_NETWORK_NUMBER); |
| MRSa | 0:516a9e85a3fb | 140 | antPort.ANT_SetChannelId(ANT_CH, DEVICE_NUMBER, DEVICE_TYPE_ID, TRANS_TYPE_SHARED_2BYTES); |
| MRSa | 0:516a9e85a3fb | 141 | antPort.ANT_SetChannelPeriod_Hz(ANT_CH, 16); // 16Hz : 32768/16 = 2048 |
| MRSa | 0:516a9e85a3fb | 142 | antPort.ANT_SetChannelRFFreq(ANT_CH, 4); // 2404 MHz |
| MRSa | 0:516a9e85a3fb | 143 | antPort.ANT_OpenChannel(ANT_CH); // |
| MRSa | 0:516a9e85a3fb | 144 | antPort.attach(&receivedFromAnt); // callback function |
| MRSa | 0:516a9e85a3fb | 145 | |
| MRSa | 0:516a9e85a3fb | 146 | // set device's shared address |
| MRSa | 0:516a9e85a3fb | 147 | uint8_t buffer[MAX_BUFSIZE] = |
| MRSa | 0:516a9e85a3fb | 148 | { |
| MRSa | 0:516a9e85a3fb | 149 | 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff |
| MRSa | 0:516a9e85a3fb | 150 | }; |
| MRSa | 0:516a9e85a3fb | 151 | buffer[0] = check_DipSw(); |
| MRSa | 0:516a9e85a3fb | 152 | antPort.ANT_SendBroadcastData(ANT_CH, buffer); |
| MRSa | 0:516a9e85a3fb | 153 | return (0); |
| MRSa | 0:516a9e85a3fb | 154 | } |
| MRSa | 0:516a9e85a3fb | 155 | |
| MRSa | 0:516a9e85a3fb | 156 | /** |
| MRSa | 0:516a9e85a3fb | 157 | * Main Routine |
| MRSa | 0:516a9e85a3fb | 158 | */ |
| MRSa | 0:516a9e85a3fb | 159 | int main() |
| MRSa | 0:516a9e85a3fb | 160 | { |
| MRSa | 0:516a9e85a3fb | 161 | printf("--- INITIALIZE (ID:%d) ----\r\n", check_DipSw()); |
| MRSa | 0:516a9e85a3fb | 162 | int statusLamp = getLampId(check_DipSw()); |
| MRSa | 0:516a9e85a3fb | 163 | pc.baud(9600); // set serial speed between PC and mbed. |
| MRSa | 0:516a9e85a3fb | 164 | initialize_ANTport(true); // initialize BC-ANT-SERIAL |
| MRSa | 0:516a9e85a3fb | 165 | printf("--- READY ----\r\n"); |
| MRSa | 0:516a9e85a3fb | 166 | |
| MRSa | 0:516a9e85a3fb | 167 | while(1) |
| MRSa | 0:516a9e85a3fb | 168 | { |
| MRSa | 0:516a9e85a3fb | 169 | myLeds = statusLamp; |
| MRSa | 0:516a9e85a3fb | 170 | wait(0.5); |
| MRSa | 0:516a9e85a3fb | 171 | myLeds = 0; |
| MRSa | 0:516a9e85a3fb | 172 | wait(0.5); |
| MRSa | 0:516a9e85a3fb | 173 | } |
| MRSa | 0:516a9e85a3fb | 174 | } |