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();
}
@Carlos Costa, 👍1
1 ответ
Лучший ответ:
Вы определили функцию округления round_range()
, но никогда не использовали ее.
Вы хотите округлить числа, которые вы вводите в массив в
документе JSON:
rangeValues.add(round_range(buffer_range[i]));
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Глобальные переменные занимают много места в динамической памяти.
- Включить Guards vs #pragma один раз
- Ошибка: "'lcd' does not name a type" при использовании библиотеки LiquidCrystal.
- Публиковать данные json в mqtt
- Библиотека ардуино или код для ESP32 для сканирования устройств Bluetooth?
- Ошибка Guru Meditation: Core 1 panic'ed (Interrupt wdt timeout on CPU1)
- Невозможно установить библиотеку esp_camera