Зачем в схеме использован диод?

Защитный диод нам нужен для того, чтобы ток обратного направления, который начнет создавать двигатель, вращаясь по инерции, не вывел из строя транзистор.

Почему мы использовали полевой MOSFET-транзистор, а не биполярный?

Потому что биполярный и полевой транзисторы абсолютно разные по принципу действия. Выходной сигнал биполярного транзистора управляется током, а нам нужно управление напряжением.

Почему мы не использовали резистор между портом Arduino и затвором транзистора?

В каждом пине уже есть подтягивающий резистор.

Как работает инструкция continue, использованная в цикле for?

Инструкция continue, которая выполнится в этом случае, отменит продолжение данной итерации цикла и выполнение программы продолжится со следующей.

Задания для самостоятельного решения

Внесите единственное изменение в программу, после которого максимальной скоростью вращения мотора составит половину от возможной.

#define MOTOR_PIN 9

#define FIRST_BUTTON_PIN 5

#define BUTTON_COUNT 3

#define SPEED_STEP (128 / (BUTTON_COUNT - 1))

void setup()

{

pinMode(13, OUTPUT);

pinMode(MOTOR_PIN, OUTPUT);

for (int i = 0; i < BUTTON_COUNT; ++i)

pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);

}

void loop()

{

digitalWrite(13, HIGH);

for (int i = 0; i < BUTTON_COUNT; ++i) {

if (digitalRead(i + FIRST_BUTTON_PIN))

continue;

int speed = i * SPEED_STEP;

analogWrite(MOTOR_PIN, speed);

}

}

Перепишите программу без использования инструкции continue.

#define MOTOR_PIN 9

#define FIRST_BUTTON_PIN 5

#define BUTTON_COUNT 3

#define SPEED_STEP (255 / (BUTTON_COUNT - 1))

void setup()

{

pinMode(13, OUTPUT);

pinMode(MOTOR_PIN, OUTPUT);

for (int i = 0; i < BUTTON_COUNT; ++i)

pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);

}

void loop()

{

digitalWrite(13, HIGH);

for (int i = 0; i < BUTTON_COUNT; ++i) {

if (!digitalRead(i + FIRST_BUTTON_PIN))

{

int speed = i * SPEED_STEP;

analogWrite(MOTOR_PIN, speed);

}

}

}

Добавьте в схему еще одну кнопку, чтобы у миксера стало три режима. Понадобилось ли изменять что-либо в программе?

#define MOTOR_PIN 9

#define FIRST_BUTTON_PIN 4

#define BUTTON_COUNT 4

#define SPEED_STEP (255 / (BUTTON_COUNT - 1))

void setup()

{

pinMode(13, OUTPUT);

pinMode(MOTOR_PIN, OUTPUT);

for (int i = 0; i < BUTTON_COUNT; ++i)

pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);

}

void loop()

{

digitalWrite(13, HIGH);

for (int i = 0; i < BUTTON_COUNT; ++i) {

if (digitalRead(i + FIRST_BUTTON_PIN))

continue;

int speed = i * SPEED_STEP;

analogWrite(MOTOR_PIN, speed);

}

}

Эксперимент 10. Кнопочный переключатель

В этом эксперименте мы делаем из тактовой кнопки триггер, борясь с «дребезгом».

Схема

Код

#define BUTTON_PIN 3

#define LED_PIN 13

boolean buttonWasUp = true;

boolean ledEnabled = false;

void setup()

{

pinMode(LED_PIN, OUTPUT);

pinMode(BUTTON_PIN, INPUT_PULLUP);

}

void loop()

{

boolean buttonIsUp = digitalRead(BUTTON_PIN);

if (buttonWasUp && !buttonIsUp) {

delay(10);

buttonIsUp = digitalRead(BUTTON_PIN);

if (!buttonIsUp)

{

ledEnabled = !ledEnabled;

digitalWrite(LED_PIN, ledEnabled);

}

}

buttonWasUp = buttonIsUp;

}

Вопросы для проверки себя

1.В каком случае оператор && возвращает значение «истина»?

Логический оператор && («и») возвращает значение «истина» только в случае истинности обоих его операндов.

Что такое «дребезг»?

Это многократные неконтролируемые замыкания и размыкания контактов за счет упругости материалов и деталей контактной системы — некоторое время контакты «подпрыгивают» при соударениях, размыкая и замыкая электрическую цепь.

Наши рекомендации