Interfaz táctil para Netduino


Mario Vernari  en su blog   ha empezado a trabajar alrededor  de la placa FTDI FT800 Eve , y debo admitir que su trabajo me ha parecido impresionante

El  corazón de la  placa Eve es el  FT800  es un controlador de  Pantalla, audio y controlador Touch que  proporciona un potente conjunto de características en un paquete pequeño para crear interfaces dinámicas HMI. Ademas el dispositivo es compatible con la línea de los gráficos de línea de representación a 1/16 de un pixel en las pantallas con una resolución de hasta 512 x 512 con 262 mil colores. También el chip incluye un controlador de contacto para detectar la retroalimentación táctil de una pantalla TFT con un panel táctil resistivo así como un sintetizador de sonido y la reproducción de audio con una salida PWM para conducir un altavoz

.A continuación  el resto de características principales del chip:

  • En un solo chip control para la pantalla, audio y control táctil
  • Hasta 512 x 512 píxeles de resolución
  • 262K colores (6 rojos, 6 verdes, 6 azules)
  • Anti-Aliasing
  • Tramado de color de 2 bits
  • Programable momento HSYNC / VSYNC
  • Control de iluminación
  • Sentido táctil resistiva
  • Enfoque de la programación orientada Objetivo
  • Reproductores incrustados para ayudar con la creación de imágenes complejas
  • Salida de audio mono
  • 64 incorporado tonos polifónicos
  • Decodificar para mono PCM lineal de 8 bits, 4 bits ADPCM y μ-Law formato de codificación a frecuencias de muestreo de 8 kHz a 48 kHz
  • SPI / interfaz I 2 C para el anfitrión de MCU
  • 1,8 V a 3,3 V IO niveles para albergar MCU
  • 3V3 niveles en los pines RGB
  • Extendido rango de temperatura de funcionamiento: -40 ° C a 85 ° C
  • Disponible en QFN-48 paquete (compatible con RoHS)

A todos los que  nos  encanta Netduino y C # nos podría parecer que nuestro Netduino    ofrezca un muy mal desempeño en  tareas gráficas ,pero en lugar de ello, el motor gráfico del Eve se puede conducir fácilmente a través de SPI de cualquier Netduino. Es decir, el SPI en Netduino es rápido , muy rápido(de hecho el  objetivo del autor  es la creación de una pequeña biblioteca para ayudar a muchos usuarios a crear pequeñas y divertidos proyectos  con Netduino y el  Eve)

Imagen EVE

Micro WPF

Si conoce  a WPF , muchos conceptos vendrían más fácil. De lo contrario, el autor nos recomienda echar un vistazo a la documentación, tutoriales etc
El término “WPF” para una simple Netduino está claramente debordado , y desde aqui  sólo se hace una aproximación visual, el enfoque de XAML como para crear la interfaz de usuario, y, sí, la misma capacidad de crear sus propios controles: MeasureOverride y ArrangeOverride .
Pero eso no es todo: Si usted tiene alguna aplicación visual en mente con Netduino + Eve (por ejemplo, un control de temperatura, el cliente de la IO, etc), entonces probablemente se necesitaría algún tipo de servicio de navegación a través de varias páginas(esa es la experiencia más moderna interfaz de usuario, en todos los dispositivos: PC, tabletas y teléfonos.)

Un ejemplo de diseño

El más versátil de control de diseño y complejo es la cuadrícula, y ademas   parece que funciona bien.
Tomemos este muestra en XAML :

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
	Title="Page1">

Por WPF ordinaria el resultado seria  el siguiente:

muestra-wpf

Ahora, vamos a ver la forma de escribir lo misma  en Netduino:

    public class DemoPage2 : PageBase
    {
        protected override void OnCreate(FT800Device dc)
        {
            var btn_prev = new WidgetButton() { Margin = new Thickness(10, 5), Text = "Prev" };
            btn_prev.Click += new EventHandler(btn_prev_Click);

            var btn_next = new WidgetButton() { Margin = new Thickness(10, 5), Text = "Next" };
            btn_next.Click += new EventHandler(btn_next_Click);
            btn_next.HAlign = HorizontalAlignment.Center;

            var grid = new WidgetGridContainer();
            grid.Name = "GRID";

            grid.AddColumnDefinition(150);
            grid.AddColumnDefinition(1, GridUnitType.Star);
            grid.AddColumnDefinition(1, GridUnitType.Auto);

            grid.AddRowDefinition(1, GridUnitType.Star);
            grid.AddRowDefinition(2, GridUnitType.Star);
            grid.AddRowDefinition(1, GridUnitType.Auto);

            {
                var ctr = new WidgetStackContainer();
                ctr.Name = "R0C0";
                ctr.Background = Colors.Blue;
                grid.SetRowCol(ctr, 0, 0);
                grid.Children.Add(ctr);

                ctr.Children.Add(btn_prev);
            }
            {
                var ctr = new WidgetStackContainer();
                ctr.Name = "R0C1";
                ctr.Background = Colors.DarkGreen;
                grid.SetRowCol(ctr, 0, 1);
                grid.Children.Add(ctr);
            }
            {
                var ctr = new WidgetStackContainer();
                ctr.Name = "R0C2";
                ctr.Background = Colors.Red;
                grid.SetRowCol(ctr, 0, 2);
                grid.Children.Add(ctr);

                ctr.Children.Add(
                    new WidgetButton() { Name = "B0", Margin = new Thickness(10, 5) }
                    );
            }
            {
                var ctr = new WidgetStackContainer();
                ctr.Name = "R1C0";
                ctr.Background = Colors.LightPink;
                grid.SetRowCol(ctr, 1, 0, 1, 2);
                grid.Children.Add(ctr);
            }
            {
                var ctr = new WidgetStackContainer();
                ctr.Name = "R2C1";
                ctr.Background = Colors.MediumSlateBlue;
                grid.SetRowCol(ctr, 2, 1, 1, 2);
                grid.Children.Add(ctr);

                ctr.Children.Add(btn_next);
            }

            this.Content = grid;
        }

        void btn_prev_Click(object sender, EventArgs e)
        {
            NavigationService.Instance.GoBack();
        }

        void btn_next_Click(object sender, EventArgs e)
        {
            NavigationService.Instance.Navigate(new DemoPage3());
        }
    }

Esto nos lleva a la siguiente instantánea:

Mi Snapshot5

NOTA: la imagen de la pantalla muestra los colores correctamente,sin embargo, la imagen tomada no lo refleja.

Widgets, widgets, widgets…

La placa  Eve está muy bien diseñada, porque hay un montón de widgets útiles.

En el momento de escribir esto, la biblioteca Netduino soporta:

  • (normal) Button
  • ToggleButton
  • TextBlock
  • Slider
  • Dial

y, en cuanto al control de diseño:

  • StackPanel
  • Grid

continuación  algunas pantallas generadas por el autor con   Netduino y la placa  FT800 Eva.

WP_000595

Mi Snapshot4

Mi Snapshot3

Mi Snapshot7

Por tanto si usted necesita una solución rápida para  agregar una pequeña pantalla táctil a su  Netduino , el Eve  es algo que usted debiera considerar.

Fuente aqui

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s