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



бет44/45
Дата13.02.2023
өлшемі1,82 Mb.
#67503
түріЗакон
1   ...   37   38   39   40   41   42   43   44   45

Пояснения к коду


  • Код нашей обычной программы исполняется инструкция за инструкцией и если мы, например, проверяем состояние датчика, мы к нему обратимся только в те моменты, когда очередь дойдет до соответствующей инструкции. Однако мы можем использовать прерывания:

    • по наступлении определенного события

    • на определенном порту ход программы будет приостанавливаться для выполнения

    • определенной функции, а затем программа продолжит исполняться с того места, где была приостановлена.

  • Arduino Uno позволяет делать прерывания на портах 2 и 3.

  • В setup() прописывается инструкция attachInterrupt(interrupt, action, event), где

    • interrupt может принимать значения INT0 или INT1 для портов 2 и 3 соответственно

    • action — имя функции, которая будет вызываться при наступлении события

    • event — событие, которое мы отслеживаем. Может принимать значение RISING (изменение от низкого уровня сигнала к высокому, от 0 к 1), FALLING (от высокого уровня к низкому, от 1 к 0),CHANGE (от 0 к 1 или от 1 к 0), LOW (при низком уровне сигнала).

  • Глобальные переменные, к которым мы обращаемся из функции, обрабатывающей прерывания, должны объявляться с использованием ключевого слова volatile, как в данном экспериментеvolatile int score = 0.

  • Внутри функции, вызываемой по прерыванию, нельзя использовать delay().

  • Функция abs(value) возвращает абсолютное значение value (значение по модулю). Обратите внимание, что функция может сработать некорректно, если передавать ей выражение, которое еще не вычислено, например abs(++a), лучше передавать ей просто переменную.

  • Функция min(val1, val2) вернет меньшее из val1 и val2.

  • Функция max(val1, val2) вернет большее из val1 и val2.

  • В данном эксперименте мы вычисляем значение, которое записывается на светодиоды, прямо вdigitalWrite()

  • Мы уже знакомы с логическим «и» (&&). Нередко нужен оператор «логическое «или»: ||. Он возвращает «истину», если хотя бы один из операндов имеет значение «истина». false || falseвернет false, а true || truetrue || false и false || true вернут true.

  • Мы использовали while(true){} для того, чтобы loop() остановился после того, как кто-то выиграл: у while всегда истинное условие и он бесконечно ничего не выполняет!


Достарыңызбен бөлісу:
1   ...   37   38   39   40   41   42   43   44   45




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

    Басты бет