private void serGumstick_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { AccelData accel = new AccelData(); byte[] latestData = new byte[packetSize]; // No. of bytes in input buffer int bytesToRead = serGumstick.BytesToRead; // Read in all the bytes in the buffer lock (serGumstick) serGumstick.Read(data, 0, serGumstick.ReadBufferSize); // Store latest data try { Array.Copy(data, bytesToRead - packetSize, latestData, 0, packetSize); }catch (Exception exp) { return; } // Look for new byte (255) and assign accelerations for (int index = 0; index < packetSize; index++) { if (latestData[index] == 255) { accel.x = latestData[(index + 1) % 4]; accel.y = latestData[(index + 2) % 4]; accel.z = latestData[(index + 3) % 4]; dataQueue.Enqueue(accel); } } }
private void tmrUpdate_Tick(object sender, EventArgs e) { AccelData accel = new AccelData(); // Deque all 'old' acceleration values. Use the latest one for (int i = dataQueue.Count; i > 0; i--) { dataQueue.TryDequeue(out accel); } txtXAccel.Text = accel.x.ToString(); txtYAccel.Text = accel.y.ToString(); txtZAccel.Text = accel.z.ToString(); }