My-library.info
Все категории

Программируем Arduino. Основы работы со скетчами - Монк Саймон

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Программируем Arduino. Основы работы со скетчами - Монк Саймон. Жанр: Программирование год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Программируем Arduino. Основы работы со скетчами
Дата добавления:
18 сентябрь 2020
Количество просмотров:
394
Читать онлайн
Программируем Arduino. Основы работы со скетчами - Монк Саймон

Программируем Arduino. Основы работы со скетчами - Монк Саймон краткое содержание

Программируем Arduino. Основы работы со скетчами - Монк Саймон - описание и краткое содержание, автор Монк Саймон, читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info

Впервые на русском языке выходит легендарный бестселлер Саймона Монка, который много лет занимает первые строчки в рейтингах Amazon. Хотите создать умный дом или запрограммировать робота? Нет ничего проще. Саймон Монк не только поможет разобраться с проволочками, контактами и датчиками, но и покажет как заставить все это хитросплетение проводов и плат делать то, что вам нужно. Arduino — это не так сложно как кажется с первого взгляда. Вы сразу будете покорены открывающимися возможностями.

 

Программируем Arduino. Основы работы со скетчами читать онлайн бесплатно

Программируем Arduino. Основы работы со скетчами - читать книгу онлайн бесплатно, автор Монк Саймон

Когда падение напряжения на контакте D2 вызовет прерывание, подпрограмма-обработчик (setFlag) просто установит флаг, который проверяется функцией loop. Не забывайте, что в подпрограммах обработки прерываний нельзя использовать функцию delay и подобные ей. Поэтому функция loop должна проверить флаг и, если он установлен, вызвать ту же функцию doSomething, которая использовалась в примере с библиотекой Narcoleptic. После выполнения операции флаг сбрасывается, и Arduino вновь переводится в энергосберегающий режим.

По величине потребляемого тока этот скетч практически совпадает с примером на основе библиотеки Narcoleptic, с той лишь разницей, что во время, когда светодиод мигает, уровень потребляемого тока в данном примере выше из-за того, что используется обычная функция delay.

Использование цифровых выходов для управления питанием

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

На рис. 5.4 изображена схема датчика освещенности на основе фоторезистора (изменяет сопротивление в зависимости от освещенности) и постоянного сопротивления, подключенных к аналоговому входу Arduino, посредством которого измеряется степень освещенности.

Проблема данной реализации в том, что через постоянное сопротивление и фоторезистор течет постоянный ток напряжением 5 В. Если при полной освещенности она имеет сопротивление 500 Ом, то согласно закону

Программируем Arduino. Основы работы со скетчами - _42.jpg

Рис. 5.4. Измерение освещенности с применением фоторезистора

Ома протекающий ток будет иметь значение I = V/R = 5 В/(1000 Ом + + 500 Ом) = 3,3 мА.

Вместо источника постоянного напряжения 5 В на плате Arduino можно использовать цифровой выход (рис. 5.5) и подавать на него уровень напряжения HIGH только в момент чтения значения с аналогового входа, а затем устанавливать на нем уровень LOW. В этом случае ток 3,3 мА будет протекать только в течение очень короткого промежутка времени, когда выполняется чтение, благодаря чему можно снизить общий уровень энергопотребления.

Это решение иллюстрирует следующий скетч:

// sketch_05_07_light_sensing

const int inputPin = A0;

const int powerPin = 12;

void setup()

Программируем Arduino. Основы работы со скетчами - _43.jpg

Рис. 5.5. Экономичная схема измерения освещенности

{

  pinMode(powerPin, OUTPUT);

  Serial.begin(9600);

}

void loop()

{

  Serial.println(takeReading());

  delay(500);

}

int takeReading()

{

  digitalWrite(powerPin, HIGH);

  delay(10); // фоторезистору требуется некоторое время

  int reading = analogRead(inputPin);

  digitalWrite(powerPin, LOW);

  return reading;

}

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

В заключение

Лучшие способы уменьшить потребление электроэнергии:

• переводить микроконтроллер в режим энергосбережения, когда не требуется выполнять никаких действий;

• использовать для питания Arduino пониженное напряжение;

• уменьшать тактовую частоту Arduino.

6. Память

