LABA 120 - проект MIT app inventor 2 часы с боем и будильником
LABA 120 - Главная ALT
куда применить старый андроид телефон который жалко выбросить? Зальем на него полезный софт и превратим в полезный девайс
Создадим приложение для андроид, в MIT App Inventor 2, которое будет выводить
на экран текущее время, дату, день недели
Так же аппарат будет показывать состояние батареи
процент зарядки, температуру батареи и тип подключенного
зарядного устройства. И еще осталось место на экране
В дальнейшем можно прикрутить метеостанцию например
Часы отбивают каждый час столько ударов,сколько они показывают часов,
а каждые полчаса один удар. Еще в программе можно установить будильник
Видео на ютубе демонстрирует бой часов и будильник
дизайн экрана оформим в палитре старых жидкокристаллических часов
разделение экрана на участки построено на элементах
из вкладки Layout,
черные полосы это HorizontalArrangement
с черным фоном и шириной 5 пикселей для вертикальной полосы
или высотой 5 пикселей для горизонтальной полосы
размер шрифта времени и даты вычисляется в зависимости
от ширины экрана андроид устройства. И в теории
должно нормально вписываться в разные размеры телефонов
разные значки пришлось скачивать из интернета и дорабатывать
в редакторе, заменить фон на цвет фона нашего экрана
(Custom... #aec1a4ff ) цвет фона реального LCD
и сжимать до размера примерно 45 х 45 пикселей
в MIT app inventor 2 изображения можно натягивать на кнопки
и использовать по назначению , но в данном проекте
пиктограммы загружены в элементы Image
в которых как и в кнопках имеются обработчики событий
OnClick
На экране разместились
икона этого сайта Число месяц год день недели
Часы минуты секунды индикатор установленного будильника , время будильника
Чек-боксы
Икона установки времени будильника
Икона включения будильника
Открывает окно настроек
Играет мелодию монтаны
Демо - ускоряет время для оценки боя часов
Бой - разрешает отбивать часы
разрешение экрана аппарата, почему то в релизе
Built: January 20 2022 Version: nb188a
Use Companion: 2.62 or 2.62u
Target Android SDK: 30 (Android 11.0)
ширина с высотой перепутаны
Операционная система аппарата
версия ОС
индикатор заряда батареи , значение в процентах
По мере зарядки разрядки меняется значек батареи, от полной до пустой
Тип подключенной зарядки
Температура батареи телефона, если поддерживается в вашей модели
окно настроек
Чек-боксы кнопка сохранить
ни чего полезного, остатки от грандиозных планов
Non-visible components
в среде программирования mit app inventor 2,
внизу сразу под визуальным редактором
экрана телефона, расположились невидимые компоненты
Clock1
* Clockie1
* TaifunAlarm1
* AppyKeepScreenOn1
TinyDB1
Clock2
Player1
* TaifunBattery1
все они разной степени учавствуют в работе программы
помеченые * не являются встроенными обьектами
мит апп инвентор 2, и их придется подгружать в проект
Размещаться они будут во вкладке Extension
в этом проекте все они уже прогружены
Блоки
начнем с переменных
Вообще тема переменных в мит апп инвентор 2
сама по себе очень увлекательна и достойна отдельной статьи
здесь ограничимся только нужными
Global h и Global m используются для хранения
часов и минут установленного будильника, компонентом
TimePicker и здесь не сильно нужны, так как
для этого можно было использовать свойства самого
TimePicker -
TimePicker.Hour
TimePicker.Minute
Global hh
Global mm
Global ss
применяются в режиме демонстрации боя часов
В этом режиме время сильно ускоряется
и минуты идут со скоростью секунд
Global boy
служит счетчиком при отбивании часов
Global rotate
применяется для счетчика угла вращения
шестеренки, значка настройка
Global Melody
работает триггером для пуска
и остановки проигрывания мелодии от
старых часов Монтана
События
Событие Screen.Initialize
возникает при запуске приложенияздесь обычно выполняются начальные настройки программы
Screen.TitleVisible=False убираем заголовок окна программы
Вызываем функцию Read в которой считываются
настройки пользователя, из хранилища телефона
AppyKeepScreenOn,KeepScreenOn=True
здесь Extension AppyKeepScreenOn велит программе
не гасить экран, и не уходить в спящий режим
затем расширение Clockie
методом Clockie.AddToView.View=Frame_AnalogClock
добавляет на невидимый фрейм аналоговые часы
которые используются здесь для пасхалки
Frame_setup.Visible=false делается невидимым
Здесь получается разрешение экрана и заносится в метку
Label_ScreenSize.Text
в мит апп инвентор 2 , блоки Label
поддерживают HTML разметку , поэтому тегом
<br> мы можем сделать вывод многострочным
таким же способом в метку Label_OsInfo.Text
записываем версию операционной системы телефона
Устанавливает размер шрифта метки
Label_Date.FontSize.To = Screen.Width/25
то есть ширина экрана в пикселях делим на 25
и далее похожими способами устанавливаем
размеры шрифтов остальных меток Label
что позволяет адаптировать размеры окна программы
для разных аппаратов (но это не точно)
Разрешаем нашим графическим кнопкам реагировать на нажатия
Image_melody.Clickable=true
и так далее
это можно сделать и в настройках блока
в конце запускаем пока невидимые аналоговые часы
методом
Clockie.Start
Таймер Clock1
Событие When.Clock1.Timer
возникает с интервалом указанным в свойстве
в миллисекундах, например
Clock.TimerInterval.to=1000
будет вызывать данное событие 1 раз
в секунду
в этой программе частота срабатывания таймера зависит от
режима работы, который устанавливается в CheckBox_Demo
и в зависимости от выбора режима, меняется интервал таймера
и вызывается функция DEMO или функция Clock
Таймер Clock2
Управляет вращением шестеренки в Image_Setup
увеличивая угол поворота в переменной
Global ms, которой затем присваивается свойству
Image_Setup.Rotation.to=Global ms
и ведет отсчет десятков милисекунд , мельче некуда
и выводит их в Label_ms.Text
Чтобы изображение на экране смартфона не дрыгалось когда Label_ms.Text меньше десяти,
в блоке IF проверяется длинна строки в переменной Global ms
, и хоть эта переменна объявлена как цифровая,
строковые функции с ней тоже работают.
В нужном случае метка дополняется лидирующим нулем
В программе имеется несколько графических кнопок
нажатия на которые выполняют определенные задачиустановка времени будильника
Открывает диалогововое окно выбора временикомпонента TimePicker
при нажатии кнопки ОК срабатывает событие TimePicker1.AterTimeSet
в переменные Global h и Global m заносится выбраное время из TimePicker.Hour и TimePicker.Minute
Установка включения будильника
если ткнуть пальцем в этот значек, в телефоне сработает вот такой код
вначале телефон издаст звуковой сигнал из функции Beep
Затем методом Extension TaifunAlarm.Set установит время срабатывания
Просле занесет в метку Label_alarm.Text.to
время при котором будильник сработает
и в завершении сменит значек не активного бедильника
в Image_alarm_clock.Picture.to="bud1.png"
на значек включенного, картинки хранятся тут же в проекте
Открывает окно настроек
При первом нажатии Играет мелодию монтаны,
при повторном останавливает проигрывание
это организовано програмно
Функции
BEEP
Заружает в плеер звук бип из файла
запускает плеер
Clock
Основная функция , управляет отображением времени и датыЗапрашивается состояние батареи телефона
В метку заносится минуты текущего времени
Label.Minute.Text.To=Clock1.FormatDateTime
Таким же способом выводятся секунды
С часами отдельная песня, там можно выводить на выбор, 12 или 24 часа , что требует дополнительного кода
если в вашей программе не требуется отдельных операций, с минутами, секундами и часами то можете просто использовать такой pattern - шаблон
Похожим способом на экран выводится текущая дата
оператором JOIN собирается такая конструкция -
День, Имя месяца, Год, День недели
и заносится в метку Label_Date.Text.To
Если в опциях, установлен чек-бокс на 24 формат, время будет выводится
в 24-часовом формате, оператором IF проверяется состояние
CheckBox ch_v24 , и в зависимости от ситуации , отображается
соответствующий формат времени
за это отвечает шаблон-PATTERN "hh" или "HH"
бой часов срабатывает если -
он включен и
минуты = 0
секунды = 0
тогда в переменную числа ударов записывается текущее
количество часов, и вызывается функция BOY
если количество минут =30 и секунд =0
часы бьют один удар
Код - Бой часов
бой часов требует отдельного описанияпостроен он на компоненте плеер
Указываем плееру какой файл проигрывать
Player.Source.to="boy1.mp3"
этот файл загружен в Assets (Активы) зараннее
даем команду Player.Start
по окончании проигрывания возникает событие
Player.Completed
в обработчике уменьшаем переменную
Global boy на один
проверяем не достигла ли она нуля и
если она бельше , запускаем плеер Player.Start
изначально переменная Global boy хранит количество
часов текущего времени, стало быть плеер сыграет
столько же раз
Состояние батареи телефона
Функция BAT проверяет и выводит на экран информациюо зарядке батареи, ее температуре, и тип подключеного зарядного устройства
За получения этой информации отвечает Extension
com.puravidaapps.TaifunBattery.aix
Этот Extension имеет доступ ко многим параметрам батареи
здесь используются только три
Plugged Level Temperature
В зависимости от значения Level меняется значек батареи
А значек подключения меняется при изменении Plugged
датчик Температуры есть не на всех аппаратах
продолжение следует..
Форум у меня пока работает коряво, вопросы и пожелания пишите
в коментах к видео