fork download
  1.  
  2. #include <cstdint>
  3.  
  4. /** ADC step values for pressure conversion.
  5.  *
  6.  * These constants define the ADC range for pressure measurements.
  7.  * adStep[0] = minimum ADC value
  8.  * adStep[1] = mid ADC value (not used in current implementation)
  9.  * adStep[2] = maximum ADC value
  10.  */
  11. static constexpr uint32_t adStep[3] = {0, 512, 1023};
  12.  
  13. /** Convert ADC value to bars.
  14.  *
  15.  * Converts an ADC reading to pressure in bars using linear interpolation
  16.  * between minimum and maximum ADC values.
  17.  *
  18.  * @param ad_val The ADC value to convert (0-1023).
  19.  * @return Pressure in bars (0.0 to 2.0).
  20.  */
  21. float convertToBars(uint32_t ad_val) {
  22. if (ad_val < adStep[0]) {
  23. return 0.0f;
  24. }
  25. if (ad_val > adStep[2]) {
  26. return 2.0f;
  27. }
  28. uint32_t max = adStep[2] - adStep[0];
  29. uint32_t val = ad_val - adStep[0];
  30. return (static_cast<float>(val) / max) * 2.0f;
  31. }
  32.  
  33. /** User-defined literal for bars.
  34.  *
  35.  * Allows writing pressure values directly as literals, e.g., 30_Bars.
  36.  *
  37.  * @param value The ADC value.
  38.  * @return Pressure in bars.
  39.  */
  40. float operator""_Bars(unsigned long long value) {
  41. return convertToBars(static_cast<uint32_t>(value));
  42. }
  43.  
  44. /** User-defined literal for millibars.
  45.  *
  46.  * Allows writing pressure values directly as literals, e.g., 30_mBars.
  47.  * Note: This currently uses the same conversion as bars.
  48.  *
  49.  * @param value The ADC value.
  50.  * @return Pressure in millibars.
  51.  */
  52. float operator""_mBars(unsigned long long value) {
  53. return convertToBars(static_cast<uint32_t>(value));
  54. }
  55.  
  56. /** Main function demonstrating pressure literals.
  57.  *
  58.  * Demonstrates how to use the custom literals for pressure conversion.
  59.  *
  60.  * @return Exit status (0 for success).
  61.  */
  62. int main() {
  63. float bars = 30_Bars;
  64. float millibars = 30_mBars;
  65.  
  66. return 0;
  67. }
  68.  
Success #stdin #stdout 0s 5324KB
stdin
Standard input is empty
stdout
Standard output is empty