← Мерзкое пианино | Оглавление | Кнопочный переключатель →
В этом эксприменте мы создаем модель миксера с двумя скоростями работы.
#define MOTOR_PIN 9 #define FIRST_BUTTON_PIN 5 #define BUTTON_COUNT 3 // имена можно давать не только числам, но и целым выражениям. // Мы определяем с каким шагом (англ. step) нужно менять // скорость (англ. speed) мотора при нажатии очередной кнопки #define SPEED_STEP (255 / (BUTTON_COUNT - 1)) void setup() { pinMode(MOTOR_PIN, OUTPUT); // на самом деле, в каждом пине уже есть подтягивающий // резистор. Для его включения необходимо явно настроить пин // как вход с подтяжкой (англ. input with pull up) for (int i = 0; i < BUTTON_COUNT; ++i) pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP); } void loop() { for (int i = 0; i < BUTTON_COUNT; ++i) { // если кнопка отпущена, нам она не интересна. Пропускаем // оставшуюся часть цикла for, продолжая (англ. continue) // его дальше, для следующего значения i if (digitalRead(i + FIRST_BUTTON_PIN)) continue; // кнопка нажата — выставляем соответствующую ей скорость // мотора. Нулевая кнопка остановит вращение, первая // заставит крутиться в полсилы, вторая — на полную int speed = i * SPEED_STEP; // подача ШИМ-сигнала на мотор заставит его крутиться с // указанной скоростью: 0 — стоп машина, 127 — полсилы, // 255 — полный вперёд! analogWrite(MOTOR_PIN, speed); } }
INPUT_PULLUP
. На цифровых портах Arduino есть встроенные подтягивающие резисторы, которые можно включить указанным образом одновременно с настройкой порта на вход. Именно поэтому мы не использовали резисторы при сборке схемы.continue
, которая выполнится в этом случае, отменит продолжение данной итерации цикла и выполнение программы продолжится со следующей. А мотор будет крутиться со скоростью, заданной при последнем нажатии на какую-то из кнопок.continue
, использованная в цикле for
?continue
.