Arduino создает массив Json с двойными значениями и 2 десятичными знаками

Как я могу создать массив Json с двойными значениями и 2 десятичными знаками, используя библиотеку ArduinoJson?

https://arduinojson.org/v6/how-to/configure-the-serialization-of-floats /

В следующем небольшом примере можно записать в файл Json двойное значение с запятой 2.

#include <ArduinoJson.h>


double round2(double value) {
  return (int)(value * 100 + 0.5) / 100.0;
}

double round3(double value) {
  return (int)(value * 1000 + 0.5) / 1000.0;
}


double var1 = 1.23456789;
double var2 = 5.05599991;

void setup() {
  Serial.begin(115200);

  StaticJsonDocument<200> doc;
  doc["hello"] = "world";
  doc["var1"] = round2(var1);
  doc["var2"] = round3(var2);

  serializeJsonPretty(doc, Serial);

}

В моем скетче прямо сейчас я могу создать массив Json со значениями, считываемыми с аналогового входа. Только созданный массив Json имеет 9 десятичных знаков. Я не знаю, как реализовать в скетче, следуя приведенному выше примеру, что значения внутри массива Json имеют только две десятичные точки.

Следуйте моему наброску.

#include <ArduinoJson.h>

#define ADC_Range_Pin  35  // Датчик диапазона контактов

unsigned long scale_previousMillis = 0;
const long scale_interval = 100; // Интервал
const byte NUM_SAMPLES = 20;
double buffer_range [NUM_SAMPLES];

// Датчик дальности действия Instanzen-----------------------------
double Current_range = 0; //4-20 мА
double rawADCValue_range = 0;
double ADCVoltage_range = 0; // 0-3,3 В
double range = 0; // 0-50 мм
unsigned long range_t;


double mapfloat(double x, double in_min, double in_max, double out_min, double out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

double round_range(double value) {
  return (int)(value * 100 + 0.5) / 100.0;
}


void Read_Scale() {

  StaticJsonDocument<1000> doc;

  static int scale_counter = 0;

  if (millis() - scale_previousMillis >= scale_interval) {
    scale_previousMillis = millis();

    rawADCValue_range = 0;
    for (int i = 0; i < 100; ) {
      if (millis() - range_t  >= 1) {
        rawADCValue_range += analogRead(ADC_Range_Pin);
        i++;
        range_t = millis();
      }
    }

    ADCVoltage_range = (double)(rawADCValue_range / 100.0) * (3.3 / 4095.0);
    Current_range = mapfloat(ADCVoltage_range, 0.8, 3.3, 4, 20);
    range = mapfloat(Current_range, 4, 20, 0, 50);


    buffer_range[scale_counter] = range ;

    scale_counter ++;

    JsonArray rangeValues = doc.createNestedArray("Range");

    if (scale_counter >= NUM_SAMPLES)
    {
      for (int i = 0; i < NUM_SAMPLES; i++) {
        rangeValues.add (buffer_range[i]);
      }

      serializeJson(doc, Serial);
      Serial.println();
      scale_counter = 0;
      Serial.println();

    }
  }
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  Read_Scale();
}

, 👍1


1 ответ


Лучший ответ:

2

Вы определили функцию округления round_range(), но никогда не использовали ее. Вы хотите округлить числа, которые вы вводите в массив в документе JSON:

rangeValues.add(round_range(buffer_range[i]));
,