Recently I’ve taken an interest to micro processors, specifically the Netdruino Plus 2 (running on the .NET micro framework). After playing around with the device I decided to write a little tutorial how to perform a double tap event using the On Interrupt event.
I’ve prepared some code to demonstrate how to achieve this.
Here’s the entire program code: (This code is not the most optimized, it’s meant only to be educational)
using System; using System.Net; using System.Net.Sockets; using System.Threading; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware; using SecretLabs.NETMF.Hardware.Netduino; namespace NetduinoApplication1 { public class Program { // LED PIN static OutputPort LED = new OutputPort(Pins.ONBOARD_LED, false); // Tap Timer, Resets the taps if you wait too long before double tapping static Timer TapTimer = null; // indicator to determine if the timer is started static bool IsTimerStarted = false; // number of taps static int TapCounter = 0; // program start public static void Main() { // define button InterruptPort button = new InterruptPort(Pins.ONBOARD_BTN, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeBoth); // hook onto button event button.OnInterrupt += button_OnInterrupt; // dont exit Thread.Sleep(Timeout.Infinite); } // start the timer static void StartTapTimer() { // time signals reset after every 5 seconds // due time = time to begin (0 = immediate) // period = length of ticks in milliseconds // state can be an object, i choose int TapTimer = new Timer(TapTimer_Elapsed, 0, 5000, 5000); IsTimerStarted = true; } // stop the timer static void StopTapTimer() { TapTimer.Dispose(); IsTimerStarted = false; } // timer tick event static void TapTimer_Elapsed(object state) { // reset taps TapCounter = 0; // stop timer StopTapTimer(); } // button event static void button_OnInterrupt(uint data1, uint data2, DateTime time) { // if release, do nothing if(data2 == 0) { return; } // start the timer on first tap to prevent inconsistency // if time is already started, we do not start the timer again - that would yield no result if (!IsTimerStarted) { StartTapTimer(); } // increment taps TapCounter++; // if number of taps = 1 (double tap) if (TapCounter == 2) { // reset taps TapCounter = 0; // invert LED indicator LED.Write(!LED.Read()); // stop the timer once we receive a double tap StopTapTimer(); } } } }
Hi there, thank you, On Top left page there’s a “Contact Me” button or you can just click here