Использование тумблера для запуска части скетча
Во-первых, я новичок в этом. Я только что заказал свою первую книгу по кодированию Arduino и работаю над несколькими простыми приложениями, используя DS3231 (с функцией считывания температуры), ЖК-дисплей, модуль карты MicroSD и т. д. Моя плата — Uno R3. В настоящее время мне нужен скетч для запуска части программы, которая содержит цикл для сбора данных и запускает его при включении тумблера. Итак, переключатель включается, и часть программы запускается, переключатель отключается, и эта часть завершается. Причина, по которой мне нужен переключатель с постоянным включением/выключением, заключается в проблеме с перегрузками и вибрацией. Мгновенное нажатие кнопки не будет надежным. В конечном итоге все компоненты будут в любительской ракете большой мощности для запуска программы управления креном. Если вы можете помочь, я очень ценю вашу помощь.
@RED, 👍0
Обсуждение2 ответа
Есть разные способы добиться одного и того же.
Условием является флаг или порт чтения.
if(digitalRead(inPin))
{
// Здесь ваш первый код.
}
else
{
// второй код
}
Контакты переключателя подпрыгивают при размыкании или замыкании. Возможно, вы захотите это рассмотреть. Обычно он стабилен в течение 10 миллисекунд. В зависимости от того, что вы делаете, это может иметь или не иметь значение.
Вам нужно кое-что. Вверху вашего скетча, перед setup()
byte togglePin = x; // от 2 до 19 с помощью Uno. Провод для подключения контакта к Gnd в закрытом состоянии.
В настройке()
pinMode (togglePin, INPUT_PULLUP);
В цикле()
if (digitalRead(togglePin) == LOW){
// переключатель замкнут, делаем что-то или прекращаем что-то делать
// возможно, также установим флаг, например
toggleState = 0;
}
else {
// переключиться, прекратить что-то делать или начать что-то делать
toggleState = 1;
}
Флаг можно использовать в другом месте вашего кода
if (someOtherCondition && toggleState == 0){
// запускаем таймер или двигатель или что-то в этом роде
}
if (someOtherCondition && toggleState == 1){
// выключаем таймер или двигатель или что-то в этом роде
}
Спасибо! Я собираюсь попробовать это. RE предыдущие комментарии, извините, если было какое-то недопонимание. Просто хотел убедиться, что люди понимают, что я не использую мгновенный переключатель, например, включение и выключение светодиода. Мне нужно включить систему, запустить программу, а затем подождать, пока я включу винтовой переключатель, чтобы запустить датчик и программу управления. Это будет сделано только один раз за рейс., @RED
Вместо этого вы можете использовать while (digitalRead()==Low) в setup(). Он будет читать булавку до тех пор, пока условие не станет ложным., @CrossRoads
Оператор if-else работает отлично; Спасибо еще раз за помощь. Чтобы набраться опыта, я также использовал переменную toggleState. Мне просто нужно было добавить определение как int в начале программы. Как вы думаете, (digitalRead()==Low) будет быстрее или будет вести себя иначе? Кроме того, мне любопытно, замедляют ли комментарии (т. е. //) выполнение программы или компиляция игнорирует эти комментарии?, @RED
Комментарии ничего не делают, компилятор их удаляет. «Как вы думаете, (digitalRead()==Low) будет быстрее или будет вести себя иначе?» Тогда что?, @CrossRoads
Я подумал, что, хотя может быть несколько способов добиться одного и того же поведения, некоторые процедуры могут быть быстрее. Я имею в виду более быстрое восприятие, а не только машинное время. Хотя я уверен, что более медленные процедуры добавят время, если будут повторяться много раз. В любом случае, я только что получил свою первую книгу по созданию эскизов Arduino и начал ее читать. Надеюсь, через неделю я узнаю больше. Но, без сомнения, у меня все равно будут вопросы. Это отличный ресурс!, @RED
Конечно, это правда. Вы можете манипулировать портами, чтобы быстрее читать и записывать биты, но вы теряете все проверки, которые программное обеспечение Arduino выполняет за вас в фоновом режиме. Например, я мог бы сделать (if (PIND && 0b00000100) == 0b00000100){ } vs if (digitalRead(D2) == HIGH){ }, чтобы проверить, находится ли вывод в состоянии High, или PORTB = PINB | 0b00000100; vs digitalWrite (D10, ВЫСОКИЙ); установить пин (сделать его высоким), но для многих вещей возможная экономия в 1-2мкс не ощутима. Однажды мне пришлось обновить 45 сдвиговых регистров с частотой 20 кГц, и мне нужна была вся доступная скорость. Я использовал осциллограф, чтобы подтвердить время., @CrossRoads
- Как использовать этот 3-контактный ползунковый переключатель?
- Кнопка с таймером переключения и функцией сброса времени + светодиод обратной связи
- digitalRead не читает входной контакт ESP8266-01
- Как подключить трехконтактный переключатель включения-выключения для считывания входных данных?
- Как переключить 12 В с помощью esp32?
- Использование транзистора NPN в качестве переключателя для включения/выключения двигателя постоянного тока
- Нужна помощь в принципиальной схеме матрицы герконового выключателя 8*8
- Двигатель постоянного тока Arduino с 2 кнопками
кнопочный переключатель и тумблер с электрической точки зрения одинаковы..... тумблер имеет механическое устройство, которое удерживает переключатель в закрытом положении при его активации .......... нажатие кнопки или поворот тумблер или скручивание двух проводов вместе — это одно и то же, что касается Arduino., @jsotola
Я нашел пример, когда во время калибровки удерживалась кнопка. Как вы, вероятно, знаете, существует множество примеров использования переключателя мгновенного действия, но мало примеров использования переключателя. Я ценю предложение использовать операторы if-else для достижения этой цели. Я жду получения нескольких резисторов и винтовых переключателей, которые я использую в ракетной технике для проверки схемы. Меня интересует, как предотвратить потенциальный отскок при замыкании винтового переключателя. Это может произойти потому, что эти переключатели имеют некоторый люфт, пока переключатель не затянут., @RED
я не уверен, что вы поняли мой комментарий... с электрической точки зрения нет никакой разницы между кнопкой и тумблером... нет причин, по которым вам следует различать примеры в Интернете.. ..... просто используйте библиотеку
debounce
в своем эскизе, @jsotola