App inventor программы на переливание воды. App Inventor — среда визуальной разработки android-приложений


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

Любую операцию можно поместить либо в блок обработки события, либо в блок процедуры. Расположение операции в блоке обработки события характеризуется простой, но в будущем это может привести ко многим проблемам, в отличие от использования её в процедуре, что позволят получить гибкий алгоритм. Рассмотрим это на примере простой операции присваивания глобальной переменной пустого списка, состоящей из двух блоков (рис. 1).

Рис. 1. Варианты расположения операции.

При размещении операции в блоке обработки события компонента (верхний вариант), она жестко привязывается к нему и становится недоступной для вызова из других блоков. Если эту операцию нужно вызвать из другого блока, то её придётся скопировать. Создавать копии операции нежелательно, потому что при изменении её алгоритма придётся вносить правку в каждую из них. Это повышает вероятность появления разных ошибок: можно забыть исправить какую-то копию, ошибиться при копировании блоков, вставке их и т.п. Размещение операции в блоке процедуры позволит вызывать её из других блоков и избежать описанных выше ошибок.

При работе в редакторе блоков иногда возникает необходимость вызова разных версий одной операции или разных операций. Для этого можно либо создать новые компоненты с новыми блоками обработки событий, либо использовать один существующий блок btnExecute, помещая в него вызов той или иной операции. В результате замены, отсоединённые операции превратятся в “плавающие” блоки (рис. 2), которые не принадлежат никакому групповому блоку.

Рис. 2. "Плавающие" блоки.

Если на рабочем поле таких плавающих блоков много, то разобраться с ними может будет непросто. Если с нижним блоком всё понятно - это блок вызова процедуры, то что делает сцепка блоков в верхней части рисунка? Это отдельная операция или действие, которое входит или входило в какую-то другую операцию? Но тогда где остальная часть этой операции? Добавление операции в блок процедуры позволит избавиться от непонятных “плавающих” блоков.

Для выполнения блока не обязательно помещать его в обработчик события. Можно нажать правой кнопкой мыши на нём и в появившемся контекстном меню выбрать опцию Do it.

Ещё один недостаток размещения операции в обработчике события связан с тем, что при случайном удалении компонента в дизайнере произойдёт удаление не только всех блоков, которые относятся к этому компоненту, но и всех вложенных в них блоков. Особенно досадно будет в том случае, если операция состояла из большого числа блоков (рис. 3). Если удалить компонент btnTest, то произойдёт удаление блока btnTest.Click со всем его содержимым.

Рис. 3. Нежелательная группировка блоков в обработчике события.

Какую операцию выполняют блоки на этом рисунке? Сразу ответить трудно. А при помещении их в отдельную процедуру всё сразу станет понятно из её названия setVarValue - задаёт значение переменной (рис. 4).

Рис. 4. Группировка боков в процедуре.

Блоки процедур и локальных переменных имеют настройку, доступную при щелчке по пиктограмме шестерёнки. Для блоков процедур она заключается в добавлении им входных параметров, а для блоков локальных переменных к созданию дополнительных входов. Это позволит четыре блока переменных превратить в один блок с четырьмя переменными (рис. 4). Является ли такое преобразование эквивалентным? Нет. Блок с несколькими локальными переменными имеет одну область видимости, что не позволяет внутри него получать значения его переменных. Например, невозможно переменной value (рис. 4) присвоить значение переменной key.

Перечислим обнаруженные нами недостатки размещения операции в блоке обработки события:

  • Жёсткая привязка к блоку события определённого типа выбранного компонента
  • Невозможно вызова операции из других блоков (значит, она не может стать библиотечной)
  • Удаление операции при удалении компонента
  • Образование непонятных “плавающих” групп блоков
  • Сложно быстро понять то, что делает операция

Избавиться от всех этих недостатков очень просто, если все операции помещать в процедуры.

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

Одна функция (процедура) - одна операция

