Finally, I got the solution. Using substring() function, I can able to split my data.
Here, suppose I have two input data with fixed length.
{"TPS":"0.40","MAP":"0.95","LOAD":"14"}
{"LOAD":"2.40","RPM":"4200","INJECTION_TIME":"4.87"}
And below is my whole arduino code:
#include<LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
String data_TPS_Json = "";
String data_MAP_Json = "";
String data_LOAD_TM_Json = "";
String data_LOAD_RI_Json = "";
String data_RPM_Json = "";
String data_INJECTION_TIME_Json = "";
String response = "";
bool begin = false;
char in;
int len = 0;
float TPS_Json;
float MAP_Json;
float LOAD_TM_Json;
float LOAD_RI_Json;
float RPM_Json;
float INJECTION_TIME_Json;
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop()
{
while(Serial.available() || !begin)
{
in = Serial.read();
if (in == '{')
{
begin = true;
}
if(begin)
{
response += (in);
}
if(in == '}')
{
break;
}
delay(1);
}
len = response.length();
if(len == 39)
{
data_TPS_Json = response.substring(8, 12);
data_MAP_Json = response.substring(21, 25);
data_LOAD_TM_Json = response.substring(35, 37);
jsonMapTps();
}
if(len == 52)
{
data_LOAD_RI_Json = response.substring(9, 13);
data_RPM_Json = response.substring(22, 26);
data_INJECTION_TIME_Json = response.substring(46, 50);
jsonRpmLoad();
}
}
void jsonMapTps()
{
TPS_Json = data_TPS_Json.toFloat();
MAP_Json = data_MAP_Json.toFloat();
LOAD_TM_Json = data_LOAD_TM_Json.toFloat();
lcd.setCursor(0, 0);
lcd.print(TPS_Json);
lcd.setCursor(8, 0);
lcd.print(MAP_Json);
lcd.setCursor(0, 1);
lcd.print(LOAD_TM_Json);
}
void jsonRpmLoad()
{
LOAD_RI_Json = data_LOAD_RI_Json.toFloat();
RPM_Json = data_RPM_Json.toFloat();
INJECTION_TIME_Json = data_INJECTION_TIME_Json.toFloat();
lcd.setCursor(0, 0);
lcd.print(LOAD_RI_Json);
lcd.setCursor(8, 0);
lcd.print(RPM_Json);
lcd.setCursor(0, 1);
lcd.print(INJECTION_TIME_Json);
}