Если я в коде по прерыванию отключаю обработку этого самого прерывания, например на пару секунд, то прерывание действительно не будет обрабатываться эти две секунды, но если оно было, то будет обработано сразу же после следующего подключения прерывания.
Верно ли я понимаю, что микроконтроллер запоминает факт прерывания
не может этот флаг скинуть, пока как раз таки я снова не подключу прерывание и он тут же радостно мне его передает?
Возможно ли как-то переопределить данное поведение?
Или скинуть каким-то другим способом этот флаг?
1. всё-таки кто лучше для этих целей, полевик или биполярный
2. как выбрать подходящий полевик
3. какая у него должна быть обвязка (в частности, нужно ли ставить резистор на затвор между ним и ардуинкой)
И, пока что, остаётся открытым первый вопросОтвет на него элементарен - полевик лучше, поскольку его применение проще. В его обвязке нужен всего один резистор (да и тот не обязателен), и для управления требуется минимум энергии. Если биполярнику нужен существенный ток базы, из-за чего зачастую приходится городить составные транзисторы, то полевику этот ток вообще никакой - ему требуется только открывающее напряжение на полвольта-вольт выше порогового. И всё. Единственная сложность - не допустить случайного пробоя затвора статикой при монтаже.
напряжение в районе 15-18В, ток не более 30мАВторое преимущество полевика - универсальность. Не надо ломать голову над его типом - годится любой, только правильно выберите тип канала, P или N. И не отвлекайтесь на большие цифры, 40 вольт и 100 ампер - он прекрасно скоммутирует ваши 30 мА при 18 вольтах.
хочется чтобы лента плавно изменяла яркость
void set_pwm_smooth(int new_pwm)
{
static const int pwm_step = ...; // шаг изменения ШИМ
static const int pwm_step_time = ...; // время одного шага изменения ШИМ
static int old_pwm;
int pwm = old_pwm;
while (pwm != new_pwm) {
int next_pwm = pwm + (pwm < new_pwm ? pwm_step : -pwm_step);
if ((pwm < new_pwm && next_pwm > new_pwm) ||
(pwm > new_pwm && next_pwm < new_pwm))
pwm = new_pwm;
else
pwm = next_pwm;
analogWrite(LEDPIN, pwm);
delay(pwm_step_time);
}
old_pwm = new_pwm;
}
Что будет если замкнуть два цифровых порта на друг-друге?Если на один порт вывести 1, а на второй 0, будет короткое замыкание через верхний ключ первого порта и нижний ключ второго.
Возможны ли исключения?Да, если вы гарантируете, что состояния портов всегда будут одинаковыми (00 или 11), ничего не сгорит.
А если только один на выход с высоким сигналом, а второй на вход?Всё ок, вход прочитает единицу, ничего не сгорит.
А если оба на выход высокого сигнала?Как уже было сказано, кз не будет. Но переключать оба порта нужно строго одновременно, за один такт.
А если оба на вход?Не сгорит, но если больше ничего к этим портам не подключено, вход будет читать всякий случайный мусор.
Можно ли соединять пин 5V и читающий цифровой пин?В обоих случаях можно. Но если случайно переключить пин на выход, будет кз. Поэтому замыкать входы на питание и на землю лучше не напрямую, а через резистор.
Можно ли соединять землю и читающий цифровой пин?
Можно ли соединять пин земли и 5V?Будет короткое замыкание источника 5V. Ну хотя бы контроллер от этого не сгорит =)
sudo usermod -a -G dialout <username>