Это правило взято из жизненной практики. Представьте, что вы включаете свет в комнате, а при этом происходит включение телевизора, кондиционера и выключение компьютера. Понравится ли вам это? Нет, потому что это приведёт к путанице и неприятным ситуациям.
На рис. 4 в начале блока происходит вызов четырёх процедур - getKey (получить ключ), getNewVal (получить новое значение), getKeys (получить список ключей) и getIndex (получить индекс). Каждая из этих процедур выполняют одну операцию. После них идёт блок if, в котором происходит выполнение одной операции процедуры setVarValue1.
Можно ли в процедурах вместо локальных переменных использовать глобальные? Можно, но так делать не следует. Использование глобальных переменных внутри процедуры, во-первых, жёстко привязывает её к ним и, соответственно, к данному приложению, а, во-вторых, при помощи глобальных переменных внешние блоки из разных мест приложения могут оказывать влияние на внутренний механизм работы процедуры, что весьма нежелательно. Что может случиться, если пассажиры автобуса будут иметь доступ к его механизму?

Локальные переменные являются своего рода буфером. Если изменится имя глобальной переменной, то это не нарушит работу процедуры, потому что внутри неё используются имена локальных переменных, которые не менялись. В App Inventor при изменении имени глобальной переменной оно автоматически изменится во всех использующих его блоках. Отсюда следует важный вывод о том, что существующая в App Inventor автоматизация по проверке корректности типов переменных, переименованию переменных и и др., с одной стороны, упрощает разработку приложений, освобождая разработчика от размышления над этими вопросами, а, с другой стороны, способствует развитию навыка небрежного составления алгоритмов. Вообще говоря, данный навык может развиться при программировании на любом языке. Как этого избежать? Использовать рекомендации по созданию “чистого кода”, о чём написано немало книг. В MIT App Inventor получится использовать лишь малую долю этих рекомендаций, но следование им позволит улучшить алгоритмы и их читаемость при любом способе их создания - на листе бумаги, доске, при редактировании кода или работе с блоками.

Указанное выше правило следует использовать и в случае использования блоков обработки событий. На рис. 4 обработчик события Click производит только одну операцию - вызывает процедуру. А если из обработчика событий нужно вызвать несколько процедур? Тогда нужно понять, эта группа процедур выполняет одну или несколько операций? Если одну, то всё в порядке. Например, при инициализации приложения вызывается много процедур, но все они объединены одной операцией - инициализации.

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

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

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

Для исключения переименования глобальных переменных и нарушения работы библиотечных процедур при копировании их из рюкзака на экран приложения, который может иметь глобальные переменные с такими же именами, необходимо имена библиотечных блоков заранее составлять с префиксами, указывающих на библиотеку. Если библиотека для работы со списком пар имеет название libPairs. Тогда можно переменные, процедуры и компоненты в ней назвать так: libPairs_name, libPairs_setValue, libPairs_btnExecute.

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

Помнится, в одной из статей по App Inventor я писал, что была попытка его русификации, но мне она не очень понравилась. Уже и не упомню почему. А русификация из App Inventor2, тем временем, пропала.
Но мир не стоит на месте и вот опять у нас есть Апп Инвентор на русском языке. Это случилось благодаря усилиям энтузиастов из сообщества «Учимся с Google» . Дальше я постараюсь разобраться в том, что получилось, а сейчас, для начала, аплодисменты энтузиастам! Ну, просто потому, что получилось весьма неплохо, на мой взгляд, и работа, всяко, нужная.

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

Теперь, что понравилось:
Грамотный и приятный перевод на русский язык различных менюшек на рабочих столах «Дизайнер» и «Блоки»

Это сразу позволит не потеряться человеку далекому от программирования и английского языка. Я и сам далек от первого, и лишь чуть ближе ко второму, поэтому нравится, черт возьми! Хотя уже и привык к английскому интерфейсу.
Нажимаем вопросик рядом в меню «Палитра» и что видим?

