Хочу обратить ваше внимание на еще один способ полезного использования пьезодинамика и вывода в последовательный порт. В программировании, а тем более в создании киберфизических устройств, где программирование также присутствует, есть важный этап, называемый отладкой, который предназначен для избавления от ошибок. Чтобы от ошибки избавиться, сначала нужно ее найти. В средах разработки у программистов есть специальные средства для этого, которые например позволяют шаг за шагом выполнять программу, а не все сразу. И смотреть, в какой момент что происходит. Стандартная среда Arduino такого не предлагает. Но мы можем пользоваться дополнительными способами. Например, мы можем вставлять команду для создания звука в каком-то месте программы, где мы сомневаемся, что все происходит корректно. То есть если до писка дело дошло, значит программа до этого места выполняется. Затем мы можем эту команду переставлять далее по коду, чтобы обнаружить, в конце концов, в каком же месте происходит ошибка. Если нам нужно работать с данными, мы не уверены в том, что в процессе вычислений что-то было вычислено корректно, мы можем выводить значение переменных в последовательный порт. Или просто отправлять себе туда сообщение о том, что мы добрались до определенного места программы. Давайте попробуем немножко модифицировать наш предыдущий скетч, где мы получали цифры с компьютера и выводили их на семисегментник, чтобы понять, о чем же я сейчас говорил. Я немножко доработал эту программу, добавил туда пин пищалки, которую уместил в середину схемы, и затем ниже добавил отладочных строчек. [ЩЕЛЧКИ] Допустим, что мы отправляем с компьютера цифру, но на сегментник ничего не приходит. Причин этому может быть множество, начиная с того, что мы не подключили провод, заканчивая тем, что у нас, например, не работает сдвиговый регистр. Но нужно понять, в чем же именно проблема. Первым делом в коде мы проверяем, есть ли что-то в буфере. Пришло ли что-то по последовательному порту. И здесь я добавил вывод в тот же последовательный порт сообщение got data, ну то есть «пришли какие-то данные». То есть если мы там прочитали это сообщение, значит данные приходят. Если этого сообщения нет, нужно разбираться почему. Может быть у нас не установлены соединения или не совпадают скорости. Вариантов тоже может быть несколько. Затем допустим, мы обнаружили, что данные приходят, но на дисплей ничего не выводится. Может быть, по какой-то причине наше сравнение не срабатывает, то есть вот это вот условие считается ложным, при том что мы отправили ноль. Мало ли почему. Здесь я добавляю писк 3 кГц длительностью 1 секунду. То есть теперь если мы получили ноль и услышали писк, а на дисплее ничего не видим, значит у нас какая-то проблема со способом вывода данных на дисплей. Ну и, в конце концов, обратите внимание, что вся основная часть программы выполняется только в случае получения данных с компьютера. Может сложиться так, что они почему-то не получены. А вдруг у нас вообще контроллер не работает? Давайте чтоб убедиться в том, что программа хоть как-то работает, в конце loop'а добавим еще один вывод в последовательный порт, end of loop, то есть досюда программа дошла. Будем знать, что если что-то не так, то это внутри вот этой вот проверки и в Serial available. Давайте теперь посмотрим, как это работает. Я запускаю монитор порта и, например, отправляю команду «1». Мы получили аж 4 сообщения. Почему 4? Got data мы получили с связи с тем, что в буфере что-то оказалось. Затем цикл дошел до конца. Об этом мы тоже узнали. Почему же мы получили еще раз те же самые 2 сообщения. Помните, я обращал ваше внимание на вот это вот место — новая строка. На самом деле, при отправке сообщения с компьютера кроме тех символов, которые вы ввели, в конце добавляется еще один символ — символ новой строки, который мы не видим. Именно поэтомы мы получаем эти сообщения дважды. Что же будет, если я отправлю в монитор, через монитор отправлю ноль? Да, как и ожидалось, у нас происходит писк в том месте, где мы распознали, что переменная digit равна нулю. Вот таким простым способом я вам показал еще один способ применить пьезодинамик и вывод в последовательный порт для отслеживания хода программы и обнаружения возможных ошибок. Теперь если у вас что-то пошло не так, вы можете решительно обнаружить это, вместо того чтобы сидеть в растерянности.