public SparkFun_APDS9960(ref I2cDevice i2CDevice) { I2C = i2CDevice; _gestureUdDelta = 0; _gestureLrDelta = 0; _gestureUdCount = 0; _gestureLrCount = 0; _gestureNearCount = 0; _gestureFarCount = 0; _gestureState = StateDefinitions.NA_STATE; _gestureMotion = DirectionDefinitions.DIR_NONE; }
private void ResetGestureParameters() { _gestureData.Index = 0; _gestureData.TotalGestures = 0; _gestureUdDelta = 0; _gestureLrDelta = 0; _gestureUdCount = 0; _gestureLrCount = 0; _gestureNearCount = 0; _gestureFarCount = 0; _gestureState = StateDefinitions.NA_STATE; _gestureMotion = DirectionDefinitions.DIR_NONE; }
public void StateDefintionReceive(string stateName, string currentMessageName) { var definition = StateDefinitions.FirstOrDefault(x => x.Name == stateName); definition?.ReceiveMessage(currentMessageName); }
public bool ContainsStateDefintion(string name) { return(StateDefinitions.Any(x => x.Name == name)); }
public SparkFun_APDS9960(ref I2cDevice i2CDevice) { I2C = i2CDevice; _gestureUdDelta = 0; _gestureLrDelta = 0; _gestureUdCount = 0; _gestureLrCount = 0; _gestureNearCount = 0; _gestureFarCount = 0; _gestureState = StateDefinitions.NA_STATE; _gestureMotion = DirectionDefinitions.DIR_NONE; }
private bool ProcessGestureData() { byte uFirst = 0; byte dFirst = 0; byte lFirst = 0; byte rFirst = 0; byte uLast = 0; byte dLast = 0; byte lLast = 0; byte rLast = 0; int udRatioFirst; int lrRatioFirst; int udRatioLast; int lrRatioLast; int udDelta; int lrDelta; int i; /* If we have less than 4 total gestures, that's not enough */ if (_gestureData.TotalGestures <= 4) { return false; } /* Check to make sure our data isn't out of bounds */ if ((_gestureData.TotalGestures <= 32) && (_gestureData.TotalGestures > 0)) { /* Find the first value in U/D/L/R above the threshold */ for (i = 0; i < _gestureData.TotalGestures; i++) { if ((_gestureData.UData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.DData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.LData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.RData[i] > GESTURE_THRESHOLD_OUT)) { uFirst = _gestureData.UData[i]; dFirst = _gestureData.DData[i]; lFirst = _gestureData.LData[i]; rFirst = _gestureData.RData[i]; break; } } /* If one of the _first values is 0, then there is no good data */ if ((uFirst == 0) || (dFirst == 0) || (lFirst == 0) || (rFirst == 0)) { return false; } /* Find the last value in U/D/L/R above the threshold */ for (i = _gestureData.TotalGestures - 1; i >= 0; i--) { if ((_gestureData.UData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.DData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.LData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.RData[i] > GESTURE_THRESHOLD_OUT)) { uLast = _gestureData.UData[i]; dLast = _gestureData.DData[i]; lLast = _gestureData.LData[i]; rLast = _gestureData.RData[i]; break; } } } /* Calculate the first vs. last ratio of up/down and left/right */ udRatioFirst = ((uFirst - dFirst) * 100) / (uFirst + dFirst); lrRatioFirst = ((lFirst - rFirst) * 100) / (lFirst + rFirst); udRatioLast = ((uLast - dLast) * 100) / (uLast + dLast); lrRatioLast = ((lLast - rLast) * 100) / (lLast + rLast); /* Determine the difference between the first and last ratios */ udDelta = udRatioLast - udRatioFirst; lrDelta = lrRatioLast - lrRatioFirst; /* Accumulate the UD and LR delta values */ _gestureUdDelta += udDelta; _gestureLrDelta += lrDelta; /* Determine U/D gesture */ if (_gestureUdDelta >= GESTURE_SENSITIVITY_1) { _gestureUdCount = 1; } else if (_gestureUdDelta <= -GESTURE_SENSITIVITY_1) { _gestureUdCount = -1; } else { _gestureUdCount = 0; } /* Determine L/R gesture */ if (_gestureLrDelta >= GESTURE_SENSITIVITY_1) { _gestureLrCount = 1; } else if (_gestureLrDelta <= -GESTURE_SENSITIVITY_1) { _gestureLrCount = -1; } else { _gestureLrCount = 0; } /* Determine Near/Far gesture */ if ((_gestureUdCount == 0) && (_gestureLrCount == 0)) { if ((Math.Abs(udDelta) < GESTURE_SENSITIVITY_2) && (Math.Abs(lrDelta) < GESTURE_SENSITIVITY_2)) { if ((udDelta == 0) && (lrDelta == 0)) { _gestureNearCount++; } else if ((udDelta != 0) || (lrDelta != 0)) { _gestureFarCount++; } if ((_gestureNearCount >= 10) && (_gestureFarCount >= 2)) { if ((udDelta == 0) && (lrDelta == 0)) { _gestureState = StateDefinitions.NEAR_STATE; } else if ((udDelta != 0) && (lrDelta != 0)) { _gestureState = StateDefinitions.FAR_STATE; } return true; } } } else { if ((Math.Abs(udDelta) < GESTURE_SENSITIVITY_2) && (Math.Abs(lrDelta) < GESTURE_SENSITIVITY_2)) { if ((udDelta == 0) && (lrDelta == 0)) { _gestureNearCount++; } if (_gestureNearCount >= 10) { _gestureUdCount = 0; _gestureLrCount = 0; _gestureUdDelta = 0; _gestureLrDelta = 0; } } } return false; }
private void ResetGestureParameters() { _gestureData.Index = 0; _gestureData.TotalGestures = 0; _gestureUdDelta = 0; _gestureLrDelta = 0; _gestureUdCount = 0; _gestureLrCount = 0; _gestureNearCount = 0; _gestureFarCount = 0; _gestureState = StateDefinitions.NA_STATE; _gestureMotion = DirectionDefinitions.DIR_NONE; }
private bool ProcessGestureData() { byte uFirst = 0; byte dFirst = 0; byte lFirst = 0; byte rFirst = 0; byte uLast = 0; byte dLast = 0; byte lLast = 0; byte rLast = 0; int udRatioFirst; int lrRatioFirst; int udRatioLast; int lrRatioLast; int udDelta; int lrDelta; int i; /* If we have less than 4 total gestures, that's not enough */ if (_gestureData.TotalGestures <= 4) { return(false); } /* Check to make sure our data isn't out of bounds */ if ((_gestureData.TotalGestures <= 32) && (_gestureData.TotalGestures > 0)) { /* Find the first value in U/D/L/R above the threshold */ for (i = 0; i < _gestureData.TotalGestures; i++) { if ((_gestureData.UData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.DData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.LData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.RData[i] > GESTURE_THRESHOLD_OUT)) { uFirst = _gestureData.UData[i]; dFirst = _gestureData.DData[i]; lFirst = _gestureData.LData[i]; rFirst = _gestureData.RData[i]; break; } } /* If one of the _first values is 0, then there is no good data */ if ((uFirst == 0) || (dFirst == 0) || (lFirst == 0) || (rFirst == 0)) { return(false); } /* Find the last value in U/D/L/R above the threshold */ for (i = _gestureData.TotalGestures - 1; i >= 0; i--) { if ((_gestureData.UData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.DData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.LData[i] > GESTURE_THRESHOLD_OUT) && (_gestureData.RData[i] > GESTURE_THRESHOLD_OUT)) { uLast = _gestureData.UData[i]; dLast = _gestureData.DData[i]; lLast = _gestureData.LData[i]; rLast = _gestureData.RData[i]; break; } } } /* Calculate the first vs. last ratio of up/down and left/right */ udRatioFirst = ((uFirst - dFirst) * 100) / (uFirst + dFirst); lrRatioFirst = ((lFirst - rFirst) * 100) / (lFirst + rFirst); udRatioLast = ((uLast - dLast) * 100) / (uLast + dLast); lrRatioLast = ((lLast - rLast) * 100) / (lLast + rLast); /* Determine the difference between the first and last ratios */ udDelta = udRatioLast - udRatioFirst; lrDelta = lrRatioLast - lrRatioFirst; /* Accumulate the UD and LR delta values */ _gestureUdDelta += udDelta; _gestureLrDelta += lrDelta; /* Determine U/D gesture */ if (_gestureUdDelta >= GESTURE_SENSITIVITY_1) { _gestureUdCount = 1; } else if (_gestureUdDelta <= -GESTURE_SENSITIVITY_1) { _gestureUdCount = -1; } else { _gestureUdCount = 0; } /* Determine L/R gesture */ if (_gestureLrDelta >= GESTURE_SENSITIVITY_1) { _gestureLrCount = 1; } else if (_gestureLrDelta <= -GESTURE_SENSITIVITY_1) { _gestureLrCount = -1; } else { _gestureLrCount = 0; } /* Determine Near/Far gesture */ if ((_gestureUdCount == 0) && (_gestureLrCount == 0)) { if ((Math.Abs(udDelta) < GESTURE_SENSITIVITY_2) && (Math.Abs(lrDelta) < GESTURE_SENSITIVITY_2)) { if ((udDelta == 0) && (lrDelta == 0)) { _gestureNearCount++; } else if ((udDelta != 0) || (lrDelta != 0)) { _gestureFarCount++; } if ((_gestureNearCount >= 10) && (_gestureFarCount >= 2)) { if ((udDelta == 0) && (lrDelta == 0)) { _gestureState = StateDefinitions.NEAR_STATE; } else if ((udDelta != 0) && (lrDelta != 0)) { _gestureState = StateDefinitions.FAR_STATE; } return(true); } } } else { if ((Math.Abs(udDelta) < GESTURE_SENSITIVITY_2) && (Math.Abs(lrDelta) < GESTURE_SENSITIVITY_2)) { if ((udDelta == 0) && (lrDelta == 0)) { _gestureNearCount++; } if (_gestureNearCount >= 10) { _gestureUdCount = 0; _gestureLrCount = 0; _gestureUdDelta = 0; _gestureLrDelta = 0; } } } return(false); }