Мы создали массив типа byte: каждый его элемент это 1 байт, 8 бит, может принимать значения от 0 до 255.
Символы арабских цифр закодированы состоянием пинов, которые соединены с выводами соответствующих сегментов: 0, если сегмент должен быть выключен, и 1, если включен.
В переменную mask мы помещаем тот элемент массива numberSegments, который соответствует текущей секунде, вычисленной в предыдущей инструкции.
В цикле for мы пробегаем по всем сегментам, извлекая с помощью встроенной функции bitRead нужное состояние для текущего пина, в которое его и приводим с помощью digitalWrite и переменной enableSegment
bitRead(x, n) возвращает boolean значение: n-ный бит справа в байте x
Вы уже знаете о суперспособностях современного учителя?
Тратить минимум сил на подготовку и проведение уроков.
Быстро и объективно проверять знания учащихся.
Сделать изучение нового материала максимально понятным.
Избавить себя от подбора заданий и их проверки после уроков.
Выводы 3 и 8 семисегментного индикатора оба являются катодами, к земле можете подключать любой из них.
Внимательно рассмотрите схему, сопоставьте сегменты индикатора с номерами его ножек, а те, в свою очередь, с пинами Arduino, к которым мы их подключаем.
Вывод 5 индикатора — это точка. Мы не используем её в этом эксперименте
Сегменты индикатора — просто светодиоды, поэтому мы используем резистор с каждым из них.
Скетч
p130_seven_segment_counter.ino
#define FIRST_SEGMENT_PIN 2
#define SEGMENT_COUNT 7
// префикс «0b» означает, что целое число за ним записано в
// в двоичном коде. Единицами мы обозначим номера сегментов
// индикатора, которые должны быть включены для отображения
// арабской цифры. Всего цифр 10, поэтому в массиве 10 чисел.
// Нам достаточно всего байта (англ. byte, 8 бит) для хранения
Мы создали массив типа byte: каждый его элемент это 1 байт, 8 бит, может принимать значения от 0 до 255.
Символы арабских цифр закодированы состоянием пинов, которые соединены с выводами соответствующих сегментов: 0, если сегмент должен быть выключен, и 1, если включен.
В переменную mask мы помещаем тот элемент массива numberSegments, который соответствует текущей секунде, вычисленной в предыдущей инструкции.
В цикле for мы пробегаем по всем сегментам, извлекая с помощью встроенной функции bitRead нужное состояние для текущего пина, в которое его и приводим с помощью digitalWrite и переменной enableSegment
bitRead(x, n) возвращает boolean значение: n-ный бит справа в байте x
Вопросы для проверки себя
К которой ножке нашего семисегментного индикатора нужно подключать землю?
Как мы храним закодированные символы цифр?
Каким образом мы выводим символ на индикатор?
Задания для самостоятельного решения
Измените код, чтобы индикатор отсчитывал десятые секунды.
Поменяйте программу так, чтобы вместо символа «0» отображался символ «А».
Дополните схему и программу таким образом, чтобы сегмент-точка включался при прохождении четных чисел и выключался на нечетных