private void processMessage(string messageData) { try { emotionData = JsonConvert.DeserializeObject<EmotionHeartRateData>(messageData); System.Diagnostics.Debug.WriteLine("received emo data: Stage {0}", emotionData.Stage); } catch (Exception) { emotionData = new EmotionHeartRateData(); } changeLights(); }
private async void animate(EmotionHeartRateData data, CancellationToken token) { try { var blinking = Task.Run(async () => { bool on = false; while (!token.IsCancellationRequested) { on = !on; foreach (var led in pins) { toggleLight(led.Key, on); } await Task.Delay(500, token); } }, token); var dimming = Task.Run(async () => { bool up = false; var originalColor = rgbLed.Color; var newColor = originalColor; while (!token.IsCancellationRequested) { double deltaDown = 1.2; var delay = 60; if (up) { newColor = originalColor; delay = 800; up = false; } else { newColor = Color.FromArgb(255, (byte)(newColor.R / deltaDown), (byte)(newColor.G / deltaDown), (byte)(newColor.B / deltaDown)); if (newColor == Colors.Black) { up = true; delay = 500; } } rgbLed.Color = newColor; await Task.Delay(delay, token); } }, token); await Task.WhenAll(blinking, dimming); } catch (TaskCanceledException) { //it is ok, we use a cancellation token to cancel even if it is in a delay Logger.Log("Animation stopped"); } catch (Exception ex) { Logger.Log($"Unexpected: {ex.Message}"); } }