Pues sí, es una cosa muy curiosa de NetDuino que permite usar el pulsador de la placa, que normalmente funciona como pulsador de reset, para darle el uso que queramos.
En este caso se añade un manejador al puerto del pulsador de forma que al ser pulsado lance una interrupción que haga ejecutarse un método.
Eso en resumidas quiere decir que dentro del while(true){} podemos poner el código que nos de la gana y que el programa saltara al código del pulsador al ser pulsado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
/* * Nombre: BotonLed * Descripción: Control del led mediante el pulsador del NetDuino. * * Fuente: http://forums.netduino.com/index.php?/topic/67-togglebutton-sample/ */ using System; using System.Threading; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware.Netduino; namespace com.giltesa.netduino.ejemplos { public class BotonLed { private static OutputPort led; private static InterruptPort boton; /** * Metodo principal. */ public static void Main() { // Se instancia un pin de salida para el led del NetDuino: led = new OutputPort(Pins.ONBOARD_LED, false); // Se instancia un pin como puerto de interrupción para el botón del NetDuino: boton = new InterruptPort(Pins.ONBOARD_BTN, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeLow); // Se añade al pin de interrupción la nueva interrupción a manejar, que al lanzarse ejecutara el método botonPulsado: boton.OnInterrupt += new NativeEventHandler(botonPulsado); // Aquí iría el resto del programa o como en este caso un pause infinito: while (true) Thread.Sleep(Timeout.Infinite); } /** * Manejador de la interrupción lanzada por el botón. */ public static void botonPulsado(UInt32 data1, UInt32 data2, DateTime time) { // Mientras el manejo de la interrupción se desactiva la escucha de otras interrupción para evitar "rebotes": boton.DisableInterrupt(); // Cambia el estado del led al estado contrario: led.Write(!led.Read()); // Activa de nuevo las interrupciones: boton.EnableInterrupt(); } } } |
Interesante. ¿Que micro lleva el NetDuino?
Un STMicro STM32F2
http://netduino.com/hardware/