void MobileControl::DataArrival(int size, unsigned char *buffer) { unsigned char recv_tmp = buffer[0]; if (buffer[0] == 0x0D) //end of data { DataProcess(); } else { encoder_recv.push_back(recv_tmp); } if (IsProcessOver) { double start; start = clock(); if (cal > 5) { ComputeVelosity(start,EncoderData[RIGHT],EncoderData[LEFT]); printf("V = %f W = %f \n",LinearVelocity,AngularVelocity); cal = 0; } else cal++; int AccumulateDistance = m_pThis->Odometer(); printf("AccumulateDistance = %d \n",AccumulateDistance ); IsProcessOver = false; encoder_recv.clear(); } }
/* ********************************************************* * GET ONE BEAM DATA. ********************************************************* */ void CDataProcess::GetOneBeamData(){ //WAIT FOR DATA COMMING DWORD stat = WaitForMultipleObjects(2,h_eInterrupt,FALSE,INFINITE); switch (stat){ case WAIT_OBJECT_0+SINGLESPECTRAFINISHED: DataProcess(); SetEvent(h_eSpectraDataProcessed); break; case WAIT_OBJECT_0+TOTALSPECTRASFINISHED: SetEvent(h_eBeamDataProcessed); break; case WAIT_TIMEOUT://NO USE NOW AfxMessageBox("DATA TRANS TIME OUT"); break; default: break; }; return ; }