* @brief Updates the accelerometer data from the Dashboard. */
| 168 | * @brief Updates the accelerometer data from the Dashboard. |
| 169 | */ |
| 170 | void Widgets::Accelerometer::updateData() |
| 171 | { |
| 172 | if (!isEnabled()) |
| 173 | return; |
| 174 | |
| 175 | if (!VALIDATE_WIDGET(SerialStudio::DashboardAccelerometer, m_index)) |
| 176 | return; |
| 177 | |
| 178 | const auto& acc = GET_GROUP(SerialStudio::DashboardAccelerometer, m_index); |
| 179 | if (acc.datasets.size() != 3) |
| 180 | return; |
| 181 | |
| 182 | double rawX = 0, rawY = 0, rawZ = 0; |
| 183 | for (int i = 0; i < 3; ++i) { |
| 184 | const auto& dataset = acc.datasets[i]; |
| 185 | const auto& widget = dataset.widget; |
| 186 | if (widget == QStringLiteral("x")) |
| 187 | rawX = dataset.numericValue; |
| 188 | |
| 189 | if (widget == QStringLiteral("y")) |
| 190 | rawY = dataset.numericValue; |
| 191 | |
| 192 | if (widget == QStringLiteral("z")) |
| 193 | rawZ = dataset.numericValue; |
| 194 | } |
| 195 | |
| 196 | if (!std::isfinite(rawX) || !std::isfinite(rawY) || !std::isfinite(rawZ)) |
| 197 | return; |
| 198 | |
| 199 | constexpr double kInv981 = 1.0 / 9.81; |
| 200 | const double factor = m_inputInG ? 1.0 : kInv981; |
| 201 | const double gx = rawX * factor; |
| 202 | const double gy = rawY * factor; |
| 203 | const double gz = rawZ * factor; |
| 204 | |
| 205 | const double mag = qSqrt(gx * gx + gy * gy); |
| 206 | const double theta = qAtan2(gy, gx) * (180.0 / M_PI); |
| 207 | |
| 208 | const double totalG = qSqrt(gx * gx + gy * gy + gz * gz); |
| 209 | |
| 210 | const double pitchVal = qAtan2(gx, qSqrt(gy * gy + gz * gz)) * (180.0 / M_PI); |
| 211 | const double rollVal = qAtan2(gy, qSqrt(gx * gx + gz * gz)) * (180.0 / M_PI); |
| 212 | |
| 213 | const double prevX = m_x; |
| 214 | const double prevY = m_y; |
| 215 | const double prevZ = m_z; |
| 216 | const double prevG = m_g; |
| 217 | const double prevMag = m_magnitude; |
| 218 | const double prevTheta = m_theta; |
| 219 | const double prevPitch = m_pitch; |
| 220 | const double prevRoll = m_roll; |
| 221 | const double prevPeak = m_peakG; |
| 222 | |
| 223 | constexpr double kAlpha = 0.4; |
| 224 | if (!m_filterInitialized) { |
| 225 | m_x = gx; |
| 226 | m_y = gy; |
| 227 | m_z = gz; |
nothing calls this directly
no test coverage detected