/// <summary> /// Get the assets and startup some timers to do random movements and other things... /// </summary> /// <param name="parameters"></param> public async void OnStart(object sender, IDictionary <string, object> parameters) { try { //Get the audio and image lists for use in the skill _audioList = (await _misty.GetAudioListAsync())?.Data; _imageList = (await _misty.GetImageListAsync())?.Data; _misty.Wait(2000); _misty.PlayAudio("s_Awe.wav", 100, null); _misty.ChangeLED(255, 255, 255, null); _misty.DisplayImage("e_ContentRight.jpg", 1, null); _misty.StartKeyPhraseRecognition(null); _misty.StartFaceRecognition(null); RegisterEvents(); _heartbeatTimer = new Timer(HeartbeatCallback, null, 3000, 3000); _moveHeadTimer = new Timer(MoveHeadCallback, null, 5000, 10000); _moveArmsTimer = new Timer(MoveArmCallback, null, 5000, 4000); _ledTimer = new Timer(ChangeLEDCallback, null, 2000, 2000); } catch (Exception ex) { _misty.SkillLogger.Log($"HelloLocomotionSkill : OnStart: => Exception", ex); } }
/// <summary> /// Callback called when the voice recognition "Hey Misty" event is triggered /// </summary> /// <param name="voiceEvent"></param> private void KeyPhraseRecognizedCallback(IKeyPhraseRecognizedEvent voiceEvent) { _misty.DisplayImage("e_Love.jpg", 1, null); _misty.PlayAudio("s_Awe.wav", 100, null); if (!_misty.Wait(3000)) { return; } _misty.StartKeyPhraseRecognition(null); }
/// <summary> /// Register the desired startup events, more may be registered separately as needed /// </summary> private void RegisterEvents() { //Bumps _misty.RegisterBumpSensorEvent(BumpCallback, 0, true, null, null, null); //Cap touch _misty.RegisterCapTouchEvent(CapTouchCallback, 0, true, null, null, null); // Face Recognition _misty.RegisterFaceRecognitionEvent(FaceRecCallback, 0, false, null, null, null); _misty.StartFaceRecognition(null); // Key Phase _misty.RegisterKeyPhraseRecognizedEvent(KeyPhraseRecognizedCallback, 250, true, null, null); _misty.StartKeyPhraseRecognition(false, false, 0, 0, null); //TOF List<TimeOfFlightValidation> tofFrontRightValidations = new List<TimeOfFlightValidation>(); tofFrontRightValidations.Add(new TimeOfFlightValidation { Name = TimeOfFlightFilter.DistanceInMeters, Comparison = ComparisonOperator.LessThanOrEqual, ComparisonValue = 0.3 }); tofFrontRightValidations.Add(new TimeOfFlightValidation { Name = TimeOfFlightFilter.SensorName, Comparison = ComparisonOperator.Equal, ComparisonValue = TimeOfFlightPosition.FrontRight }); _misty.RegisterTimeOfFlightEvent(TOFRangeCallback, 300, true, tofFrontRightValidations, null, null); List<TimeOfFlightValidation> tofFrontLeftValidations = new List<TimeOfFlightValidation>(); tofFrontLeftValidations.Add(new TimeOfFlightValidation { Name = TimeOfFlightFilter.DistanceInMeters, Comparison = ComparisonOperator.LessThanOrEqual, ComparisonValue = 0.3 }); tofFrontLeftValidations.Add(new TimeOfFlightValidation { Name = TimeOfFlightFilter.SensorName, Comparison = ComparisonOperator.Equal, ComparisonValue = TimeOfFlightPosition.FrontLeft }); _misty.RegisterTimeOfFlightEvent(TOFRangeCallback, 300, true, tofFrontLeftValidations, null, null); List<TimeOfFlightValidation> tofBackValidations = new List<TimeOfFlightValidation>(); tofBackValidations.Add(new TimeOfFlightValidation { Name = TimeOfFlightFilter.DistanceInMeters, Comparison = ComparisonOperator.LessThanOrEqual, ComparisonValue = 0.3 }); tofBackValidations.Add(new TimeOfFlightValidation { Name = TimeOfFlightFilter.SensorName, Comparison = ComparisonOperator.Equal, ComparisonValue = TimeOfFlightPosition.Back }); _misty.RegisterTimeOfFlightEvent(TOFRangeCallback, 300, true, tofBackValidations, null, null); List<TimeOfFlightValidation> tofFrontCenterValidations = new List<TimeOfFlightValidation>(); tofFrontCenterValidations.Add(new TimeOfFlightValidation { Name = TimeOfFlightFilter.DistanceInMeters, Comparison = ComparisonOperator.LessThanOrEqual, ComparisonValue = 0.3 }); tofFrontCenterValidations.Add(new TimeOfFlightValidation { Name = TimeOfFlightFilter.SensorName, Comparison = ComparisonOperator.Equal, ComparisonValue = TimeOfFlightPosition.FrontCenter }); _misty.RegisterTimeOfFlightEvent(TOFRangeCallback, 300, true, tofFrontCenterValidations, null, null); }
/// <summary> /// Callback called when the voice recognition "Hey Misty" event is triggered /// </summary> /// <param name="keyPhraseRecognizedEvent"></param> public void ProcessKeyPhraseEvent(object sender, IKeyPhraseRecognizedEvent keyPhraseRecognizedEvent) { _misty.DisplayImage("e_Love.jpg", 1, null); _misty.PlayAudio("Misty_Hi.wav", 60, null); if (!_misty.Wait(3000)) { return; } _misty.StartKeyPhraseRecognition(null); if (!_busyTalking) { _timeToTellJokes = true; } else { _timeToTellJokes = false; } }
/// <summary> /// Get the assets and startup some timers to do random movements and other things... /// </summary> /// <param name="parameters"></param> public async void OnStart(object sender, IDictionary <string, object> parameters) { try { var deviceInfo = await _misty.GetDeviceInformationAsync(); if (!_misty.Wait(0)) { return; } //Get the audio and image lists for use in the skill _audioList = (await _misty.GetAudioListAsync())?.Data; if (!_misty.Wait(0)) { return; } _imageList = (await _misty.GetImageListAsync())?.Data; if (!_misty.Wait(0)) { return; } if (_audioList != null && _audioList.Count > 0) { AudioDetails randomAudio = _audioList[_randomGenerator.Next(0, _audioList.Count - 1)]; _misty.PlayAudio(randomAudio.Name, 100, null); } if (_imageList != null && _imageList.Count > 0) { ImageDetails randomImage = _imageList[_randomGenerator.Next(0, _imageList.Count - 1)]; _misty.DisplayImage(randomImage.Name, 1, null); } if (!_misty.Wait(2000)) { return; } _misty.ChangeLED(255, 255, 255, null); //Register a number of events _misty.RegisterAudioPlayCompleteEvent(AudioPlayCallback, 0, true, null, null); _misty.RegisterCapTouchEvent(CapTouchCallback, 0, true, null, null, null); _misty.RegisterKeyPhraseRecognizedEvent(KeyPhraseRecognizedCallback, 250, true, null, null); _misty.StartKeyPhraseRecognition(null); _misty.StartFaceRecognition(null); //Create an event with a specific name so we can unregister it when needed using that name _misty.RegisterBumpSensorEvent(BumpCallback, 0, true, null, "MyBumpSensorName", null); //Register face rec with keepAlive = false, it will need to be reregistered after triggering if the user wants it to run again _misty.RegisterFaceRecognitionEvent(FaceRecCallback, 0, false, null, null, null); //Play audio indicator that the event registration state has changed if (_audioList != null && _audioList.Count > 0) { AudioDetails randomAudio = _audioList[_randomGenerator.Next(0, _audioList.Count - 1)]; _misty.PlayAudio(randomAudio.Name, 100, null); await Task.Delay(1000); _misty.PlayAudio(randomAudio.Name, 100, null); } if (!_misty.Wait(30000)) { return; } //Unregister the bump sensor _misty.UnregisterEvent("MyBumpSensorName", UnregisterCallback); //Play audio indicator that the event registration state has changed if (_audioList != null && _audioList.Count > 0) { AudioDetails randomAudio = _audioList[_randomGenerator.Next(0, _audioList.Count - 1)]; _misty.PlayAudio(randomAudio.Name, 100, null); await Task.Delay(1000); _misty.PlayAudio(randomAudio.Name, 100, null); } if (!_misty.Wait(20000)) { return; } //Unregister ALL events _misty.UnregisterAllEvents(UnregisterCallback); //Play audio indicator that the event registration state has changed if (_audioList != null && _audioList.Count > 0) { AudioDetails randomAudio = _audioList[_randomGenerator.Next(0, _audioList.Count - 1)]; _misty.PlayAudio(randomAudio.Name, 100, null); await Task.Delay(1000); _misty.PlayAudio(randomAudio.Name, 100, null); } if (!_misty.Wait(20000)) { return; } //Play audio indicator that the event registration state has changed if (_audioList != null && _audioList.Count > 0) { AudioDetails randomAudio = _audioList[_randomGenerator.Next(0, _audioList.Count - 1)]; _misty.PlayAudio(randomAudio.Name, 100, null); await Task.Delay(1000); _misty.PlayAudio(randomAudio.Name, 100, null); } //Re-register events _misty.RegisterAudioPlayCompleteEvent(AudioPlayCallback, 0, true, null, null); _misty.RegisterFaceRecognitionEvent(FaceRecCallback, 0, false, null, null, null); _misty.RegisterCapTouchEvent(CapTouchCallback, 0, true, null, null, null); _misty.RegisterKeyPhraseRecognizedEvent(KeyPhraseRecognizedCallback, 0, true, null, null); //You can also register events without callbacks, it requires a user to subscribe to that event as follows... //Note that this re-registers bump events to play a sound on release, not contact as they were previously handled _misty.RegisterBumpSensorEvent(0, true, null, null, null); _misty.BumpSensorEventReceived += ProcessBumpEvent; //Will continue to process events until timeout of cancel } catch (Exception ex) { _misty.SkillLogger.Log($"InteractiveMistySkill : OnStart: => Exception", ex); } }
private void onTouched(ICapTouchEvent capTouchEvent) { _misty.RegisterVoiceRecordEvent(OnVoiceRecordReceived, 10, false, "VoiceRecordEvent", null); _misty.StartKeyPhraseRecognition(true, true, 10000, 5000, null); }