Ба! Да это маленькая подсказка, так же переведенная на наш, великий и могучий. Тоже здорово! Если с такой штукой, как кнопка, я разобрался, не прибегая к словарю, то, например, чтобы разобраться со спрайтами, мне пришлось почесать затылок. А тут все на блюдечке.
Идем дальше и смотрим блоки. И тут полное благолепие и русификация.

Признаюсь честно, что вроде бы разобрался с AI (ну, хорошо, только с его частью), но некоторые блоки заставляют напрягаться, так как, опять же, английский мой, увы, хромает. Так что App Inventor на русском и тут в помощь.
Еще есть в App Inventor указатель ошибок. И его ребята не обошли стороной.

В общем, повторюсь, русификация мне понравилась.
Есть, конечно, маленькие косячки: например, пропущены некоторые слова в «Свойствах» компонентов.

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

Теперь о том, перейду ли я лично на русифицированную версию. Скорее, нет, и вот почему: подавляющее большинство языков программирования используют именно английский язык. Отсюда вывод – тот, кто хочет продвинутся дальше в изучении программирования, должен работать с языком оригинала. А я хочу.

И следующий довод: в процессе разбирательства с AI я поднял свой уровень английского. А это тоже весьма полезно.
Но! Я все равно буду обращаться к русскоязычному App Inventor, так как не все и не всегда понятно. И более того, не всегда есть время и желание учить иностранный язык, если надо написать себе, скажем, приложение-будильник с собственными фичами. И тут Апп Инвентор на русском поможет. А если вы хотите обучить созданию мобильных приложений детишек, которые только начали изучать английский? Да на англоязычном AI вы им только головы заморочите. Ведь вспомните, что эта штуковина и создавалась для обучения.
Так что, проделанный труд заслуживает всяческого внимания и уважения. И, вне всякого сомнения, использования.
Еще неплохо бы ребятам было создать полный русский учебни… Стоп! Стоп! А что тогда буду делать я?

MIT App Inventor 2 - среда визуальной разработки, позволяющая легко создать приложение для android устройств даже не обладая знаниями в области программирования.
Работает эта среда разработки прямо из браузера. Скачивать и устанавливать ничего не нужно. Полученный результат можно просматривать на android-устройстве. Готовые приложения можно размещать в Play Market. App Inventor 2 поддерживает русский язык.
Сразу, при старте, появляется возможность создать свое уникальное приложение, например приложение которое может управлять другими bluetooth-устройствами (Простая Bluetooth машинка на Arduino), ну или игру на смартфон.
В онлайн редакторе MIT App Inventor 2 приложения строятся на базе стандартных компонентов, которые являются основным элементом разработки Android-приложений. В интернете приведено много примеров как использовать комбинацию блоков, компонентов чтобы получилось то приложение которую мы хотим сделать.

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

  • palette (палитра) - область где показаны доступные компоненты. Палитра разделена на секции.
  • viewer (просмотр) - область куда добавляются компоненты и где вы работаете с ними. В этой области можно посмотреть как ваше приложение будет выглядеть на вашем смартфоне.
  • components (компоненты) - область где показываются используемые компоненты. Компоненты в этой области можно переименовывать или удалять, также удобна для их редактирования с помощью области Properties.
  • media (медиа) -область куда загружаются используемые картинки и аудио.
  • properties (свойства) - область где редактируются свойства компонентов: цвет, размер текста, шрифт, и прочее.

Окно редактора блоков
В этом окне мы настраиваем поведение нашего смартфона при воздействии на него каких либо внешних факторов. Например при нажатии на клавишу на экране смартфона подается сигнал приветствия или при изменении состояния датчиков (акселерометра, датчика приближения и т.п.) гаснет экран смартфона для экономии энергии аккумуляторной батареи.

Погодная станция в MIT App Inventor 2 – приложение погодной станции для android телефонов созданное с помощью онлайн сервиса .

