Обратный отсчёт до нуля
Часть раздела Дисплеи и датчики путешествия по Arduino на Coddy. Урок 4 из 24.
Как и при перемещении сервопривода, цикл for может отсчитывать в обратном порядке: начать с большого числа, продолжать, пока число не меньше 0, и каждый раз отнимать единицу с помощью n--:
for (int n = 5; n >= 0; n--) {
showDigit(n);
delay(1000);
}На дисплее по очереди отображаются 5, 4, 3, 2, 1 и 0. Если использовать n > 0, отсчёт остановится на 1, и 0 никогда не отобразится.
Обратный отсчёт должен выполняться один раз, а не снова и снова. Код в setup() выполняется один раз, поэтому поместите туда обратный отсчёт и код того, что должно произойти после достижения 0. loop() может оставаться пустой, и на дисплее останется 0.
Задание
ЛегкоЗуммер подключён к контакту 9. Сделай обратный отсчёт перед запуском:
- в
setup()считай от 5 до 0, по одному числу в секунду - при 0 включи зуммер с помощью
tone(buzzerPin, 880, 1000) - оставь 0 на дисплее
Нажми Run, затем Check.
Попробуйте сами
const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
// Один шаблон на цифру; читайте справа налево: последний бит соответствует сегменту a.
// gfedcba
const byte digits[10] = {
0b0111111, // 0
0b0000110, // 1
0b1011011, // 2
0b1001111, // 3
0b1100110, // 4
0b1101101, // 5
0b1111101, // 6
0b0000111, // 7
0b1111111, // 8
0b1101111 // 9
};
void showDigit(int n) {
for (int i = 0; i < 7; i++) {
if (bitRead(digits[n], i) == 1) {
digitalWrite(segmentPins[i], LOW); // горит
} else {
digitalWrite(segmentPins[i], HIGH); // не горит
}
}
}
const int buzzerPin = 9;
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
// здесь выполните обратный отсчёт от 5 до 0, затем включите зуммер
}
void loop() {
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Дисплеи и датчики
1Семисегментные дисплеи
Семисегментный дисплейШаблоны цифр в байтахСчёт на дисплееОбратный отсчёт до нуляБросок кубикаПотренируйтесь самостоятельно: Песочница Arduino