Объем памяти в большинстве компьютеров исчисляется гигабайтами, но в Arduino Uno ее всего 2 Кбайт. То есть более чем в миллион раз меньше, чем в обычном компьютере. Однако ограниченный объем памяти удивительным образом способствует концентрации мысли в процессе программирования. Здесь нет места для расточительства, которым страдает большинство компьютеров.

Писать эффективный код, конечно, важно, но необязательно делать это за счет усложнения чтения и сопровождения. Даже при таких ограниченных ресурсах, как в Arduino, большинство скетчей оказываются далеки от использования всего объема оперативного запоминающего устройства (ОЗУ). Беспокоиться о нехватке памяти приходится, только когда создается действительно очень сложный скетч, использующий массу данных.

Память в Arduino

Сравнивать объем памяти в Arduino и в обычных компьютерах не совсем корректно, так как в них память ОЗУ используется для разных целей. На рис. 6.1 показано, как используется память в компьютере, когда запускается программа.

Когда компьютер запускает программу, он сначала копирует ее целиком с жесткого диска в ОЗУ, а затем запускает эту копию. Переменные в программе занимают дополнительный объем ОЗУ. Для сравнения на рис. 6.2 показано, как используется память в Arduino, когда запускается программа. Сама программа действует, находясь во флеш-памяти. Она не копируется в ОЗУ.

Программируем Arduino. Основы работы со скетчами - _44.jpg

Рис. 6.1. Как используется память в компьютере

Программируем Arduino. Основы работы со скетчами - _45.jpg

Рис. 6.2. Как используется память в Arduino

ОЗУ в Arduino используется только для хранения переменных и других данных, имеющих отношение к выполняющейся программе. ОЗУ является энергозависимой памятью, то есть после отключения питания оно очищается. Чтобы сохранить данные надолго, программа должна записать их в ЭСППЗУ. После этого скетч сможет считать данные в момент повторного запуска.

При приближении к границам возможностей Arduino придется позаботиться о рациональном использовании ОЗУ и, в меньшей степени, о размере программы внутри флеш-памяти. Так как в Arduino Uno имеется 32 Кбайт флеш-памяти, этот предел достигается нечасто.

Уменьшение используемого объема ОЗУ

Как вы уже видели, чтобы уменьшить используемый объем ОЗУ, следует уменьшить объем памяти, занимаемой переменными.

Используйте правильные структуры данных

Самым широко используемым типом данных в Arduino C, бесспорно, является тип int. Каждая переменная типа int занимает 2 байта, но часто такие переменные используются для представления чисел из намного более узкого диапазона, чем –32 768…+32 767, и нередко типа byte с его диапазоном 0…255 для них оказывается вполне достаточно. Большинство встроенных методов, принимающих аргументы типа int, с таким же успехом могут принимать однобайтовые аргументы.

Типичным примером могут служить переменные с номерами контактов. Они часто объявляются с типом int, как показано в следующем примере:

// sketch_06_01_int

int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

void setup()

{

  for (int i = 0; i < 12; i++)

  {

    pinMode(ledPins[i], OUTPUT);

    digitalWrite(ledPins[i], HIGH);

  }

}

void loop()

{

}

Массив типа int без всяких последствий можно преобразовать в массив байтов. В этом случае функции в программе будут выполняться с той же скоростью, зато массив будет занимать в два раза меньше памяти.

По-настоящему отличный способ экономии ОЗУ — объявление неизменяемых переменных константами. Для этого достаточно добавить слово const в начало объявления переменной. Зная, что значение никогда не изменится, компилятор сможет подставлять значение переменной в местах обращения к ней и тем самым экономить ОЗУ. Например, массив из предыдущего примера можно объявить так:

const byte ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

Не злоупотребляйте рекурсией

Рекурсией называется вызов функцией самой себя. Рекурсия может быть мощным инструментом выражения и решения задач. В языках функционального программирования, таких как LISP и Scheme, рекурсия используется чуть ли не повсеместно.


Монк Саймон читать все книги автора по порядку

Монк Саймон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки My-Library.Info.


Программируем Arduino. Основы работы со скетчами отзывы

Отзывы читателей о книге Программируем Arduino. Основы работы со скетчами, автор: Монк Саймон. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.