Firmata: как установить определенный PIN на высокий уровень при загрузке?
Я работаю над проектом, использующим J5, поэтому использую стандартную firmata, в этом проекте используется opto 4-канальное реле, когда плата загружается, состояние контактов устанавливается на низкое, поэтому, как только я включаю плату, мое реле переходит в закрытое состояние и запускает двигатель... это неправильное поведение для моей цели. Как я могу избежать этого? Покопавшись в гугле, я натыкаюсь на следующее:
Возможное решение
но я не могу понять, если это то, что я ищу .. плюс мне нужен только вывод 7 для установки на высокий уровень при загрузке, любая помощь, пожалуйста?
Обновление: СХЕМЫ
4-Канальный Релейный модуль 5 В
@FabioEnne, 👍2
Обсуждение2 ответа
Казалось бы, вы правы. Если я правильно понял источник, Firmata инициализирует все цифровые контакты как НИЗКИЙ ВЫХОДНОЙ сигнал. Трудно поверить, так как это кажется глупым поступком... Мое понимание таково, что:
setup()
вызываетsystemResetCallback()
для установки начальной конфигурации контакта (строка 779)systemResetCallback()
перебирает все контакты и вызовыsetPinModeCallback(i, OUTPUT)
для каждого выводаi
, который не является аналоговым выводом (строка 732)setPinModeCallback()
вызываетpinMode()
, чтобы установить вывод на вывод (строка 325).
Если я правильно понимаю, то самым простым решением было бы
исправить systemResetCallback()
и заменить ВЫВОД
на ВВОД
в
строке 732.
да, мой тот же вывод, но я думаю, что установка всех выводов на ВВОД вызовет ту же, но противоположную проблему для других компонентов.. лучше всего было бы установить желаемый контакт, @FabioEnne
Независимо от того, как вы исправляете Firmata, контакты будут настроены на ввод при включении Arduino и во время запуска загрузчика. Вы должны управлять своей схемой, чтобы приспособиться к этому начальному состоянию. Вытягивающий или вытягивающий резистор может подойти для выводов, приводящих в действие эти другие компоненты., @Edgar Bonet
сколько времени требуется для загрузки, было бы приемлемо меньше секунды, @FabioEnne
Просто поместите digitalWrite(anyPin,HIGH)
в void setup()
, это сделает этот конкретный PIN-код ВЫСОКИМ
для сброса. Это работает для меня.
void setup()
{
digitalWrite(8,HIGH);
Firmata.setFirmwareVersion(FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION);
Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
Firmata.attach(DIGITAL_MESSAGE, digitalWriteCallback);
Firmata.attach(REPORT_ANALOG, reportAnalogCallback);
Firmata.attach(REPORT_DIGITAL, reportDigitalCallback);
Firmata.attach(SET_PIN_MODE, setPinModeCallback);
Firmata.attach(SET_DIGITAL_PIN_VALUE, setPinValueCallback);
Firmata.attach(START_SYSEX, sysexCallback);
Firmata.attach(SYSTEM_RESET, systemResetCallback);
// для использования порта, отличного от последовательного, например Serial1 на Arduino Leonardo или Mega,
// Вызовите begin(baud) на альтернативном последовательном порту и передайте его Firmata, чтобы начать так:
// Сериал1.начало(57600);
// Firmata.begin(Сериал1);
// Однако не делайте этого, если вы используете SERIAL_MESSAGE
Firmata.begin(57600);
while (!Serial) {
; // дождитесь подключения последовательного порта. Требуется для плат на базе ATmega32U4 и Arduino 101
}
systemResetCallback(); // сброс к конфигурации по умолчанию
}
- GSM-модуль IOT-GA6 Arduino + ошибка CME 58
- Разница между массивом char и массивом unsigned char
- Arduino UNO + Ethernet Shield + ЖК-дисплей + RFID, но RFID не работает
- Arduino wrap или подкласс print() для работы с несколькими Serial
- Считывание данных нескольких датчиков из текстового файла, расположенного на SD-карте в Arduino/ESP32
- Строка в массив динамических байтов
- Проблемы с Serial.read()
- Как отправить данные ads1115 через spi на master arduino
Что заставляет вас думать, что это сапоги с низкими штифтами? Они должны иметь высокий импеданс. Не могли бы вы поделиться схемой подключения Arduino к оптрону, к реле и двигателям?, @Edgar Bonet
@EdgarBonet добавил схемы в вопрос ;), @FabioEnne
Это не схема. И это показывает только то, как вы питаете свой релейный модуль, а не то, как вы им управляете, или как он работает внутри (ссылка, пожалуйста)., @Edgar Bonet
@EdgarBonet добавил ссылку на ссылки на вики-страницу конструктора, @FabioEnne
@EdgarBonet Я забыл в приведенной выше схеме подключить вывод 7 к ch1, извините, @FabioEnne