SmartPlant Hydrophonic Plant System

Dependencies:   mbed

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?

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