SmartPlant Hydrophonic Plant System
Dependencies: mbed
main.cpp@1:62bcb62b37cc, 2018-04-26 (annotated)
- Committer:
- Arkadi
- Date:
- Thu Apr 26 12:48:55 2018 +0000
- Revision:
- 1:62bcb62b37cc
- Parent:
- 0:dcb40e3b02c6
Simple serail parser:; $<CMD>,<VALUE>\r\n
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Arkadi | 0:dcb40e3b02c6 | 1 | #include "mbed.h" |
Arkadi | 1:62bcb62b37cc | 2 | #include "BufferedSerial.h" // solves issues of loosing data. alternative doing it yourself |
Arkadi | 0:dcb40e3b02c6 | 3 | //------------------------------------ |
Arkadi | 0:dcb40e3b02c6 | 4 | // Hyperterminal configuration |
Arkadi | 0:dcb40e3b02c6 | 5 | // 57600 bauds, 8-bit data, no parity |
Arkadi | 0:dcb40e3b02c6 | 6 | //------------------------------------ |
Arkadi | 1:62bcb62b37cc | 7 | // Incoming Message parser Format: "$<CMD>,<Value>\r\n" // up to /r/n |
Arkadi | 0:dcb40e3b02c6 | 8 | |
Arkadi | 1:62bcb62b37cc | 9 | BufferedSerial pc(SERIAL_TX, SERIAL_RX); |
Arkadi | 1:62bcb62b37cc | 10 | BufferedSerial BLE(D1, D0); |
Arkadi | 0:dcb40e3b02c6 | 11 | DigitalOut myled(LED1); |
Arkadi | 0:dcb40e3b02c6 | 12 | |
Arkadi | 1:62bcb62b37cc | 13 | #define DEBUG_MSG |
Arkadi | 1:62bcb62b37cc | 14 | |
Arkadi | 1:62bcb62b37cc | 15 | // Incoming Message parser |
Arkadi | 1:62bcb62b37cc | 16 | void Parse_Message(char inbyte); |
Arkadi | 1:62bcb62b37cc | 17 | // Apply command |
Arkadi | 1:62bcb62b37cc | 18 | void Apply_Command(int command, float value); |
Arkadi | 1:62bcb62b37cc | 19 | |
Arkadi | 0:dcb40e3b02c6 | 20 | int main() |
Arkadi | 0:dcb40e3b02c6 | 21 | { |
Arkadi | 0:dcb40e3b02c6 | 22 | pc.baud(57600); |
Arkadi | 0:dcb40e3b02c6 | 23 | BLE.baud(57600); |
Arkadi | 0:dcb40e3b02c6 | 24 | pc.printf("Hello Plant!\r\n"); |
Arkadi | 0:dcb40e3b02c6 | 25 | BLE.printf("Hello Plant !\r\n"); |
Arkadi | 0:dcb40e3b02c6 | 26 | while(1) { |
Arkadi | 0:dcb40e3b02c6 | 27 | //wait(1); |
Arkadi | 0:dcb40e3b02c6 | 28 | //pc.printf("This program runs since %d seconds.\r\n", i++); |
Arkadi | 0:dcb40e3b02c6 | 29 | //BLE.printf("This program runs since %d seconds.\r\n", i++); |
Arkadi | 1:62bcb62b37cc | 30 | |
Arkadi | 0:dcb40e3b02c6 | 31 | while(BLE.readable()) { |
Arkadi | 0:dcb40e3b02c6 | 32 | uint8_t in_byte = BLE.getc(); |
Arkadi | 1:62bcb62b37cc | 33 | //pc.putc(in_byte); |
Arkadi | 1:62bcb62b37cc | 34 | Parse_Message(in_byte); |
Arkadi | 1:62bcb62b37cc | 35 | |
Arkadi | 0:dcb40e3b02c6 | 36 | } |
Arkadi | 0:dcb40e3b02c6 | 37 | while(pc.readable()) { |
Arkadi | 0:dcb40e3b02c6 | 38 | uint8_t in_byte = pc.getc(); |
Arkadi | 1:62bcb62b37cc | 39 | //BLE.putc(in_byte); |
Arkadi | 1:62bcb62b37cc | 40 | Parse_Message(in_byte); |
Arkadi | 1:62bcb62b37cc | 41 | |
Arkadi | 1:62bcb62b37cc | 42 | } |
Arkadi | 0:dcb40e3b02c6 | 43 | myled = !myled; |
Arkadi | 0:dcb40e3b02c6 | 44 | } |
Arkadi | 0:dcb40e3b02c6 | 45 | } |
Arkadi | 1:62bcb62b37cc | 46 | |
Arkadi | 1:62bcb62b37cc | 47 | // Incoming Message parser Format: "$<CMD>,<Value>\r\n" // up to /r/n |
Arkadi | 1:62bcb62b37cc | 48 | void Parse_Message(char inbyte) |
Arkadi | 1:62bcb62b37cc | 49 | { |
Arkadi | 1:62bcb62b37cc | 50 | static const uint16_t BufferCMDSize=32; |
Arkadi | 1:62bcb62b37cc | 51 | static const uint16_t BufferCMD_ValuesSize=2; |
Arkadi | 1:62bcb62b37cc | 52 | |
Arkadi | 1:62bcb62b37cc | 53 | static float CMD_Values[BufferCMD_ValuesSize]= {0}; |
Arkadi | 1:62bcb62b37cc | 54 | static char BufferCMD[BufferCMDSize]= {0}; |
Arkadi | 1:62bcb62b37cc | 55 | static uint16_t BufferIndex=0; |
Arkadi | 1:62bcb62b37cc | 56 | static uint16_t Values_Index=0; |
Arkadi | 1:62bcb62b37cc | 57 | |
Arkadi | 1:62bcb62b37cc | 58 | BufferIndex=BufferIndex%(BufferCMDSize); // simple overflow handler |
Arkadi | 1:62bcb62b37cc | 59 | Values_Index=Values_Index%(BufferCMD_ValuesSize); // simple overflow handler |
Arkadi | 1:62bcb62b37cc | 60 | |
Arkadi | 1:62bcb62b37cc | 61 | BufferCMD[BufferIndex]=inbyte; |
Arkadi | 1:62bcb62b37cc | 62 | BufferIndex++; |
Arkadi | 1:62bcb62b37cc | 63 | |
Arkadi | 1:62bcb62b37cc | 64 | // parse incoming message |
Arkadi | 1:62bcb62b37cc | 65 | if (inbyte=='$') { // start of message |
Arkadi | 1:62bcb62b37cc | 66 | BufferIndex=0; // initialize to start of parser |
Arkadi | 1:62bcb62b37cc | 67 | Values_Index=0; // index for values position |
Arkadi | 1:62bcb62b37cc | 68 | } else if (inbyte==',') { // seperator char |
Arkadi | 1:62bcb62b37cc | 69 | CMD_Values[Values_Index]=atof(BufferCMD); // input value to buffer values |
Arkadi | 1:62bcb62b37cc | 70 | BufferIndex=0; // initialize to start of parser |
Arkadi | 1:62bcb62b37cc | 71 | Values_Index++; |
Arkadi | 1:62bcb62b37cc | 72 | if (Values_Index >= (BufferCMD_ValuesSize-1)) Values_Index=(BufferCMD_ValuesSize-1); // buffer overflow |
Arkadi | 1:62bcb62b37cc | 73 | } else if(inbyte=='\r') { // end of message // parse message |
Arkadi | 1:62bcb62b37cc | 74 | // Update last value |
Arkadi | 1:62bcb62b37cc | 75 | CMD_Values[Values_Index]=atof(BufferCMD); // input value to buffer values |
Arkadi | 1:62bcb62b37cc | 76 | |
Arkadi | 1:62bcb62b37cc | 77 | BufferIndex=0; // initialize to start of parser |
Arkadi | 1:62bcb62b37cc | 78 | Values_Index=0; // reset values index |
Arkadi | 1:62bcb62b37cc | 79 | |
Arkadi | 1:62bcb62b37cc | 80 | ////////////////////// |
Arkadi | 1:62bcb62b37cc | 81 | // Command recievd: // |
Arkadi | 1:62bcb62b37cc | 82 | ////////////////////// |
Arkadi | 1:62bcb62b37cc | 83 | int command = (int)CMD_Values[0]; |
Arkadi | 1:62bcb62b37cc | 84 | float value = CMD_Values[1]; |
Arkadi | 1:62bcb62b37cc | 85 | |
Arkadi | 1:62bcb62b37cc | 86 | #ifdef DEBUG_MSG |
Arkadi | 1:62bcb62b37cc | 87 | pc.printf("CMD: %d ,%.3f \r\n" ,command,value); // debug check |
Arkadi | 1:62bcb62b37cc | 88 | #endif /* DEBUG_MSG */ |
Arkadi | 1:62bcb62b37cc | 89 | |
Arkadi | 1:62bcb62b37cc | 90 | // apply commands |
Arkadi | 1:62bcb62b37cc | 91 | Apply_Command(command,value); |
Arkadi | 1:62bcb62b37cc | 92 | |
Arkadi | 1:62bcb62b37cc | 93 | }//end parser |
Arkadi | 1:62bcb62b37cc | 94 | }// end parser function |
Arkadi | 1:62bcb62b37cc | 95 | |
Arkadi | 1:62bcb62b37cc | 96 | |
Arkadi | 1:62bcb62b37cc | 97 | void Apply_Command(int command, float value) |
Arkadi | 1:62bcb62b37cc | 98 | { |
Arkadi | 1:62bcb62b37cc | 99 | bool state = 0; // boolean cast for value |
Arkadi | 1:62bcb62b37cc | 100 | switch (command) { |
Arkadi | 1:62bcb62b37cc | 101 | case 0 : // |
Arkadi | 1:62bcb62b37cc | 102 | break; |
Arkadi | 1:62bcb62b37cc | 103 | case 1 : // |
Arkadi | 1:62bcb62b37cc | 104 | break; |
Arkadi | 1:62bcb62b37cc | 105 | case 2 : // |
Arkadi | 1:62bcb62b37cc | 106 | break; |
Arkadi | 1:62bcb62b37cc | 107 | case 3 : // |
Arkadi | 1:62bcb62b37cc | 108 | break; |
Arkadi | 1:62bcb62b37cc | 109 | case 4 : // |
Arkadi | 1:62bcb62b37cc | 110 | break; |
Arkadi | 1:62bcb62b37cc | 111 | case 5 : // |
Arkadi | 1:62bcb62b37cc | 112 | break; |
Arkadi | 1:62bcb62b37cc | 113 | case 6 : // |
Arkadi | 1:62bcb62b37cc | 114 | break; |
Arkadi | 1:62bcb62b37cc | 115 | case 7 : // |
Arkadi | 1:62bcb62b37cc | 116 | break; |
Arkadi | 1:62bcb62b37cc | 117 | case 8 : // Data Stream |
Arkadi | 1:62bcb62b37cc | 118 | break; |
Arkadi | 1:62bcb62b37cc | 119 | default : |
Arkadi | 1:62bcb62b37cc | 120 | printf("Invalid Command\r\n" ); |
Arkadi | 1:62bcb62b37cc | 121 | }// end switch |
Arkadi | 1:62bcb62b37cc | 122 | }// end apply command |