Arduino — различия между версиями

Материал из CADR
Перейти к: навигация, поиск
(Прерывания: Дополнил)
(Arduino Nano 168p)
 
(не показано 9 промежуточных версий этого же участника)
Строка 1: Строка 1:
= Прерывания =
+
= Ручная установка Arduino IDE на GNU/Linux =
Допустим, мы сделали "бегущий огонь" и теперь хотим прикрутить кнопку для управления режимом светодиодов:
+
Большинство популярных дистрибутивов GNU/Linux (Ubuntu, ALT Linux, ...) содержат пакет Arduino в репозитории, который ставится средствами пакетного менеджера.  Однако версия в репозитории как правило не самая свежая, поэтому здесь мы рассмотрим установку в ручном режиме под 64-битную систему.
  
<pre>
+
Переходим по ссылке: https://www.arduino.cc/en/software/
const int LED_MIN = 22;
 
const int LED_MAX = 30;
 
const int DELAY  = 100;
 
  
void setup() {
+
Скачиваем последнюю стабильную версию Arduino IDE (файл называется примерно так: <code>arduino-1.8.15-linux64.tar.xz</code>)
  for (int pin = LED_MIN; pin <= LED_MAX; ++pin)
 
    pinMode(pin, OUTPUT);
 
}
 
  
void blink(int pin) {
+
Перемещаем архив в <code>/opt</code>:
  digitalWrite(pin, HIGH);
+
<pre>
  delay(DELAY);
+
$ sudo su -
  digitalWrite(pin, LOW);
+
$ mv ~/Downloads/arduino-1.8.15-linux64.tar.xz /opt
  delay(DELAY);
+
</pre>
}
 
  
void loop() {
+
Распаковываем архив:
  for (int pin = LED_MIN; pin <= LED_MAX; ++pin)
+
<pre>
    blink(pin);
+
$ cd /opt
}
+
$ tar -Jxf arduino-1.8.15-linux64.tar.xz
 
</pre>
 
</pre>
  
Самым прямолинейным решением, на первый взгляд, является считывание значение кнопки в начале <code>loop</code>.  К примеру:
+
Чтобы всё было красиво, создаём симлинк:
 +
<pre>
 +
$ ln -s arduino-1.8.15 arduino
 +
<pre>
  
 +
Запускаем установщик:
 
<pre>
 
<pre>
const int BUTTON  = 31;
+
$ cd arduino
 +
$ ./install.sh
 +
</pre>
  
// ... пропущена часть кода из предыдущей программы ...
+
Не забываем добавить вашего пользователя в группу <code>dialout</code>, иначе система вам не даст прав для доступа к устройству в <code>/dev</code>. Допустим, имя пользователя -- <code>avp</code>:
 
+
<pre>
boolean isEnabled = false;
+
$ usermod -a -G dialout avp
 
 
void loop() {
 
  if (digitalRead(BUTTON)) {
 
    isEnabled = ! isEnabled;
 
  }
 
 
 
  if (isEnabled) {
 
    isEnabled = true;
 
    for (int pin = LED_MIN; pin <= LED_MAX; pin++)
 
      blink(pin);
 
  }
 
}
 
 
</pre>
 
</pre>
  
Собираем схему, добавляем считывание значения с цифрового порта и логику переключения режимов.  Всё бы хорошо, но наше кратковременное нажатие на кнопку обычно приводит к многократному считыванию значения: за время, пока нажата кнопка, <code>loop</code> успевает отработать несколько раз; как следствие, логика не работает, как должна.
+
После добавления пользователя в группу надо перезайти под этим пользователем в систему, или же перезагрузить компьютер, чтобы новые права вступили в силу.
  
Плюс, добавляя кнопку в наш проект, мы добавляем в наш проект неопределённость -- нажатие на кнопку может возникнуть в любой момент; в таких случаях говорят, что событие возникает асинхронно (по отношению к нашей программе.)  Если нажатие на кнопку возникло в тот момент, когда Arduino "не смотрела" на значение на порту и занималась другим делами, то событие пройдёт незамеченным. Если же всё делать по-нормальному, то мы должны обрабатывать это событие в тот момент, как оно возникла.
+
= Общая информация =
 +
