Pull to refresh

.Net Micro Framework — Первые шаги

Reading time 2 min
Views 5.2K
Тизер был воспринят консервативно, но положительно, так что продолжаем.

Hello, Habr!

Итак, коробку распаковали, кнопочки потыкали, повтыкали на отладочный вывод при запуске. Круто! Железяка-то работает.

Хотя, с другой стороны, она не делает ничего полезного.


Что нам необходимо для начала?




Установку IDE, SDK, и первичную прошивку железки я описывать не буду, т.к. с первыми двумя и так всё ясно, а прошивка — дело специфическое, и хорошо описана производителем.

Среда подготовлена? Поехали!



Disclaimer: Embedded платформу я в своих руках держу впервые. Опыта разработки нету (не думаю, что просмотра hackaday.com и чтения wasm.ru достаточно). Есть только смутные представления. Зато есть опыт написания на C#. Если вы суровый Asm/C эмбедщик и для вас эта история — суровые трудовые будни, то моя статья наверное не для вас.

А я пока что напишу коротенький хеллоу-ворлд!

Открываю студию, выбираю новый проект для ChipworkX Module.
Бодро пишу в main метод
Console.WriteLine("Hello, World!");


и тут-же получаю
Error	1	The name 'Console' does not exist in the current context

Ээ, проехали. Консолью тут и не пахнет. Мы пойдём другим путём.
— Экран есть?
— Есть!
— Значит будет рисовать картинки.

После недолгого поиска появляется следующая конструкция:
public class Program
{
    private static readonly int LCDHeight = SystemMetrics.ScreenHeight;
    private static readonly int LCDWidth = SystemMetrics.ScreenWidth;

    private static Bitmap LCD = new Bitmap(LCDWidth, LCDHeight);

    public static void Main()
    {
        Bitmap habr = Resources.GetBitmap(Resources.BitmapResources.Habr);

        LCD.Clear();
        LCD.DrawRectangle(Colors.White, 0, 0, 0, LCDWidth, LCDHeight, 0, 0, Colors.White, 0, 0, Colors.White, 0, 0, ushort.MaxValue);
        LCD.DrawImage((LCDWidth - habr.Width) / 2, (LCDHeight - habr.Height) / 2, habr, 0, 0, habr.Width, habr.Height);
        LCD.Flush();
        Thread.Sleep(Timeout.Infinite);
    }
}


Ресурс Habr это битмап, лежащий в обычном *.resx

Запускаю и лицезрею. Работает, картинку рисует, Хабру привет.

Но нам бы по-интерактивнее.

— Кнопки есть?
— Есть!
— Будем перехватывать прерывания.

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

Немножечко курения манов, и был написан код, который при нажати на центральную кнопку делает операцию поднять перо и опустить перо, подмигивая при этом светодиодом (класс OutputPort), а курсорные кнопки соответственно двигают перо по экрану.

Код: pastebin.com/AMF2Th2g

И результат :)

habrapaint

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

P.S.

На обвязке есть акселерометр, так что продолжение эксперимента будет заключаться в общении с сенсором по I2C и отрисовывании катающегося шарика по экрану :)

P.P.S.
Литература:

Beginner's Guide to NETMF
MicroFrameworkProject.com
Tags:
Hubs:
+23
Comments 41
Comments Comments 41

Articles