Итак, в прошлой статье мы загрузили в нашу Ардуину первую учебную программу из раздела "Образцы", которая называется "Blink". Ода выполняет простейшее действие - мигает встроенным в плату желтым диодом. Посмотрим на программу внимательней и попытаемся понять, как она это делает:

void setup() {
  // инициализируем вывод 13 как выход
  pinMode(13, OUTPUT);
}

// функция loop, которая будет исполняться до выключения питания
void loop() {
  digitalWrite(13, HIGH);   // включаем на 13 выход напряжение +5 вольт, "1".
  delay(1000);              // ждем 1000 миллисекунд (1секунду).
  digitalWrite(13, LOW);    // включаем на 13 выход напряжение 0 вольт, "0".
  delay(1000);              // ждем 1000 миллисекунд (1секунду).
}

 Видим, что исполнение программы начинается с функции void setup(). Этот раздел присутствует всегда. Он исполняется единственный раз после включения питания и производит как первоначальные настройки контроллера, так и инициализирует различные переменные и параметры. В данном случае - настраивает вывод 13 нашей Ардуины для работы как ВЫХОДА.

После настройки первоначальных параметров, контроллер переходит на исполнение функции    void loop(), где и зацикливается навсегда.. Ну, как навсегда - до выключения питания. Команды исполняются последовательно и по кругу, не прерываясь. В этом и есть особенность программирования любого контроллера - цикличность и непрерывность исполнения команд. Как только, по каким-то причинам, выполнение программы остановится - устройство перестанет работать.

Ну, далее наш скетч особых пояснений не требует - командой digitalWrite(13, HIGH); на вывод 13 подается напряжение +5 вольт, что приводит к зажиганию светодиода, затем формируется пауза в 1 секундуdelay(1000); Следующей командой digitalWrite(13, LOW); - снимаем напряжение с 13 вывода и светодиод гаснет, снова формируется пауза в 1 секунду, и программа начинает выполняться сначала. И так - до бесконечности, пока на Ардуину будет подаваться напряжение питания.

Однако, нам уже пора выходить за пределы "центрального кубика" нашего конструктора. И для того, чтобы на чем-то монтировать внешние детали и устройства, которые будем подключать к нашей Ардуине, давайте присмотримся вот к такой монтажной плате.

plata

 

Вещь очень удобная для того, чтобы не заморачиваться с пайкой при макетировании простых устройств, таких, как наши поделки на основе Ардуино. Значит, смотрите на картинку - по длинным краям макетки идут шины питания, обозначенные красными и синими линиями. Для удобства использования соединим их с помощью перемычек, соответственно, в одну шину +5 в (красные линии) и вторую - "земля", 0 в, (синие линии). Для перемычек используем любые подходящие проводники из жесткой проволоки, например, внутренние проводники из куска кабеля, используемого для локальной сети. 

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

Давайте-ка для пробы соберем вот такую схемку:

uno1

 

Что мы здесь видим? 4 светодиода и 4 резистора, сопротивлением от 50 до 150 ом, примерно. Я уже говорил, что светодиоды можно подключать только через гасящее сопротивление, иначе он моментально сгорит при подаче питания. Значит, минусовые выводы светодиодов подключены через сопротивления к минусовой шине, или - к "земле". А "плюсовые" пока что никуда не подключены.

Теперь подадим на нашу макетку питание. Откуда? Да с нашей же Ардуины:

uno2

 

Соединяем проводниками вывод "5v" Ардуины с плюсовой шиной нашей макетки и вывод "GND" с минусовой шиной, как на рисунке. 

Теперь нам осталось соединить проводниками выводы 9, 10, 11, 12 Ардуины с плюсовыми выводами наших светодиодов, как на рисунке:

uno3

 

Все! Схема готова. Теперь можно заняться программированием. Допустим, мы хотим, чтобы светодиоды переключались последовательно, с паузой 1 секунда. Открываем в Arduino IDE уже знакомый нам скетч "Blink"  и переделаем его примерно вот так:

void setup() {
  // устанавливаем нужные нам выводы как ВЫХОДЫ
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
}


void loop() {             
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);  //включаем и выключаем светодиоды в нужной нам последовательности
  delay(1000);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  delay(1000);
  digitalWrite(11, LOW);
  digitalWrite(12, HIGH);
  delay(1000);
  digitalWrite(12, LOW);
  digitalWrite(9, HIGH);
  delay(1000);
}

 Тут же вгружаем получившийся скетч в Ардуину уже известным нам способом - и вуаля! Наслаждаемся поочередно загорающимися светодиодами и чувствуем себя крутыми программистами микроконтроллеров.

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

Так же как и мы вот так просто пользуемся трудом тысяч и десятков тысяч программистов, которые придумали для нас Ардуину и продолжают ее развивать и совершенствовать.

 Предыдущая статья                                        Продолжение следует

Добавить комментарий