Даная погодная станция описана в статье , где мы делали обзор работы погодной станции, создавали скетч для arduino и устройство погодной станции. Ну а сегодня мы разберемся более подробно как создать приложение для android и отобразить все получаемые данные с нашей погодной станции на телефоне.

Для создания приложения погодная станция в MIT App Inventor 2 на потребуются:

1. Фоновое изображение размером 540х960 пикселей (размер фонового изображения зависит от размера экрана вашего устройства)

2. Иконка приложения для главного экрана 128х128 пикселей (в формате PNG32)

3. Иконки кнопок в приложении в двух цветах, размером 80х80 пикселей

Когда мы подготовили все необходимые изображения для приложения, можно приступать к работе в MIT App Inventor 2. Для начала нам потребуются такие компоненты:

  • ListPicker1 – для запуска Bluetooth подключения, выбора доступных Bluetooth устройств и режима отображения состояния подключения
  • Label3 – резервная, для отображения дополнительной информации (временно не работает, можно не добавлять)
  • Label1 – для отображения полученных данных с arduino
  • Label2 – для отображения надписи (температура в комнате, температура на улице, давления и т.д.)
  • HorizontalArrangement1 – режим выравнивания элементов по горизонтали, в нашем случаи кнопок переключения режимов)
  • Button1 – кнопка включения режима “температура на улице”
  • Button2 – кнопка включения режима “температура в комнате”
  • Button3 – кнопка включения режима “давление в мм.рт.ст.”
  • Button4 – кнопка включения режима “влажность в %”
  • Button5 – кнопка отключения (невидимая)
  • Clock1 – таймер
  • BluetoothClient1 – компонент для работы с Bluetooth (получение и отправка данных)

Теперь перейдем в режим блочного программирования в MIT App Inventor 2 Для начала пропишем функционал для ListPicker

потом для таймера

для получения данных через bluetooth

для кнопок 1-4

для кнопки отключения

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

In this post I’m going to introduce you to the MIT App Inventor 2 software and I’m going to show you what you need to quickly getting started building Android apps that interact and control your Arduino.

Here’s the contents that are going to be covered in this post:

  • Why MIT App Inventor 2 is a good choice?
  • Accessing MIT App Inventor 2
  • How to control Arduino with MIT App Inventor (Bluetooth)
  • MIT App Inventor Overview
  • Projects with MIT App Inventor
  • Android Apps for Arduino with MIT App Inventor 2

Introducing MIT App Inventor 2

MIT App Inventor 2 is a simple and intuitive free service for creating Android applications. If you want to start with MIT App Inventor, you don’t need to download or install any program in your computer as the software is cloud-based, so you build the apps directly in your browser (Chrome, Mozilla, Safari, Internet Explorer, etc).

For instance, you only need an internet connection for building the apps.

Why MIT App Inventor is a good choice?

  • MIT App Inventor 2 is intuitive and simple to use.
  • You don’t have to be an expert in programming or design to build awesome apps that can do useful stuff.
  • Creating the design is as easy as selecting and placing widgets in the smartphone screen.
  • The code is done with drag and drop puzzle blocks.

Anyone can learn how to build their own apps with MIT App Inventor 2 with a few hours of practice.

Accessing MIT App Inventor 2

The most common Bluetooth modules used with the Arduino are the HC‑05 bluetooth, HC-04 and HC-06.

For more information about the bluetooth module, you can check this blog post:

The Bluetooth module works with serial data. This means that the Arduino sends information and the Bluetooth module receives it via serial (and vice-versa).

The following figure explains how the information flows from the Android app to the Arduino.

Your smartphone sends information to the Bluetooth module via Bluetooth. Then, the Bluetooth module sends the information via serial communication to the Arduino. This flow also works the other way around: the Arduino sends information to the Bluetooth module that sends it to the smartphone via Bluetooth.

MIT App Inventor Overview

This is a step-by-step course to get you building cool Android applications for Arduino, even with no prior experience! A collection of 8 + 1 Projects.

I hope you’ve found this post useful.