В этом видеокурсе будут рассмотрены все тонкости создания приложений под Windows 10 — операционную систему, стремительно набирающую популярность в мире.
1. Введение в курс
1.1. Введение в UWP
1.1. Лабораторная работа. Одностраничное приложение
1.2. Элементы управления XAML
2. Привязка данных и MVVM
2.1. Лабораторная работа. Контентное приложение с коллекцией
3. Навигация между страницами
3.1. Лабораторная работа. Многостраничное приложение
4. Адаптивный интерфейс
4.1. Лабораторная работа. Адаптивный дизайн
5. Жизненный цикл приложения
5.1. Лабораторная работа. Жизненный цикл приложения
6. Файлы и хранения данных
6.1. Лабораторная работа. Файлы и хранение данных
7. Живые плитки и уведомления
7.1. Лабораторная работа. Живые плитки и уведомления
8. Интеграция веб-контента
8.1. Лабораторная работа. Интеграция веб-контента
9. Публикация приложения в магазин
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Поделиться
Клубный абонемент
онлайн, от 114 700 до 449 000 ₽
Курс «Профессия Мидл Frontend-разработчик»
Постоянный доступ, онлайн, от 3705 до 16 463 ₽ в месяц
Что думаете?
Комментирую от имени компании
Показать все комментарии
Фотография
Обсуждают сейчас
Так, что за продажа рекламы? Кому надо и не надо давно знает, что все адекватные люди на бесплатных ресурсах(благо гитхабу) просто скачав модель(Для так скажем стиля генерации и по желанию добавив лору тоже так скажем для более детальной генерации) могут сгенерировать и 3+, и 18+, и 21+, и природу, и техногенку, и много чего еще, а если прям совсем нет того, что нужно, то всегда можно натренировать свою модель, а это мьех.зюыю единственное оправдание это что она на удаленке и более мощное, но тоже такое себе
Unstable Diffusion — аналог Midjourney без цензуры
11 минут назад
Минусы будут?
Medium больше недоступен из России без VPN: Роскомнадзор заблокировал сервис
18 минут назад
К счастью, некоторые ошибки, вроде двоеточия, компилятор просто не пропустит. Но аз пару моментов спасибо
9 ошибок, которые выдают в Python-разработчике новичка
23 минуты назад
Пишет дата-аналитик. Мне такой финт провернуть не удалось. Да, далеко не все пункты из списка я выполнила, но и ресурса меня слушать у реководителей особо не было. Если твои топы в хроническом инфопередозе, думать о покрытии хотя бы части от 155К им не удобно и все время невовремя. Надеюсь, кому-то эта статья поможет избежать подобной ситуации
Источник: tproger.ru
Графические приложения на Rust для Windows 10
В этой серии статей мы рассмотрим создание графических приложений на языке Rust для ОС Windows. В настоящее время есть ряд проектов и библиотек, которые позволяют создавать графические приложения. В данном случае мы будем воспользуемся проектом Rust for Windows , который официально развивается компанией Microsoft и который позволяет использовать любые Windows API (в том числе Win32 API или Windows 10 API). Официальный репозиторий проекта на github — https://github.com/microsoft/windows-rs.
Установка инструментария
Что нам потребуется для разработки графических приложений для Windows на языке Rust? Естественно у нас должен быть установлен сам компилятор Rust. Также необходио загузить либо Microsoft C++ Build Tools, либо Microsoft Visual Studio (например, можно выбрать бесплатный выруск Community).
Вне зависимости от того, какую именно из этих двух программ мы выбрали, при установке нам надо отметить следующие опции:
- .NET desktop development / Разработка классических приложений .NET
- Desktop development with C++ / Разработка классических приложений на C++
- Universal Windows Platform development / Разработка классических приложений для универсальной платформы Windows
Создание проекта
Выберем для проекта какой-нибудь каталог для проекта и перейдем к нему в командной строке с помощью команды cd . Например, в моем случае для проект будет располагаться в папке C:rustwindows .
Далее с помощью команды
cargo new hello
Создадим в этой папке новый проект с названием «hello».
В папке созданного проекта найдем файл Cargo.toml и откроем его. Добавим в него ссылку на библиотеку (а точнее crate) windows , которая и представляет проект Rust for Windows :
[package] name = «hello» version = «0.1.0» authors = [«Eugene «] edition = «2018» [dependencies] windows = «0.11.0» [build-dependencies] windows = «0.11.0»
Файл build.rs
Теперь определим в папке проекта новый файл — build.rs . Этот скрипт автоматически вызывается инфраструктурой Cargo непосредственно перед компиляцией приложения. Определим в этом файле следующее содержимое:
fn main() < windows::build! < Windows::ApplicationModel::Activation::*, Windows::UI::Xaml::Controls::TextBlock, Windows::UI::Xaml::*, >; >
Этот скрипт определяет те части Windows API, которые мы собираемся использовать в своем проекте. Они передаются в макрос windows::build! . Windows имеет множество разных API, но не все они нам нужны. И тем больше мы включим в проект различных API, тем медленнее будет происходить сборка приложения.
В итоге при выполнении этого файла макрос windows::build! создаст привязки к используемым компонентам Windows API. В частности, для создания и запуска приложения берем функциональность из модуля Windows::ApplicationModel::Activation и Windows::UI::Xaml . И так как в приложении мы будем использовать метку, которая будет выводить некоторый текст, то мы также подключаем соответствующий компонент (если точнее структуру) Windows::UI::Xaml::Controls::TextBlock .
И макрос windows::build! , используя метаданные этих компонентов, сгенерирует соответствующие типы Rust или привязки. Причем даже если мы указываем только конкретный тип, а не весь модуль, как в случае с Windows::UI::Xaml::Controls::TextBlock , то макрос может включать дополнительные типы, если они необходимы для функционирования этого типа.
Определение кода приложения
Теперь перейдем к файлу main.rs , который по умолчанию создается cargo в папке src и который по умолчанию имеет следующий код:
fn main()
Изменим этот код на следующий:
#![windows_subsystem = «windows»] mod bindings < windows::include_bindings!(); >use bindings::*; use windows::*; use bindings::< Windows::ApplicationModel::Activation::*, Windows::UI::Xaml::Controls::TextBlock, Windows::UI::Xaml::*, >; #[implement( extend Windows::UI::Xaml::Application, override OnLaunched )] struct MyApp(); #[allow(non_snake_case)] impl MyApp < fn OnLaunched(Option) -> Result < let window = Window::Current()?; let textBlock: TextBlock = TextBlock::new()?; textBlock.SetText(«Hello Rust from Metanit.com»)?; textBlock.SetFontSize(22.0)?; window.SetContent(textBlock)?; window.Activate() >> fn main() -> Result < initialize_mta()?; Application::Start(ApplicationInitializationCallback::new(|_| < MyApp().new()?; Ok(()) >)) >
Разбор кода
В начале идет атрибут
#![windows_subsystem = «windows»]
Он указывает на используемую подсистему. Подсистема в свою очередь определяет, как ОС будет выполнять приложение. В реальности для этого атрибута есть два возможных значения: windows и console . Значение «windows» указывает, что это будет графическое приложение, и позволяет скрыть консоль. (Без этого атрибута наряду с графическим окном мы увидим консоль приложения)
Далее определяется модуль bindings , который выполняет макрос include_bindings :
mod bindings
Этот макрос добавляет сгенерированные привязки в текущий контекст. И через модуль bindings мы сможем обращаться к сгенерированным привязкам. (Если файлов с кодом много и во все надо добавлять определение данного модуля, то выполнение этого макроса можно вынести в отдельный файл)
Далее идут подключения модулей и их отдельной функциональности:
use bindings::*; use windows::*; use bindings::< Windows::ApplicationModel::Activation::*, Windows::UI::Xaml::Controls::TextBlock, Windows::UI::Xaml::*, >;
Создание объекта приложения
Далее нам надо определить функционал приложения.
Для представления приложения в библиотеке windows предназначена структура Windows::UI::Xaml::Application . Однако нам надо определить какой-то свой функционал приложения, чтобы оно имело то поведение и те компоненты, которые нам нужны. И для этого необходимо изменить поведение данной структуры. Но стоит учесть, что язык Rust не поддерживает наследование. То есть мы не можем просто так взять и унаследовать один тип от другого, переопределив его некоторые функции. Однако в библиотеке windows есть атрибут windows::implement , который позволяет применить для структур Rust функционал классов WinRT или любую комбинацию существующих интерфейсов COM и WinRT.
И в данном случае мы определяем структуру MyApp , которая и будет представлять приложение.
#[implement( extend Windows::UI::Xaml::Application, override OnLaunched )] struct MyApp();
Параметр extend атрибута implement указывает, какой тип будет расширять структура. (В данном случае Windows::UI::Xaml::Application).
А параметр override указывает, какой метод будет переопределять структура. Здесь это метод OnLaunched() , в котором мы можем задать визуальный интерфейс и логику приложения.
В реальности атрибут implement обернет структуру MyApp в объект COM/WinRT, который расширяет структуру Application, используя агрегацию.
Поскольку мы указали, что структура MyApp будет переопределять метод OnLaunched() , то нам его надо определить для MyApp. Этот метод запускается при старте приложения:
#[allow(non_snake_case)] impl MyApp < fn OnLaunched(Option) -> Result < let window = Window::Current()?; let textBlock: TextBlock = TextBlock::new()?; textBlock.SetText(«Hello Rust from Metanit.com»)?; textBlock.SetFontSize(22.0)?; window.SetContent(textBlock)?; window.Activate() >>
Чтобы указать компилятору, что мы не хотим использовать стиль кода snake_case , применяется атрибут #[allow(non_snake_case)]
В качестве второго параметра метод принимает объект _:
Далее создаем объект TextBlock, который представляет текстовую метку, с помощью метода new() :
let textBlock: TextBlock = TextBlock::new()?;
С помощью метода SetText() устанавливаем текст метки:
textBlock.SetText(«Hello Rust from Metanit.com»)?;
А с помощью метода SetFontSize() устанавливаем высоту шрифта
textBlock.SetFontSize(22.0)?;
Далее устанавливаем данный объект TextBlock в качестве содержимого окна и активируем окно:
window.SetContent(textBlock)?; window.Activate()
Функция main
После определения приложения нам надо запустить его в функции main:
fn main() -> Result < initialize_mta()?; Application::Start(ApplicationInitializationCallback::new(|_| < MyApp().new()?; Ok(()) >)) >
В начале идет вызов функции initialize_mta() , которая инициализирует COM.
Входной точкой в приложение является метод Application.Start() . В качестве параметра он принимает объект Windows::UI::Xaml::ApplicationInitializationCallback , который инициализирует приложение.
Для создания объекта ApplicationInitializationCallback применяется статическая функция ApplicationInitializationCallback::new() , которая в качестве параметра принимает объект FnMut( Result . То есть фактически мы можем передать в функцию ApplicationInitializationCallback::new мы можем передаеть функцию, которая принимает один параметр. В этой функции мы создаем объект структуры MyApp:
MyApp().new()
И после этого окно приложения отобразится на экране компьютера.
Создание файла манифеста
Поскольку мы использует API Windows 10, то просто скомпилировать exe и запустить его одним кликом не получится. Нам нужно определить файл манифеста приложения. Итак, в папке проекта создадим папку appx . В этой папке определим файл AppxManifest.xml :
Windows 10 App in Rust Metanit.com StoreLogo.png
При локальном развертывании приложения можно оставить все эти данные, как они определены здесь. Но при желании можно и изменить. Вкратце рассмотрим его структуру.
Узел Identity
Задает глобально уникальные идентификаторы приложения и содержит следующие свойства:
- Name : название пакета приложения. Представляет строку от 3 до 50 алфавитно-цифровых символов, точки и дефиса.
- Publisher : создатель приложения. Должен начинаться с префикса «CN b»>Version : версия приложения. Строка в формате «Major.Minor.Build.Revision»
Узел Properties
Описывает, как информация о приложении будет отображаться пользователю. Содержит следующие параметры:
- DisplayName : отображаемое имя приложения
- PublisherDisplayName : отображаемое имя создателя приложения
- Logo : путь к логотипу приложения
Dependencies
Описывает зависимости приложения. Содержит элемент , который задает диапазон поддерживаемых устройств с помощью параметров:
- Name : название семейства устройств, которые поддерживают приложение
- MinVersion : минимальная версия устройства
- MaxVersionTested : максимальная версия
Узел Resources
Определяет поддерживаемые языки с помощью вложеных элементов . Первый элемент задает язык приложения по умолчанию. Должен быть определен как минимум один язык.
Узел Applications
Определяет характеристики для каждого содержащегося в пакете приложения с помощью вложеных элементов .
Элемент имеет следующие атрибуты
- Id : уникальный идентификатор приложения внутри пакета
- Executable : имя файла приложения (файл exe или dll). Поскольку созданный через cargo проект называется «hello», то по умолчанию он будет компилироваться в файл «hello.exe»
- EntryPoint : использует свойства Executable и Id
Также с помощью вложенного элемента uap:VisualElements элемент определяет визуальные настройки приложения. А именно:
- DisplayName : отображаемое имя приложения — строка от 1 до 256 символов
- Description : описание приложения — строка от 1 до 2048 символов
- BackgroundColor : фоновый цвет в формате трехбайтного шестнадцатеричного значения, предваряемого символом «#», либо название цвета в виде строки.
- Square150x150Logo : путь к логотипу величиной 150×150
- Square44x44Logo : путь к логотипу величиной 44×144
Поскольку здесь необходимо как минимум три файла изображения, то можно их загрузить ниже. Файл StoreLogo.png :
Компиляция и установка приложения
Для компиляции и установки приложения в папку проекта добавим новый файл register.cmd со следующим содержимым:
cargo build copy appx* .targetdebug cd .targetdebug powershell -command «Add-AppxPackage -Register AppxManifest.xml» cd ….
Этот скрипт сначала компилирует приложение командой cargo build . Затем компирует содержимое из папки appx (то есть файл манифеста и изображения) в папку targetdebug , где будет располагаться скомилированный файл приложения. И затем выполняется команда «Add-AppxPackage», которая устанавливает приложения на локальном компьютере.
Таким образом, весь проект будет выглядеть следующим образом:
Теперь, когда все готово, перейдем в командой строке к папке проекта и запустим в ней файл register.cmd :
В итоге в меню Пуск в Windows мы сможем увидеть наше приложение, которое там называется так, как было указано в файле манифеста — Windows 10 App in Rust :
Запустим его и увидим элемент TextBlock с надписью, которую мы определили в коде приложения:
Источник: metanit.com
Как создать приложение для Windows 10 Arduino (для начинающих)
Microsoft делает ставку на Windows 10, наконец осуществив мечту о приложениях, работающих на кроссплатформенных платформах. В сочетании с официальной поддержкой Arduino в вашем распоряжении новый мощный инструмент: возможность легко создавать универсальные приложения Windows, которые имеют аппаратное соединение с реальным миром.
Вот как можно начать, даже если вы никогда ранее не программировали приложение для Windows.
Прежде чем читать дальше, ознакомьтесь с демонстрацией того, что мы собираемся сделать.
Должен отметить, что я не использовал Visual Studio и даже не коснулся C # около 10 лет назад. Я подхожу к этому с точки зрения новой установки Visual Studio и забыл все, что знаю.
Если вы уже достаточно опытны в программировании приложений для Windows или даже ищете простой способ начать программирование в Windows без этого Arduino, попробуйте руководство Райана по созданию простого приложения на Visual Basic. создать . Новички в абсолютном программировании могут захотеть ознакомиться с моим программированием. 101 (и часть 2 статью ).
Вы должны быть знакомы с некоторыми проектами (и, возможно, даже прочитайте наше Руководство по Arduino ), но, вероятно, вы впервые попытаетесь создать настоящий программный продукт для взаимодействия с ним.
Загрузки
Первое: вам нужно присоединиться к программе Windows Insider, чтобы получить последнюю предварительную версию Visual Studio 2015 и последнюю версию Windows 10 Preview . Сделай это сейчас — это бесплатно. Windows 10 является предварительной версией разработчика и не должна устанавливаться в качестве основной операционной системы. Это чертовски глючит.
- Присоединитесь к программе Windows Insider и загрузите Windows 10 Technical Preview.
- Получите предварительную версию Visual Studio 2015 Community Edition [больше не доступно].
Visual Studio — это собственная среда разработки Microsoft, которую мы будем использовать для создания приложения на C # для Windows.
Почему C #? С сильным сходством с Java, это относительно простой язык программирования для начинающих, чтобы запустить и запустить работающее приложение, но при этом он достаточно мощный, чтобы вы могли создавать потрясающие приложения (даже игры: C # — язык сценариев Unity на выбор — проверьте Наша бесплатная электронная книга, Руководство для начинающих по программированию игры с Unity ).
Если вы еще этого не сделали, загрузите Arduino IDE с официального сайта Arduino.cc и установите стандартные платы на плату. Вы найдете его в разделе Примеры -> Фирма -> Стандартные Фирма . Это просто превращает его в «тупое» последовательное устройство, которое будет делать то, о чем говорит наше приложение — на самой плате не будет никакой логики приложения, только интерфейс между нашим приложением и любыми датчиками или устройствами вывода, подключенными к Arduino. ,
Что касается проводки, вы можете либо прикрепить светодиод непосредственно к контакту 13 и GND, как показано ниже, либо использовать встроенный светодиод. Вам также понадобится переменный резистор (я использовал линейный потенциометр 10 кОм), идущий в A0 (с соответствующими ножками на GND и + 5 В, очевидно).
Наконец, загрузите пакет Remote Wiring с GitHub [Больше не доступно]. Это слой, который мы должны добавить, чтобы наше приложение Windows могло общаться с Arduino.
Создать приложение
Идите вперед и откройте Visual Studio. Если вы запускаете его впервые, вам будет предложено войти в систему. Если хотите, игнорируйте его. Выберите Visual C # в качестве варианта разработки и продолжайте; В любом случае, подготовка Visual Studio к первому использованию занимает несколько минут.
Создайте новый проект, используя шаблон Visual C # -> Blank App (Windows Universal) . Я назвал мой «Тест Arduino», но это не имеет значения.
В этот момент я столкнулся с ошибкой, связанной с необходимостью переключения Windows 10 в режим разработчика, если я действительно хотел запустить приложение. Сделайте это, хотя, если вы обнаружите, что ваша сборка Windows 10 не работает с этим параметром, это известная ошибка, и вам нужно использовать редактор групповой политики, чтобы включить режим разработчика .
Затем щелкните правой кнопкой мыши в любом месте обозревателя решений (это справа) и выберите « Добавить» -> « Существующий проект» .
Перейдите туда, куда вы загрузили файлы Remote Wiring с Github — если он был разархивирован, это должна быть папка с именем remote-wiring-development . Внутри вы найдете Microsoft.Maker.win10 ; и внутри этого вы найдете еще 3 папки. В свою очередь, добавьте каждую из них, перейдя в эти три папки и найдя файл проекта.
Если вы получаете какие-либо сообщения об ошибке «Файл XAML 8.2 не найден», значит, у вас неправильная версия Visual Studio или еще не установлены инструменты разработчика. Вернитесь к началу этой статьи и убедитесь, что вы загрузили и установили оба связанных файла Visual Studio.
Эти 3 проекта, которые вы только что добавили, представляют собой просто разные слои интерфейса Arduino. В обозревателе решений, если щелкнуть правой кнопкой мыши и выбрать « Зависимости» -> « Зависимости сборки» , можно увидеть, от каких слоев зависят (от чего зависит Serial; от Serial зависит Firmata ; от обоих — RemoteWiring ) . Единственное изменение, которое вам необходимо сделать, — это выбрать свой проект из выпадающего списка и установить флажки в каждом поле, чтобы указать, что ваш проект зависит от всех этих других проектов.
Последний шаг: снова в обозревателе решений щелкните правой кнопкой мыши на элементе « Ссылки» в вашем проекте и выберите « Добавить ссылку» . Слева перейдите к Windows Universal , затем установите флажок рядом с Microsoft Visual C ++ AppLocal Runtime Package . Пока не закрывайте диалог.
Затем перейдите к Projects (также в том же диалоговом окне, из списка слева) и установите флажок рядом с каждым из трех проектов Microsoft.Maker .
Это было сложнее, чем должно быть, но вам нужно сделать это только один раз; теперь мы можем повеселиться с программированием — обещаю, что это не так страшно.
программирование
Если после этого у вас возникнут проблемы, полный код доступен на Pastebin . Тем не менее, я настоятельно рекомендую прочитать примечания ниже, чтобы объяснить, что на самом деле делает код.
Во-первых, нам нужно добавить немного кода, который говорит, что нам нужен USB-порт для связи с Arduino. Найдите файл Package.appxmanifest в обозревателе решений и дважды щелкните его, чтобы изменить. Нам нужно вставить сюда некоторый код — технически, мы будем «вставлять дочерний узел», потому что это XML-файл, но просто заменим весь раздел следующим кодом, чтобы он выглядел следующим образом:
Точный код будет отличаться, если вы используете Bluetooth, или если вы нацеливаетесь на Win8.1 вместо 10, но следующее для Windows 10, USB-соединение.
Перейдите в меню « Сборка» -> « Перестроить решение» и убедитесь, что вы не получили никаких ошибок.
В обозревателе решений разверните узел MainPage.xaml . Двойной щелчок по нему загрузит конструктор форм, к которому мы вернемся позже, но сейчас откройте файл MainPage.xaml.cs , который содержит основную логику нашего приложения.
Добавьте две строки в первом разделе, чтобы указать, что мы будем «использовать» биты Arduino.
using Microsoft.Maker.serial; using Microsoft.Maker.RemoteWiring;
Я также добавил строку, чтобы сказать, что мы будем использовать System.Diagnostics; что позволяет нам использовать функцию Debug.WriteLine () для вывода отладочных сообщений в IDE.
Прежде всего, давайте определим несколько переменных, которые мы будем использовать повсюду. Добавьте эти строки непосредственно перед объявлением публичной функции MainPage () .
UsbSerial connection; RemoteDevice arduino; UInt16 lastvalue;
Затем перейдем к функции MainPage () — это называется конструктор, и это функция, которая вызывается сразу при создании нашего приложения, поэтому мы используем ее для настройки всего.
Сначала добавьте строку для установки последовательного USB-подключения к определенному USB-устройству (Arduino).
connection =new UsbSerial(«VID_2341», «PID_0043»);
Обратите внимание, что USB-идентификаторы стандартного Arduino Uno уже закодированы в блоке, но это можно проверить в Диспетчере устройств -> Порты (COM и LPT) -> Arduino Uno -> вкладка « Сведения » -> Идентификаторы оборудования .
Затем добавьте следующие строки сразу после этого.
arduino = new RemoteDevice(connection); connection.ConnectionEstablished += OnConnectionEstablished; connection.begin(57600, SerialConfig.SERIAL_8N1);
Несколько вещей происходят здесь. Во-первых, мы создаем объект RemoteDevice — помните, это слой, который дает нам кучу команд Arduino, — и присваиваем ему имя переменной «arduino». Следующая строка присоединяется к событию ConnectionEstablished, чтобы сказать: « После успешного установления USB-соединения, пожалуйста, запустите функцию OnConnectionEstablish ()».
Финал только что сообщает, что соединение уже началось, со скоростью 57600 бод, с использованием 8- битной комбинации .
Вам также необходимо создать эту функцию OnConnectionEstablished (), поэтому выйдите за пределы функции MainPage () и просто создайте пустую функцию следующим образом.
private void OnConnectionEstablished() < // LOGIC HERE >
Вернитесь к конструктору форм, о котором я упоминал ранее (если вы забыли, как это сделать: дважды щелкните MainPage.xaml в обозревателе решений). Создайте две кнопки. Для этого откройте вкладку «Панель инструментов», которую вы найдете закрепленной вертикально в левой части экрана. Перетащите две кнопки на страницу, затем пометьте одну Вкл и одну Выкл .
Выберите первую кнопку, затем в поле «Свойства» в правом нижнем углу назовите ее «OnButton». Нажмите на маленький значок молнии — это список событий и действий, который используется для указания того, что происходит при взаимодействии с элементами формы. Введите «OnButtonClick» в поле « Нажмите» .
Когда вы нажимаете ввод, он автоматически создает код для этого конкретного события кнопки и загружает стандартное представление кода. Вернитесь к конструктору форм и сделайте то же самое для кнопки «Выкл.», Но на этот раз назовите ее «OffButton» и «OffButtonClick». Пока вы там, идите вперед и назовите форму главного окна за ней как «Страница» — мы будем использовать это позже. Теперь у вас должно быть что-то похожее на скриншот ниже:
Снова переключитесь обратно на дизайнер и снова для каждой кнопки установите для свойства isEnabled значение False . Вы можете сделать это, введя свойство непосредственно в представление кода XAML, или вы можете найти этот флажок в поле «Свойства» (щелкните гаечный ключ, если вы все еще находитесь в представлении действий) — оно находится в расширенной категории « Общие свойства».
Это не обязательно, но рекомендуется отключать кнопки, пока мы не убедимся, что Arduino подключен и подключен.
Чтобы снова включить их, добавьте следующее в функцию OnConnectionEstablished (). Пока не беспокойтесь о точном значении кода, это просто способ, которым вы должны обрабатывать обновления форм в современных приложениях Windows, чтобы обеспечить хорошую производительность. После того, как мы подключились к Arduino, мы установили для свойства IsEnabled кнопок значение true.
private void OnConnectionEstablished() < // enable the on off buttons var action = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() =>< OnButton.IsEnabled = true; OffButton.IsEnabled = true; >)); arduino.pinMode(14, PinMode.ANALOG); arduino.AnalogPinUpdatedEvent += MyAnalogPinUpdateCallback; Debug.WriteLine(arduino.analogRead(14)); >
Вы также увидите более привычный оператор pinMode (), который говорит о том, что у нас есть аналоговый вход на контакте 14 (есть 13 цифровых контактов, поэтому A0 начинает считать с 14). Затем у нас есть еще одно объявление события — при обновлении значения аналогового вывода вызывается функция MyAnalogPinUpdateCallback.
Наконец, нам нужно отредактировать события нажатия кнопки и решить, что произойдет, когда изменится аналоговый вход. Начнем с кнопок. Мы можем взаимодействовать с Arduino, используя имена функций, подобные обычному коду Arduino, следующим образом:
arduino.digitalWrite(13, PinState.HIGH);
Вставьте это для события onButton, и это для offButton:
arduino.digitalWrite(13, PinState.LOW);
Просто. Аналоговый вход от Arduino немного сложнее, но вот что я придумал.
public void MyAnalogPinUpdateCallback(byte pin, UInt16 value) < if(value-lastvalue >5 || lastvalue-value > 5)
Debug.WriteLine(«Pin A» + pin + » is now » + value); var action = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => < byte num = Convert.ToByte(value / 4); Page.Background = new SolidColorBrush(Windows.UI.Color.FromArgb(255, num, num, Convert.ToByte(255 -num))); >)); > lastvalue = value; >
Обратите внимание, что я храню предыдущее значение, которое мы получили от вывода, в переменной lastValue; это позволяет нам проверить, насколько сильно изменяется значение, и реагировать, только если разница значительна (своего рода сглаживание сигнала). Если он изменяется в любом направлении более чем на 5 (0-1024 — полный диапазон значений), то мы реагируем, изменяя значение цвета фона RGB элемента Page.
Поскольку у нас есть только один номер, с которым я работал, и я спешил, я немного выдумал здесь 3 цифры, необходимые для того, чтобы сделать R, G и B. Вы, вероятно, можете придумать что-то более красивое.
Законченный
Вот и все — запустите код, и вы должны увидеть что-то похожее на скриншот выше. Кнопки включают и выключают светодиод, а переменный резистор меняет фон. Если у вас возникли проблемы, не забудьте полный код здесь .
Теперь, когда вы можете написать свои собственные приложения для Windows 10, которые взаимодействуют с Arduino, что вы будете делать? Возможно, контроллер ? Дай мне знать в комментариях.
Источник: gadgetshelp.com