void CPianoHand::UpdateFingersWithHand(CPianoHand *hand) { int i, j; for (i=0; i < hand->m_nNumFingers; i++) { hand->m_fingers[i].mark = false; for (j=0; j < m_nNumFingers; j++) { m_fingers[j].mark = false; if (fabs(hand->m_fingers[i].sectionX - m_fingers[j].sectionX) < 0.1) { hand->m_fingers[i].mark = true; //m_fingers[j].mark = true; if (fabs(hand->m_fingers[i].sectionY - m_fingers[j].sectionY) < 0.1) { UpdateFinger(j, hand->m_fingers[i].x, hand->m_fingers[i].y); } } } if (hand->m_fingers[i].mark == false) AddFinger(hand->m_fingers[i].x, hand->m_fingers[i].y); } for (j=0; j < m_nNumFingers; j++) { if (m_fingers[j].mark == false) UpdateFinger(j); } }
void CPianoHand::UpdateLikelyFingers() { int likelyX[5], likelyY[5]; int i, j; float dist, smallestDistance; int smallestLoc; //Get Likely coordinates, based on evenly divided points along the //width of the hand for (i=0; i < 5; i++) { likelyX[i] = int(i * float(m_boundingBox.width)/5) + (m_boundingBox.x + 2); likelyY[i] = 50; } if (m_nNumFingers < 5) { for (i=0; i < m_nNumFingers; i++) { smallestDistance= 1000; for (j=0; j < 5; j++) { dist = sqrt((abs(m_fingers[i].x - likelyX[j]) * abs(m_fingers[i].x - likelyX[j]))); if (dist < smallestDistance) { smallestDistance = dist; smallestLoc = j; } } //Get Rid of That Value likelyX[smallestLoc] = 10000; likelyY[smallestLoc] = 10000; m_fingers[i].certainty = CERTAIN; } for (i=m_nNumFingers; i < 5; i++) { for (j=0; j < 5; j++) { if (likelyX[j] != 10000) { AddFinger(likelyX[j], likelyY[j]); m_fingers[i].certainty = UNCERTAIN; likelyX[j] = 10000; likelyY[j] = 10000; } } } } //Sort From Left To Right CPianoFinger tempFinger; for (i=0; i < 5; i++) { for (j=i; j < 5; j++) { if (m_fingers[j].x < m_fingers[i].x) { tempFinger = m_fingers[i]; m_fingers[i] = m_fingers[j]; m_fingers[j] = tempFinger; } } } }
void AddFingerModule(void) { unsigned char i = 0; unsigned char AH = 0;// unsigned char AL = 0;// unsigned char t = 0; FingerOn(); BellOn(); DelayNmS(200); BellOff(); // if(ReadFingerFlash(FingerRecord,sizeof(FingerRecord),0,0) != OK) { DisplayErr(); FingerOff(); return; } //2 for(i = 0;i<MAX_FINGER;i++) { AH = i/8; AL = i%8; t = FingerRecord[AH]<<(7-AL); t = t>>7; if(0 == t) { // break; } } if(i == MAX_FINGER) { // DisplayFail(); FingerOff(); return; } //3 t = AddFinger(0,i,250); if(ANSWER_OK == t) { DisplayOK();// } else { if(ANSWER_OUT_TIME == t)// { DisplayOutTime(); FingerOff(); return; } else { if(FALSE == t)// { DisplayErr(); FingerOff(); return; } else { DisplayFail();// FingerOff(); return; } } } //4 FingerRecord[AH] |= 1<<AL; if(OK == WriteFingerFlash(FingerRecord,sizeof(FingerRecord),0,0)) { } else { DisplayErr(); FingerOff(); return; } FingerOff();// }