nanoFramework.Iot.Device.KeyMatrix
1.2.87
Prefix Reserved
See the version list below for details.
dotnet add package nanoFramework.Iot.Device.KeyMatrix --version 1.2.87
NuGet\Install-Package nanoFramework.Iot.Device.KeyMatrix -Version 1.2.87
<PackageReference Include="nanoFramework.Iot.Device.KeyMatrix" Version="1.2.87" />
paket add nanoFramework.Iot.Device.KeyMatrix --version 1.2.87
#r "nuget: nanoFramework.Iot.Device.KeyMatrix, 1.2.87"
// Install nanoFramework.Iot.Device.KeyMatrix as a Cake Addin #addin nuget:?package=nanoFramework.Iot.Device.KeyMatrix&version=1.2.87 // Install nanoFramework.Iot.Device.KeyMatrix as a Cake Tool #tool nuget:?package=nanoFramework.Iot.Device.KeyMatrix&version=1.2.87
Key Matrix
An M×N key matrix driver.
(M is number of output pins and N is number of input pins.)
Documentation
These key matrices look like this:
This is a 4×4 matrix. And here is the schematic
You can connect any M×N key matrix, theoretically, by using M+N GPIO pins.
You can also use any compatible GPIO controller like Mcp23xxx instead of native controller.
Usage
You need to create 2 lists of int, one for the input and one for the output.
int[] outputs = new int[] { 26, 19, 13, 6 };
int[] inputs = new int[] { 21, 20, 16, 12 };
KeyMatrix mk = new KeyMatrix(outputs, inputs, TimeSpan.FromMilliseconds(20));
You can use as well any GpioController like the MCP23017 in the following example
var settings = new System.Device.I2c.I2cConnectionSettings(1, 0x20);
var i2cDevice = System.Device.I2c.I2cDevice.Create(settings);
var mcp23017 = new Iot.Device.Mcp23xxx.Mcp23017(i2cDevice);
GpioController gpio = new GpioController(PinNumberingScheme.Logical, mcp23017);
int[] outputs = new int[] { 26, 19, 13, 6 };
int[] inputs = new int[] { 21, 20, 16, 12 };
KeyMatrix mk = new KeyMatrix(outputs, inputs, TimeSpan.FromMilliseconds(20), gpio, true);
Read on Key
To read a key, just the ReadKey
function:
KeyMatrixEvent? key = mk.ReadKey();
KeyMatrixEvent contains the event that happened. Please note that ReadKey is blocked up to the moment an event is detected.
Event based approach
KeyMatrix
supports events. Just subscribe to the event and have a function to handle the events:
Debug.WriteLine("This will now start listening to events and display them for 60 seconds.");
mk.KeyEvent += KeyMatrixEventReceived;
mk.StartListeningKeyEvent();
Thread.Sleep(60000);
mk.StopListeningKeyEvent();
void KeyMatrixEventReceived(object sender, KeyMatrixEvent keyMatrixEvent)
{
// Do something here, you have an event!
}
Tips and tricks
- Using diodes(eg. 1N4148) for each button prevents "ghosting" or "masking" problem.
- Input pins need pull-down resistors connect to ground if your MCU doesn't have it. So you need to have a pull-down on a the MCU for example.
- If your key matrix doesn't work well, try to swap output and input pins. Some includes diodes and if they are used the reverse way won't work properly.
Key Matrix Samples
This shows how to connect the matrix.
Important: Please make you don't forget to place a pull down on the input matrix.
Connection using on-board GPIO
Connection using MCP23017
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net is compatible. |
-
- nanoFramework.CoreLibrary (>= 1.12.0)
- nanoFramework.Runtime.Events (>= 1.10.0)
- nanoFramework.System.Device.Gpio (>= 1.1.11)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.2.673 | 76 | 10/23/2024 |
1.2.631 | 83 | 8/28/2024 |
1.2.570 | 104 | 6/14/2024 |
1.2.560 | 104 | 5/29/2024 |
1.2.548 | 84 | 5/15/2024 |
1.2.436 | 235 | 11/10/2023 |
1.2.329 | 177 | 5/26/2023 |
1.2.313 | 132 | 5/12/2023 |
1.2.297 | 161 | 5/3/2023 |
1.2.203 | 325 | 12/28/2022 |
1.2.141 | 390 | 10/25/2022 |
1.2.122 | 443 | 10/12/2022 |
1.2.114 | 383 | 10/8/2022 |
1.2.95 | 400 | 9/22/2022 |
1.2.87 | 461 | 9/15/2022 |
1.2.73 | 413 | 9/8/2022 |
1.1.113.2032 | 406 | 6/23/2022 |
1.1.58.10097 | 440 | 5/23/2022 |
1.1.1 | 454 | 4/14/2022 |
1.0.300 | 405 | 3/31/2022 |
1.0.277-preview.125 | 126 | 3/25/2022 |
1.0.277-preview.110 | 119 | 3/18/2022 |
1.0.277-preview.105 | 126 | 3/15/2022 |
1.0.277-preview.98 | 130 | 3/8/2022 |
1.0.277-preview.77 | 121 | 2/18/2022 |
1.0.277-preview.41 | 134 | 1/28/2022 |
1.0.277-preview.32 | 140 | 1/27/2022 |
1.0.277-preview.17 | 134 | 1/24/2022 |
1.0.277-preview.15 | 122 | 1/21/2022 |
1.0.277-preview.13 | 132 | 1/21/2022 |
1.0.277-preview.1 | 133 | 1/11/2022 |
1.0.259 | 303 | 12/9/2021 |
1.0.218 | 201 | 10/18/2021 |
1.0.155 | 304 | 8/31/2021 |
1.0.135 | 295 | 7/16/2021 |
1.0.134 | 175 | 7/15/2021 |
1.0.133 | 196 | 7/14/2021 |
1.0.129 | 166 | 7/6/2021 |
1.0.125 | 193 | 7/5/2021 |
1.0.121 | 208 | 6/29/2021 |
1.0.119 | 229 | 6/28/2021 |
1.0.33 | 170 | 5/24/2021 |