Как загрузить scal-фактор, внешний по отношению к коду?
Мы знаем, что нам нужны калибровочные коэффициенты (масштабные коэффициенты) для считывания текущих данных датчика (ACS758) в arduino. Я также использую считыватель напряжения с использованием схемы делителя напряжения для своего проекта. Мне нужно построить 5 таких плат и каждый раз менять калибровочный коэффициент в основной программе из-за допуска компонентов. В настоящее время для одной из моих плат reference_factor равен 0.81, и это изменится из-за допуска резисторов для других плат.
Из-за этой проблемы мне нужно поддерживать 5 различных кодов для 5 различных плат. Эти значения датчиков управляют включением и выключением определенных реле. (Не показано в коде).
могу ли я загрузить этот referrence_factor извне через текстовый файл или как любой другой носитель, чтобы мне не нужно было каждый раз менять код? Я использую arduino Nano.
int reference_Factor = 0.81;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// read the raw data coming in on analog pin 0:
int lightLevel = analogRead(A0);
// Convert the raw data value (0 - 1023) to voltage (0.0V - 5.0V):
float voltage = lightLevel * reference_factor;
// write the voltage value to the serial monitor:
Serial.println(voltage);
}
@Amrutha B V, 👍1
Обсуждение1 ответ
Как написано в комментариях вы совладающее eepron, но в вашем случае у нее есть один большой недостаток: все должно быть записано во время компиляции (он же, когда вы программка нано, вы также должны заполнить EEPROM с соответствующими значениями), так, например, если у вас температуру в зависимости от фактора, который вы хотите изменить, а на поле...
Я бы выбрал устройство для чтения SD-карт:
- Дешево купить (2 доллара)
- Легко обрабатывается в коде (чтение из файла является стандартной функцией)
- использование совместимой с ПК файловой системы FAT позволяет считывать/записывать данные на SD-карту на ПК/другом устройстве без перекомпиляции кода.
- Если вы по какой-либо причине переключаете датчики, просто напишите новый scale.txt файл на SD-карту, вставьте и перезагрузите nano, чтобы получить новые значения
- вы все еще можете использовать eeprom в качестве резервного сценария
В качестве подсказки (также упомянутой в комментариях Delta_G) ввод для чего - то вроде 0.01-это не то, что вы хотите-определите как float и следите за "ловушкой преобразования" при использовании с другими переменными, не определенными как float.
Спасибо за ваше уважение. Поскольку я не прикрепил здесь полный код, int-это ошибка с опечаткой. Я действительно понимаю структуру данных. Я действительно использовал float в своем коде. Я хочу знать, в чем здесь разница между прямой загрузкой кода и загрузкой кода с помощью EPROM? Мне нужно отредактировать основной код для всех 5 плат, даже если я буду использовать EPROM, верно?, @Amrutha B V
Да, либо загрузка eeprom из программы (5 версий), либо с помощью дополнительной программы, которую вы запускаете перед загрузкой (5 версий флэш - памяти eeprom + 1 идентичная программа), либо какой-либо ввод (нажатие кнопки/мигание светодиода для ввода во время первого запуска-1 программа). Вот почему я предложил SD как беспроблемный ;-), @Codebreaker007
Нет, вам не придется загружать EEPROM во время компиляции. Вы могли бы скомпилировать один и тот же код для всех плат. Что вам понадобится, так это некоторый код в настройках, который проверяет, было ли значение уже задано в EEPROM. Если это не так, то он вызывает функцию, которая запрашивает вас через последовательный монитор, позволяет ввести номер и сохраняет его в EEPROM. Этот код будет выполняться только при первом включении платы. После этого никто никогда не увидит это приглашение, если вы не очистите плату и не перезагрузите ее., @Delta_G
- avrdude ser_open() can't set com-state
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Не могу загрузить скетч в Arduino Nano
- Самая низкая мощность, возможная в Arduino
- Как запрограммировать чип ATmega328 au tqfp32 (SMD)?
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- SIM800C, CPIN: НЕ ГОТОВ (КОД ОШИБКИ: +CME ОШИБКА: 10)
- Проблема с Arduino Nano 33 IOT
Вы можете сохранить его в EEPROM. Напишите метод в программе установки, который увидит, был ли записан EEPROM, а если нет, то позволит вам ввести номер для использования. Вы устанавливаете его при первом включении питания на заводе. С этого момента он видит, что EEPROM был записан, и пропускает этот бит, а вместо этого считывает коэффициент из EEPROM., @Delta_G
Кстати, ваш текущий код ошибочен. Вы должны посмотреть, какие типы значений может содержать переменная int., @Delta_G
Спасибо за ответ. Я действительно использовал float в моем фактическом коде., @Amrutha B V
Вы всегда должны публиковать "фактический код", когда просите о помощи. В противном случае вы в конечном итоге получаете ответы, которые не относятся к вашему "фактическому коду", и тогда вы теряете и наше время, и свое., @Delta_G