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: libmDot mbed-rtos mbed
Fork of power_meter by
main.cpp@4:0341c0004919, 2017-02-15 (annotated)
- Committer:
- wang1tao
- Date:
- Wed Feb 15 08:41:22 2017 +0000
- Revision:
- 4:0341c0004919
- Parent:
- 3:47839ac143d3
- Child:
- 5:cd2d6ed47421
Read Card ID
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| terrytamyh | 0:87fb6735eb09 | 1 | #include "mbed.h" |
| terrytamyh | 0:87fb6735eb09 | 2 | #include "DataLoggerRS232.h" |
| wang1tao | 4:0341c0004919 | 3 | #include "mbed.h" |
| wang1tao | 4:0341c0004919 | 4 | #include "mDot.h" |
| wang1tao | 4:0341c0004919 | 5 | #include "MTSLog.h" |
| wang1tao | 4:0341c0004919 | 6 | #include <string> |
| wang1tao | 4:0341c0004919 | 7 | #include <vector> |
| wang1tao | 4:0341c0004919 | 8 | #include <algorithm> |
| wang1tao | 4:0341c0004919 | 9 | #include <math.h> |
| wang1tao | 4:0341c0004919 | 10 | |
| wang1tao | 4:0341c0004919 | 11 | //define baudrate |
| wang1tao | 4:0341c0004919 | 12 | #define PC_BAUDRATE 115200 |
| wang1tao | 4:0341c0004919 | 13 | #define CARD_MACHINE_BAUDRATE 19200 |
| wang1tao | 4:0341c0004919 | 14 | |
| wang1tao | 4:0341c0004919 | 15 | #define COMMAND_LENGTH 7 |
| wang1tao | 4:0341c0004919 | 16 | #define RESPONSE_LENGTH 16 |
| wang1tao | 4:0341c0004919 | 17 | #define RINGBUFFER_SIZE 100 |
| wang1tao | 4:0341c0004919 | 18 | |
| wang1tao | 4:0341c0004919 | 19 | #define READ_PERIOD 2 |
| wang1tao | 4:0341c0004919 | 20 | #define SEND_PERIOD 5 |
| terrytamyh | 0:87fb6735eb09 | 21 | |
| wang1tao | 4:0341c0004919 | 22 | const char readCmd[COMMAND_LENGTH] = {0x09,0x41,0x31,0x46,0x33,0x46,0x0d}; |
| wang1tao | 4:0341c0004919 | 23 | |
| wang1tao | 4:0341c0004919 | 24 | char readBuf[RESPONSE_LENGTH] = {0}; |
| wang1tao | 4:0341c0004919 | 25 | char ringBuffer[RINGBUFFER_SIZE][RESPONSE_LENGTH] = {0}; |
| wang1tao | 4:0341c0004919 | 26 | |
| wang1tao | 4:0341c0004919 | 27 | unsigned int inIndex = 0; |
| wang1tao | 4:0341c0004919 | 28 | unsigned int outIndex = 0; |
| wang1tao | 4:0341c0004919 | 29 | |
| wang1tao | 4:0341c0004919 | 30 | /* functions prototype */ |
| wang1tao | 4:0341c0004919 | 31 | void readCardID(void); |
| wang1tao | 4:0341c0004919 | 32 | void sendCardID(void); |
| wang1tao | 4:0341c0004919 | 33 | |
| wang1tao | 4:0341c0004919 | 34 | void my_strcpy(char *dst, char *src); |
| wang1tao | 4:0341c0004919 | 35 | void my_strclear(char *str, unsigned int len); |
| wang1tao | 4:0341c0004919 | 36 | |
| wang1tao | 4:0341c0004919 | 37 | /* Global variables */ |
| wang1tao | 4:0341c0004919 | 38 | Serial pc (USBTX, USBRX); // tx, rx |
| wang1tao | 4:0341c0004919 | 39 | Serial cm_rs485 (PA_2,PA_3); // tx, rx |
| wang1tao | 4:0341c0004919 | 40 | |
| wang1tao | 4:0341c0004919 | 41 | mDot* dot; |
| Dengjj | 2:6ebf09171de9 | 42 | |
| wang1tao | 4:0341c0004919 | 43 | Ticker readTick; |
| wang1tao | 4:0341c0004919 | 44 | Ticker sendTick; |
| wang1tao | 4:0341c0004919 | 45 | |
| wang1tao | 4:0341c0004919 | 46 | int main() |
| wang1tao | 4:0341c0004919 | 47 | { |
| wang1tao | 4:0341c0004919 | 48 | // char chr; |
| wang1tao | 4:0341c0004919 | 49 | // int i; |
| wang1tao | 4:0341c0004919 | 50 | |
| wang1tao | 4:0341c0004919 | 51 | // get a mDot handle |
| wang1tao | 4:0341c0004919 | 52 | //dot = mDot::getInstance(); |
| wang1tao | 4:0341c0004919 | 53 | |
| wang1tao | 4:0341c0004919 | 54 | // print library version information |
| wang1tao | 4:0341c0004919 | 55 | //logInfo("version: %s", dot->getId().c_str()); |
| terrytamyh | 0:87fb6735eb09 | 56 | |
| wang1tao | 4:0341c0004919 | 57 | //******************************************* |
| wang1tao | 4:0341c0004919 | 58 | // configuration |
| wang1tao | 4:0341c0004919 | 59 | //******************************************* |
| wang1tao | 4:0341c0004919 | 60 | // reset to default config so we know what state we're in |
| wang1tao | 4:0341c0004919 | 61 | //dot->resetConfig(); |
| wang1tao | 4:0341c0004919 | 62 | |
| wang1tao | 4:0341c0004919 | 63 | //set baudrate |
| wang1tao | 4:0341c0004919 | 64 | //dot->setBaud(BAUDRATE); |
| wang1tao | 4:0341c0004919 | 65 | //dot->setLogLevel(mts::MTSLog::INFO_LEVEL); |
| wang1tao | 4:0341c0004919 | 66 | // set up the mDot with our network information: frequency sub band, network name, and network password |
| wang1tao | 4:0341c0004919 | 67 | // these can all be saved in NVM so they don't need to be set every time - see mDot::saveConfig() |
| wang1tao | 4:0341c0004919 | 68 | |
| wang1tao | 4:0341c0004919 | 69 | //logInfo("Baudrate is: %d", dot->getBaud()); |
| wang1tao | 4:0341c0004919 | 70 | // frequency sub band is only applicable in the 915 (US) frequency band |
| wang1tao | 4:0341c0004919 | 71 | // if using a MultiTech Conduit gateway, use the same sub band as your Conduit (1-8) - the mDot will use the 8 channels in that sub band |
| wang1tao | 4:0341c0004919 | 72 | // if using a gateway that supports all 64 channels, use sub band 0 - the mDot will use all 64 channels |
| wang1tao | 4:0341c0004919 | 73 | //logInfo("setting frequency sub band"); |
| wang1tao | 4:0341c0004919 | 74 | |
| wang1tao | 4:0341c0004919 | 75 | pc.baud(PC_BAUDRATE); |
| wang1tao | 4:0341c0004919 | 76 | pc.printf("PC COM RS232 baudrate: %d \n\r", PC_BAUDRATE); |
| wang1tao | 4:0341c0004919 | 77 | cm_rs485.baud(CARD_MACHINE_BAUDRATE); |
| wang1tao | 4:0341c0004919 | 78 | cm_rs485.format(9,SerialBase::Even,1); |
| wang1tao | 4:0341c0004919 | 79 | pc.printf("Card Machine RS485 baudrate: %d!\n\r", CARD_MACHINE_BAUDRATE); |
| wang1tao | 4:0341c0004919 | 80 | |
| wang1tao | 4:0341c0004919 | 81 | //Start readTick |
| wang1tao | 4:0341c0004919 | 82 | readTick.attach(&readCardID, READ_PERIOD); |
| wang1tao | 4:0341c0004919 | 83 | sendTick.attach(&sendCardID, SEND_PERIOD); |
| wang1tao | 4:0341c0004919 | 84 | |
| terrytamyh | 0:87fb6735eb09 | 85 | while(1) { |
| wang1tao | 4:0341c0004919 | 86 | /* Nothing to be done here */ |
| wang1tao | 4:0341c0004919 | 87 | wait(2); |
| wang1tao | 4:0341c0004919 | 88 | } |
| wang1tao | 4:0341c0004919 | 89 | } |
| wang1tao | 4:0341c0004919 | 90 | |
| wang1tao | 4:0341c0004919 | 91 | |
| wang1tao | 4:0341c0004919 | 92 | void my_strcpy(char *dst, char *src) |
| wang1tao | 4:0341c0004919 | 93 | { |
| wang1tao | 4:0341c0004919 | 94 | int j; |
| wang1tao | 4:0341c0004919 | 95 | while(src[j] != 0) |
| wang1tao | 4:0341c0004919 | 96 | { |
| wang1tao | 4:0341c0004919 | 97 | dst[j] = src[j]; |
| wang1tao | 4:0341c0004919 | 98 | j++; |
| wang1tao | 4:0341c0004919 | 99 | } |
| wang1tao | 4:0341c0004919 | 100 | } |
| wang1tao | 4:0341c0004919 | 101 | |
| wang1tao | 4:0341c0004919 | 102 | |
| wang1tao | 4:0341c0004919 | 103 | void my_strclear(char *str, unsigned int len) |
| wang1tao | 4:0341c0004919 | 104 | { |
| wang1tao | 4:0341c0004919 | 105 | unsigned int j; |
| wang1tao | 4:0341c0004919 | 106 | for(j=0; j<len; j++)str[j]=0; |
| wang1tao | 4:0341c0004919 | 107 | } |
| wang1tao | 4:0341c0004919 | 108 | |
| wang1tao | 4:0341c0004919 | 109 | |
| wang1tao | 4:0341c0004919 | 110 | void readCardID(void) |
| wang1tao | 4:0341c0004919 | 111 | { |
| wang1tao | 4:0341c0004919 | 112 | unsigned int i; |
| wang1tao | 4:0341c0004919 | 113 | char chr; |
| wang1tao | 4:0341c0004919 | 114 | |
| wang1tao | 4:0341c0004919 | 115 | pc.printf("Read Tick!\n\r"); |
| wang1tao | 4:0341c0004919 | 116 | |
| wang1tao | 4:0341c0004919 | 117 | /* clear the read buffer */ |
| wang1tao | 4:0341c0004919 | 118 | my_strclear(readBuf, RESPONSE_LENGTH); |
| wang1tao | 4:0341c0004919 | 119 | |
| wang1tao | 4:0341c0004919 | 120 | pc.printf("Send the READ command:%s\n\r", &readCmd[1]); |
| wang1tao | 4:0341c0004919 | 121 | if(cm_rs485.writeable()){ |
| wang1tao | 4:0341c0004919 | 122 | for(i=0; i<COMMAND_LENGTH; i++){ |
| wang1tao | 4:0341c0004919 | 123 | cm_rs485.putc(readCmd[i]); |
| wang1tao | 4:0341c0004919 | 124 | } |
| wang1tao | 4:0341c0004919 | 125 | } |
| wang1tao | 4:0341c0004919 | 126 | |
| wang1tao | 4:0341c0004919 | 127 | /* read the response */ |
| wang1tao | 4:0341c0004919 | 128 | chr = cm_rs485.getc(); |
| wang1tao | 4:0341c0004919 | 129 | i = 0; |
| wang1tao | 4:0341c0004919 | 130 | while(chr != 0x0d) |
| wang1tao | 4:0341c0004919 | 131 | { |
| wang1tao | 4:0341c0004919 | 132 | readBuf[i] = chr; |
| wang1tao | 4:0341c0004919 | 133 | i++; |
| wang1tao | 4:0341c0004919 | 134 | chr = cm_rs485.getc(); |
| wang1tao | 4:0341c0004919 | 135 | } |
| wang1tao | 4:0341c0004919 | 136 | |
| wang1tao | 4:0341c0004919 | 137 | /* print the response for debug */ |
| wang1tao | 4:0341c0004919 | 138 | pc.printf("Response[ASCII]:"); |
| wang1tao | 4:0341c0004919 | 139 | |
| wang1tao | 4:0341c0004919 | 140 | for(i=0; i< RESPONSE_LENGTH; i++){ |
| wang1tao | 4:0341c0004919 | 141 | pc.printf("%0X ", readBuf[i]); |
| wang1tao | 4:0341c0004919 | 142 | if (readBuf[i] == 0) break; |
| wang1tao | 4:0341c0004919 | 143 | } |
| wang1tao | 4:0341c0004919 | 144 | pc.printf("Response[Text]:%s", readBuf); |
| wang1tao | 4:0341c0004919 | 145 | |
| wang1tao | 4:0341c0004919 | 146 | /* add to ringBuffer if valid */ |
| wang1tao | 4:0341c0004919 | 147 | if((readBuf[3]!= '3') && (readBuf[4] !='C')) //valid response |
| wang1tao | 4:0341c0004919 | 148 | { |
| wang1tao | 4:0341c0004919 | 149 | my_strcpy(ringBuffer[inIndex], &readBuf[3]); //strim the 3 bytes prehead |
| wang1tao | 4:0341c0004919 | 150 | inIndex++; |
| wang1tao | 4:0341c0004919 | 151 | if(inIndex >= RINGBUFFER_SIZE) inIndex = 0; |
| wang1tao | 4:0341c0004919 | 152 | if(ringBuffer[inIndex][0] != 0) //is not empty |
| wang1tao | 4:0341c0004919 | 153 | { |
| wang1tao | 4:0341c0004919 | 154 | pc.printf("Warning! Ringbuffer overflow!\n\r"); |
| wang1tao | 4:0341c0004919 | 155 | pc.printf("Please have a check of the network!\n\r"); |
| wang1tao | 4:0341c0004919 | 156 | wait(30); //in seconds |
| wang1tao | 4:0341c0004919 | 157 | } |
| wang1tao | 4:0341c0004919 | 158 | } |
| wang1tao | 4:0341c0004919 | 159 | } |
| wang1tao | 4:0341c0004919 | 160 | |
| wang1tao | 4:0341c0004919 | 161 | void sendCardID(void) |
| wang1tao | 4:0341c0004919 | 162 | { |
| wang1tao | 4:0341c0004919 | 163 | pc.printf("Send Tick!\n\r"); |
| wang1tao | 4:0341c0004919 | 164 | /*send the data */ |
| wang1tao | 4:0341c0004919 | 165 | if(ringBuffer[outIndex] != 0) //not empty |
| wang1tao | 4:0341c0004919 | 166 | { |
| wang1tao | 4:0341c0004919 | 167 | pc.printf("Send dada[%s] to Gateway!\n\r", ringBuffer[outIndex]); |
| wang1tao | 4:0341c0004919 | 168 | |
| wang1tao | 4:0341c0004919 | 169 | /* t.b.d : send data though LoRA */ |
| wang1tao | 4:0341c0004919 | 170 | |
| wang1tao | 4:0341c0004919 | 171 | //clear the buffer |
| wang1tao | 4:0341c0004919 | 172 | my_strclear(ringBuffer[outIndex], RESPONSE_LENGTH); |
| wang1tao | 4:0341c0004919 | 173 | outIndex++; |
| wang1tao | 4:0341c0004919 | 174 | if(outIndex >= RINGBUFFER_SIZE)outIndex = 0; |
| wang1tao | 4:0341c0004919 | 175 | }else{ //empty |
| wang1tao | 4:0341c0004919 | 176 | pc.printf("Nothing to send!\n\r"); |
| wang1tao | 4:0341c0004919 | 177 | wait(10); |
| wang1tao | 4:0341c0004919 | 178 | } |
| Dengjj | 2:6ebf09171de9 | 179 | |
| wang1tao | 4:0341c0004919 | 180 | } |