* Методичка/Книга [https://docs.google.com/document/d/1bDCyNURCL4vtBt96BZDe56C4fJJWLA7_b3P4lXrUvzY/edit "Разработка микропроцессорных систем"]
 +
* [http://forum.arduino.cc/index.php?topic=73748.0 Loop-Back Test] -- описание одного из методов тестирования МК.
 +
* [https://cdn.solarbotics.com/products/documentation/ardx-eg-sola-russian.pdf Руководство по освоению Arduino] (на русском языке)
 +
* Brian W. Evans, [http://playground.arduino.cc/uploads/Main/arduino_notebook_v1-1.pdf arduino programming notebook] (на анлийском языке)
  
Для правильного решения данной задачи необходимо использовать прерывания.
+
= Прерывания =
 
 
== Реакция на внешние события ==
 
Для обработки внешнего асинхронного события нам потребуются как минимум две вещи:
 
* Написать обработчик события
 
* Связать обработчик с внешним событием
 
 
 
TODO
 
 
 
== Прерывания по таймеру ==
 
TODO
 
 
 
== См. также ==
 
 
* [http://www.engblaze.com/we-interrupt-this-program-to-bring-you-a-tutorial-on-arduino-interrupts/ We interrupt this program to bring you an Arduino interrupt tutorial] (англ.)
 
* [http://www.engblaze.com/we-interrupt-this-program-to-bring-you-a-tutorial-on-arduino-interrupts/ We interrupt this program to bring you an Arduino interrupt tutorial] (англ.)
 
* [http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/ Microcontroller tutorial series: AVR and Arduino timer interrupts] (англ.)
 
* [http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/ Microcontroller tutorial series: AVR and Arduino timer interrupts] (англ.)
 +
 +
= Работа с программатором =
 +
* Vcc2GND, [http://www.instructables.com/id/Uploading-Sketch-to-Arduino-Pro-Mini-using-usbASP/ "Uploading Sketch to Arduino Pro Mini using usbASP"]
  
 
= Подключение оборудования =
 
= Подключение оборудования =
 
* [[Arduino/MT-16S2H|ЖК-дисплей МЭЛТ MT-16S2H]]
 
* [[Arduino/MT-16S2H|ЖК-дисплей МЭЛТ MT-16S2H]]
 +
* [[Arduino/RotaryDial|Дисковый номеронабиратель]]
 +
 +
= Arduino Nano 168p =
 +
Специфика работы с Arduino Nano на базе микроконтроллера [[маркировка::MEGA 168PA]].
 +
* http://playground.arduino.cc/Bootloader/ArduinoBootloader168P
 +
 +
Судя по отзывам на AliExpress, некоторые Arduino на базе МК 168pa поставляются без загрузчика.  Необходимо прошить сначала загрузчик через USBasp, потом уже использовать обычное подключение по USB (встроенный USB-UART).
  
 
[[Категория:База знаний]]
 
[[Категория:База знаний]]

Текущая версия на 21:58, 28 августа 2021

Ручная установка Arduino IDE на GNU/Linux

Большинство популярных дистрибутивов GNU/Linux (Ubuntu, ALT Linux, ...) содержат пакет Arduino в репозитории, который ставится средствами пакетного менеджера. Однако версия в репозитории как правило не самая свежая, поэтому здесь мы рассмотрим установку в ручном режиме под 64-битную систему.

Переходим по ссылке: https://www.arduino.cc/en/software/

Скачиваем последнюю стабильную версию Arduino IDE (файл называется примерно так: arduino-1.8.15-linux64.tar.xz)

Перемещаем архив в /opt:

$ sudo su -
$ mv ~/Downloads/arduino-1.8.15-linux64.tar.xz /opt

Распаковываем архив:

$ cd /opt
$ tar -Jxf arduino-1.8.15-linux64.tar.xz

Чтобы всё было красиво, создаём симлинк:

$ ln -s arduino-1.8.15 arduino
<pre>

Запускаем установщик:
<pre>
$ cd arduino
$ ./install.sh

Не забываем добавить вашего пользователя в группу dialout, иначе система вам не даст прав для доступа к устройству в /dev. Допустим, имя пользователя -- avp:

$ usermod -a -G dialout avp

После добавления пользователя в группу надо перезайти под этим пользователем в систему, или же перезагрузить компьютер, чтобы новые права вступили в силу.

Общая информация

Прерывания

Работа с программатором

Подключение оборудования

Arduino Nano 168p

Специфика работы с Arduino Nano на базе микроконтроллера MEGA 168PA.

Судя по отзывам на AliExpress, некоторые Arduino на базе МК 168pa поставляются без загрузчика. Необходимо прошить сначала загрузчик через USBasp, потом уже использовать обычное подключение по USB (встроенный USB-UART).