Эксперимент Маячок


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



бет28/45
Дата13.02.2023
өлшемі1,82 Mb.
#67503
түріЗакон
1   ...   24   25   26   27   28   29   30   31   ...   45
Вопросы для проверки себя

  1. Можно ли поместить в один массив элементы типа boolean и int?

  2. Обязательно ли при объявлении массива заполнять его значениями?

  3. Чем удобно использование массива?

  4. Как обратиться к элементу массива, чтобы прочитать его значение?

  5. Почему для хранения времени прошлого сигнала мы используем переменную типа long?

  6. Чем отличаются инструкции continue и break?

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

  1. Сделайте напряженный вариант игры: пусть интервал между сигналами будет в диапазоне от 10 до 15 секунд.

  2. В игре есть лазейка: кнопку можно зажать до сигнала «пли!» и таким образом сразу же выиграть. Дополните программу так, чтобы так выиграть было нельзя.

  3. Добавьте в игру еще двух ковбоев!


Эксперимент 13. Секундомер
← Кнопочные ковбои | Оглавление | Счётчик нажатий →

В этом эксперименте мы создаем секундомер, который считает до 10.


Список деталей для эксперимента

  • 1 плата Arduino Uno

  • 1 беспаечная макетная плата

  • семисегментный индикатор

  • резисторов номиналом 220 Ом

  • 9 проводов «папа-папа»

Принципиальная схема

Схема на макетке

Обратите внимание

  • Выводы 3 и 8 семисегментного индикатора оба являются катодами, к земле можете подключать любой из них.

  • Внимательно рассмотрите схему, сопоставьте сегменты индикатора с номерами его ножек, а те, в свою очередь, с пинами Arduino, к которым мы их подключаем.

  • Вывод 5 индикатора — это точка. Мы не используем её в этом эксперименте

  • Сегменты индикатора — просто светодиоды, поэтому мы используем резистор с каждым из них.

Скетч
p130_seven_segment_counter.ino
#define FIRST_SEGMENT_PIN 2
#define SEGMENT_COUNT 7
// префикс «0b» означает, что целое число за ним записано в
// в двоичном коде. Единицами мы обозначим номера сегментов
// индикатора, которые должны быть включены для отображения
// арабской цифры. Всего цифр 10, поэтому в массиве 10 чисел.
// Нам достаточно всего байта (англ. byte, 8 бит) для хранения
// комбинации сегментов для каждой из цифр.
byte numberSegments[10] = {
0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010,
0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110,
};
void setup()
{
for (int i = 0; i < SEGMENT_COUNT; ++i)
pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);
}
void loop()
{
// определяем число, которое собираемся отображать. Пусть им
// будет номер текущей секунды, зацикленный на десятке
int number = (millis() / 1000) % 10;
// получаем код, в котором зашифрована арабская цифра
int mask = numberSegments[number];
// для каждого из 7 сегментов индикатора...
for (int i = 0; i < SEGMENT_COUNT; ++i) {
// ...определяем: должен ли он быть включён. Для этого
// считываем бит (англ. read bit), соответствующий текущему
// сегменту «i». Истина — он установлен (1), ложь — нет (0)
boolean enableSegment = bitRead(mask, i);
// включаем/выключаем сегмент на основе полученного значения
digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);
}
}


Достарыңызбен бөлісу:
1   ...   24   25   26   27   28   29   30   31   ...   45




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет