Изменения

Перейти к: навигация, поиск

Arduino

44 байта добавлено, 21:58, 28 августа 2021
Arduino Nano 168p
= Прерывания Ручная установка Arduino IDE на GNU/Linux =ДопустимБольшинство популярных дистрибутивов GNU/Linux (Ubuntu, ALT Linux, ...) содержат пакет Arduino в репозитории, который ставится средствами пакетного менеджера. Однако версия в репозитории как правило не самая свежая, поэтому здесь мы сделали "бегущий огонь" и теперь хотим прикрутить кнопку для управления режимом светодиодов: рассмотрим установку в ручном режиме под 64-битную систему.
<pre>const int LED_MIN = 22;const int LED_MAX = 30;const int DELAY = 100;Переходим по ссылке: https://www.arduino.cc/en/software/
void setupСкачиваем последнюю стабильную версию Arduino IDE () { for (int pin = LED_MIN; pin файл называется примерно так: <code>arduino-1.8.15-linux64.tar.xz<= LED_MAX; ++pin) pinMode(pin, OUTPUT/code>);}
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>
Самым прямолинейным решениемЧтобы всё было красиво, на первый взгляд, является считывание значение кнопки в начале создаём симлинк:<codepre>loop$ ln -s arduino-1.8.15 arduino</codepre>. К примеру:
Запускаем установщик:
<pre>
const int BUTTON = 31;$ cd arduino$ ./install.sh</pre>
Не забываем добавить вашего пользователя в группу <code>dialout</code>, иначе система вам не даст прав для доступа к устройству в <code>/dev</ code>... пропущена часть кода из предыдущей программы ... boolean isEnabled = false; Допустим, имя пользователя -- <code>avp</code>:void loop() { if (digitalRead(BUTTON)) isEnabled = ! isEnabled;  if (isEnabled) { for (int pin = LED_MIN; pin <= LED_MAX; pin++) blink(pin); }pre>}$ usermod -a -G dialout avp
</pre>
Собираем схемуПосле добавления пользователя в группу надо перезайти под этим пользователем в систему, добавляем считывание значения с цифрового порта и логику переключения режимов. Всё бы хорошоили же перезагрузить компьютер, но наше кратковременное нажатие на кнопку обычно приводит к многократному считыванию значения: за время, пока нажата кнопка, <code>loop</code> успевает отработать несколько раз; как следствие, логика не работает, как должначтобы новые права вступили в силу.
Плюс, добавляя кнопку в наш проект, мы добавляем в наш проект неопределённость = Общая информация =* Методичка/Книга [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/microcontroller-tutorial-avr-and-arduino-timer-interrupts/ Microcontroller tutorial series: AVR and Arduino timer interrupts] (англ.)
* [[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).
[[Категория:База знаний]]

Навигация