wireless sensor / Mbed 2 deprecated dakaxitong_Enhanced

Dependencies:   libmDot mbed-rtos mbed

Fork of power_meter by wireless sensor

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?

UserRevisionLine numberNew 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 }