Amateur Radio Station R9AL

      Вы уже знаете, что выводы платформы Arduino - пины (pin), это конкретные выводы микроконтроллера, к которым можно обратиться и которые могут работать как входы или как выходы. Мы уже использовали их как выходы, настало время поработать с ними как с входами. И начнем, по традиции, с цифровых входов.

Чтобы назначить вывод входом, используется уже известная вам функция:

pinMode(pin, mode)

где pin - это номер вывода, а mode - режим, который может принимать одно из двух значений: INPUT - режим вход или OUTPUT - режим выход.

Для первого эксперимента нам потребуется кнопка:

Кнопки с 4 контактами стоит рассматривать, как 2 пары рельс, которые соединяются при нажатии.

Есть несколько способов подключения кнопки, самый простой - просто просто подключить кнопку между выводом и общим проводом или проводом питания, строго говоря не правильный, так как пока кнопка не нажата вывод контроллера как бы висит в воздухе, а значит на нем могут наводиться различные помехи. Чтобы этого избежать, применяют "подтягивающие" резисторы, которые, когда кнопка не нажата, подтягивают вывод к плюсу питания или общему проводу, формирую на выводе уровень логической единицы или логического нуля.

Первый способ (подтягивание вывода к общему проводу, когда кнопка не нажата на выводе логический ноль):


Второй способ (подтягивание вывода к плюсу питания, когда кнопка не нажата на выводе логическая единица):
На самом деле, mode может принимать еще одно значение: INPUT_PULLUP - подтянутый к питанию вход. Режим INPUT_PULLUP позволяет подключить к выводу встроенный в микроконтроллер резистор, подтягивающий вывод к питанию. Но дело в том, что не все контроллеры имеют такой резистор, да и Tinkercad такой режим тоже не понимает, поэтому лучше все-таки использовать подтягивающие резисторы.

Для экспериментов соберем следующую схему:



Будем выводить значение, которое формируется на входе D8, в монитор порта:

int btn;
                        // Объявление переменной btn
void setup(){
  Serial.begin(9600);   // Открываем монитор порта
  pinMode(8, INPUT);    // Программируем вывод D8 как вход
}
 
void loop() {
  btn = digitalRead(8); // Присваиваем переменной btn значение вывода D8
  Serial.println(btn);  // Выводим переменную btn в монитор порта
}
Эту программу можно записать короче:
void setup(){
  Serial.begin(9600);
  pinMode(8, INPUT);
}
 
void loop() {
  Serial.println(digitalRead(8)); 
}
Нажимая кнопку, в мониторе мы увидим, что если кнопка не нажата - в монитор выводится единица, если нажата - ноль.

Здесь функция digitalRead(8); считывает состояние вывода D8.





Массив символов string() и класс String()



Любой символ является переменной типа char, которая хранит в себе код этого символа, согласно таблице символов. отдельные символы вогут соединяться в строки, для работы с которыми есть два набора инструментов: обычные строки (массивы символов) и String-строки. Обратите внимание при обращение к классу String - он пишется с заглавной S. Массив символов string - с прописной s.

Массив символов - это просто массив данных типа char. Любой текст, заключенный в "двойные кавычки" воспринимается программой как массив символов, а размер строки должен быть известен заранее.

String-строка - это динамический массив, размер которого указывать не нужно, более того, размер может меняться в процессе работы программы. Класс String появился в версии Arduino 0019 и это довольно мощный инструмент работы со строками, такие как поиск вхождения в строку, объединение строк и др. Но это и очень "тяжелый" инструмент для контроллера, занимающий достаточно большой объем памяти, поэтому очень аккуратно надо работать с этим инструментом, особенно, если проект достаточно большой.





Copyright © R9AL 2021 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования