CAN BUS give wrong value

Hi , im trying to read PID from my car but it gave the wrong value.

If i were to request a single PID , it reply with a correct value , however if i request 2 PID right after another , it gave me wrong value

/************************************************************************************************* 
  OBD-II_PIDs TEST CODE
  LOOVEE @ JUN24, 2017
  
  Query
  send id: 0x7df
      dta: 0x02, 0x01, PID_CODE, 0, 0, 0, 0, 0

  Response
  From id: 0x7E9 or 0x7EA or 0x7EB
      dta: len, 0x41, PID_CODE, byte0, byte1(option), byte2(option), byte3(option), byte4(option)
      
  https://en.wikipedia.org/wiki/OBD-II_PIDs
  
  Input a PID, then you will get reponse from vehicle, the input should be end with '\n'
***************************************************************************************************/
#include <SPI.h>
#include "mcp_can.h"

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

#define PID_ENGIN_PRM       0x0C
#define PID_VEHICLE_SPEED   0x0D
#define PID_COOLANT_TEMP    0x05

#define CAN_ID_PID          0x7E0

unsigned char PID_INPUT;
unsigned char getPid    = 0;
unsigned char flagRecv = 0;

void set_mask_filt()
{
    /*
     * set mask, set both the mask to 0x3ff
     */
    CAN.init_Mask(0, 0, 0x7FC);
    CAN.init_Mask(1, 0, 0x7FC);

    /*
     * set filter, we can receive id from 0x04 ~ 0x09
     */
    CAN.init_Filt(0, 0, 0x7E8);                 
    CAN.init_Filt(1, 0, 0x7E8);

    CAN.init_Filt(2, 0, 0x7E8);
    CAN.init_Filt(3, 0, 0x7E8);
    CAN.init_Filt(4, 0, 0x7E8); 
    CAN.init_Filt(5, 0, 0x7E8);
}

void sendPid(unsigned char __pid)
{
    unsigned char tmp[8] = {0x02, 0x01, __pid, 0, 0, 0, 0, 0};
    Serial.print("SEND PID: 0x");
    Serial.println(__pid, HEX);
    CAN.sendMsgBuf(CAN_ID_PID, 0, 8, tmp);
}

void setup()
{
    Serial.begin(115200);
    while (CAN_OK != CAN.begin(CAN_500KBPS))    // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    attachInterrupt(0, MCP2515_ISR, FALLING); // start interrupt
    Serial.println("CAN BUS Shield init ok!");
    set_mask_filt();
}


void MCP2515_ISR()
{
    flagRecv = 1;
}



void loop()
{
  //  taskCanRecv();
    taskDbg();
    
    if(getPid)          // GET A PID
    {
        getPid = 0;
        sendPid(PID_INPUT);
        PID_INPUT = 0;
    }
    getEngineRPM();
    delay(1000);
    //taskDbg();
    getEngineCoolant();
    delay(1000);

    
}

void taskCanRecv()
{
    unsigned char len = 0;
    unsigned char buf[8];

    if(CAN_MSGAVAIL == CAN.checkReceive())                   // check if get data
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

        Serial.println("\r\n------------------------------------------------------------------");
        Serial.print("Get Data From id: ");
        Serial.println(CAN.getCanId(), HEX);
        for(int i = 0; i<len; i++)    // print the data
        {
            Serial.print("0x");
            Serial.print(buf[i], HEX);
            Serial.print("\t");
        }
        Serial.println();
    }
}

void taskDbg()
{
    while(Serial.available())
    {
        char c = Serial.read();
        
        if(c>='0' && c<='9')
        {
            PID_INPUT *= 0x10;
            PID_INPUT += c-'0';
            
        }
        else if(c>='A' && c<='F')
        {
            PID_INPUT *= 0x10;
            PID_INPUT += 10+c-'A';
        }
        else if(c>='a' && c<='f')
        {
            PID_INPUT *= 0x10;
            PID_INPUT += 10+c-'a';
        }
        else if(c == '\n')      // END
        {
            getPid = 1;
        }
    }
}



void getEngineRPM()
{
  unsigned char len1 = 0;
  unsigned char buf1[8];

    sendPid(PID_ENGIN_PRM);
    //getPid = 1;
    if(flagRecv) 
    {                                   // check if get data

        flagRecv = 0; 
          
    if(CAN_MSGAVAIL == CAN.checkReceive())                   // check if get data
   {
        CAN.readMsgBuf(&len1, buf1);/// read data,  len: data length, buf: data buf
        //Serial.println(CAN.getCanId(), HEX);
        unsigned int data1 =  (uint16_t(buf1[3] * 256) + buf1[4])/4;
        Serial.print("Engine RPM :" );
        Serial.print(data1);
        Serial.println();
   }
 //PID_INPUT = 0;
}

}

void getEngineCoolant()
{
  unsigned char len2 = 0;
  unsigned char buf2[8];

    sendPid(PID_COOLANT_TEMP);

     if(flagRecv) 
    {                                   // check if get data

        flagRecv = 0; 
    if(CAN_MSGAVAIL == CAN.checkReceive())                   // check if get data
   {
        CAN.readMsgBuf(&len2, buf2);/// read data,  len: data length, buf: data buf
      //  Serial.println(CAN.getCanId(), HEX);
        unsigned int data2 =  buf2[3] - 40;
        Serial.print("Coolant Temp :" );
        Serial.print(data2);
        Serial.println();
   }

  }
}
// END FILE

this is the wrong output

Engine RPM :6080
SEND PID: 0x5
Coolant Temp :65496
SEND PID: 0xC
Engine RPM :6080
SEND PID: 0x5
Coolant Temp :65496
SEND PID: 0xC
Engine RPM :6080
SEND PID: 0x5
Coolant Temp :65496
SEND PID: 0xC
Engine RPM :6080
SEND PID: 0x5

supposely rpm is around 1K and temperature is about 60 degree celcius

nvm , it can be solved by adding delay(200) after sending the canMessage