Настройки ESP32. Одна ошибка возвращается, все остальные работают.
Я использую библиотеку Preferences.h в своем коде Arduino. Я инициализирую некоторые значения. Я сохраняю их вместе с библиотекой предпочтений. Затем я изменяю все значения, а затем считываю исходные сохраненные значения.
Все значения, кроме одного, восстанавливаются с помощью соответствующей инструкции get. Тот по-прежнему показывает измененное значение. Я не могу понять, почему это неправильно.
Может кто-нибудь указать на мою ошибку с калиброванным весом? И если вы видите какие-то другие общие ошибки с кодом, пожалуйста, укажите на них. (Я не программист)
#include <Preferences.h>
Preferences preferences;
int currentFile = 1;
int outputRate = 10; // milliSeconds
float outputGain = 1.23;
int zeroWeight = 900; // dac value to produce Zero on scale
int calibratedWeight = 2800; // dac value equal to 100lb calibration weight.
float DACmultiplier = 20.1;
//---------------------------------------
void savePreferences() {
preferences.begin("ScaleSetup", false); // false for read/write
preferences.putInt("currentFile", currentFile);
preferences.putInt("outputRate", outputRate);
preferences.putFloat("outputGain", outputGain);
preferences.putInt("zeroWeight", zeroWeight);
preferences.putInt("calibratedWeight", calibratedWeight); // ???
preferences.putFloat("DACmultiplier", DACmultiplier);
preferences.end();
}
//---------------------------------------
void getPreferences() {
preferences.begin("ScaleSetup", false); // false for read/write
currentFile = preferences.getInt("currentFile", currentFile);
outputRate = preferences.getInt("outputRate", outputRate);
outputGain = preferences.getFloat("outputGain", outputGain);
zeroWeight = preferences.getInt("zeroWeight", zeroWeight);
calibratedWeight = preferences.getInt("calibratedWeight", calibratedWeight); // ???
DACmultiplier = preferences.getFloat("DACmultiplier", DACmultiplier);
preferences.end();
}
//============================================
void setup() {
Serial.begin(115200);
Serial.println();
preferences.begin("ScaleSetup", false); // false for read/write
preferences.clear();
preferences.end();
delay(90);
savePreferences();
Serial.println("\n save preferences");
Serial.println("\n Original asigned values. \n");
Serial.printf("currentFile: %i\n", currentFile);
Serial.printf("outputRate: %i\n", outputRate);
Serial.printf("outputGain: %f\n", outputGain);
Serial.printf("zeroWeight: %i\n", zeroWeight);
Serial.printf("calibratedWeight: %i\n", calibratedWeight); // ???
Serial.printf("DACmultiplier: %f\n", DACmultiplier);
Serial.println("\n modify values. \n");
currentFile = 5;
outputRate = 50; // milliSeconds
outputGain = 0.45;
zeroWeight = 1333; // dac value to produce Zero on scale
calibratedWeight = 2200; // dac value equal to 100lb calibration weight.
DACmultiplier = 12.34;
Serial.printf("currentFile: %i\n", currentFile);
Serial.printf("outputRate: %i\n", outputRate);
Serial.printf("outputGain: %f\n", outputGain);
Serial.printf("zeroWeight: %i\n", zeroWeight);
Serial.printf("calibratedWeight: %i\n", calibratedWeight); // ???
Serial.printf("DACmultiplier: %f\n", DACmultiplier);
Serial.println("\n Get original saved preferences. \n");
getPreferences();
Serial.printf("currentFile: %i\n", currentFile);
Serial.printf("outputRate: %i\n", outputRate);
Serial.printf("outputGain: %f\n", outputGain);
Serial.printf("zeroWeight: %i\n", zeroWeight);
Serial.printf("calibratedWeight: %i\n", calibratedWeight); // ???
Serial.printf("DACmultiplier: %f\n", DACmultiplier);
// Serial.println("Restarting in 10 seconds...");
delay(10000);
// ESP.restart();
}
//============================================
void loop() {}
Вот результат.
save preferences
Original asigned values.
currentFile: 1
outputRate: 10
outputGain: 1.230000
zeroWeight: 900
calibratedWeight: 2800
DACmultiplier: 20.100000
modify values.
currentFile: 5
outputRate: 50
outputGain: 0.450000
zeroWeight: 1333
calibratedWeight: 2200
DACmultiplier: 12.340000
Get original saved preferences.
currentFile: 1
outputRate: 10
outputGain: 1.230000
zeroWeight: 900
calibratedWeight: 2200
DACmultiplier: 20.100000
@Rudy, 👍1
Обсуждение1 ответ
Лучший ответ:
В конце комментариев выше я сказал, что, по-моему, проблема заключалась в длине имени переменной.
Сегодня я попробовал опцию отладки, а затем запустил код. И следующее сообщение об ошибке было включено в вывод com.
[E][Preferences.cpp:163] putInt(): ошибка nvs_set_i32: КЛЮЧ с откалиброванным ВЕСОМ_TOO_LONG
Так что, думаю, я был прав. Раньше я ничего не знал о опции отладки.
- Как переопределить автоматическое управление в приложении Blynk?
- Esp32 не подключается к Wi-Fi
- Объяснение кода, найденного в интернете
- Как выбрать альтернативные контакты I2C на ESP32?
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32: отключить детектор отключения питания
Я не вижу ничего плохого в вашем коде, но я не знаком с этой библиотекой. begin() [кажется, возвращает a success/fail](https://github.com/espressif/arduino-esp32/blob/1.0.4/libraries/Preferences/src/Preferences.h#L28) и различные функции put могут [возвращать короткие значения вкл. failure](https://github.com/espressif/arduino-esp32/blob/1.0.4/libraries/Preferences/src/Preferences.h#L34). Так же, как проверка здравомыслия, я бы убедился, что все они возвращают ожидаемые значения., @timemage
Интересно, я что-то испортил раньше, и теперь это испорчено. Я думал, что функция preferences.clear(); может исправить это, если это проблема. Я постараюсь проверить на успех/неудачу как-нибудь. Спасибо, что посмотрела., @Rudy
я бы отладил такого рода проблему, переименовав
calibratedWeight
вabc123
, чтобы увидеть, связано ли это с именем, @jsotolaКогда я изменяю его на abc123, он возвращает правильное значение. Затем, когда я изменяю все abc123 обратно на calibratedWeight, он не работает, он возвращает тот же результат, который я первоначально показал. Я думаю, что изменение его на abc123 сделало новую запись, а не перезапись калиброванного веса. И когда я вернулся к калиброванному весу, проблема осталась. Но я думал, что preferences.clear(); должен был очистить все., @Rudy
Я изменил preferences.begin("ScaleSetup", false); на preferences.begin("Scale_Setup", false); Я был уверен, что это исправит это, но я получаю тот же результат., @Rudy
Может быть, мне нужно перезагрузить Windows. :), @Rudy
Я уверен, что знаю, в чем проблема. 16 символов, когда 15 символов является максимально допустимым., @Rudy
"Примечание: Имя пространства имен ограничено 15 символами" Я не понимаю Пространство имен, но думаю, что то же самое относится и к именам переменных. Он работает с именем 15 символов., @Rudy
Вы можете опубликовать ответ на свой собственный вопрос., @timemage
Итак, *did* this
preferences.putInt("calibratedWeight", калиброванный вес);
return0
?, @timemageЯ собирался попробовать, но подумал о длине. Я все еще хочу сделать пару тестов, но в то время я больше беспокоился о том, чтобы сделать остальную часть моего кода. Я опубликую больше позже., @Rudy