Difference between revisions of "Matrix - Button"
(Created page with "TODO...") |
(→Applications) |
||
(47 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | + | [[Matrix - Button/zh|查看中文]] | |
+ | |||
+ | ==Introduction== | ||
+ | [[File:Btn01.jpg|thumb|Button]] | ||
+ | * The Matrix-Button module is used to detect button events. | ||
+ | * If the button is not pressed S will output high otherwise S will output low. | ||
+ | |||
+ | ==Features== | ||
+ | * 3 PIN interface | ||
+ | * PCB dimension (mm): 8 x 24 | ||
+ | [[File:btn002.png | frameless|400px|BTN-01.PCB]] | ||
+ | |||
+ | * Pin Description: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Pin || Description | ||
+ | |- | ||
+ | |S || GPIO | ||
+ | |- | ||
+ | |V || Supply Voltage 5V | ||
+ | |- | ||
+ | |G || Ground | ||
+ | |} | ||
+ | |||
+ | ==Basic Device Operation== | ||
+ | * The Matrix-Button is an instant(non self-lock) button. The button's status can be read from pin S in the 3-pin 2.54 mm spacing pin header. | ||
+ | * If the button is not pressed S will output high otherwise S will output low. | ||
+ | |||
+ | ==Applications== | ||
+ | ===Connect to NanoPi M1=== | ||
+ | Refer to the following connection diagram to connect the module to the NanoPi M1:<br> | ||
+ | [[File:Matrix-Button_nanopi_m1.jpg|frameless|600px|Matrix-Button_nanopi_m1]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Button || NanoPi M1 | ||
+ | |- | ||
+ | |S || Pin7 | ||
+ | |- | ||
+ | |V || Pin4 | ||
+ | |- | ||
+ | |G || Pin6 | ||
+ | |} | ||
+ | |||
+ | ===Connect to NanoPi 2=== | ||
+ | Refer to the following connection diagram to connect the module to the NanoPi 2:<br> | ||
+ | [[File:Matrix-Button_nanopi_2.jpg|frameless|600px|Matrix-Button_nanopi_2]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Button || NanoPi 2 | ||
+ | |- | ||
+ | |S || Pin7 | ||
+ | |- | ||
+ | |V || Pin4 | ||
+ | |- | ||
+ | |G || Pin6 | ||
+ | |} | ||
+ | |||
+ | ===Connect to NanoPi M2 / NanoPi 2 Fire=== | ||
+ | Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:<br> | ||
+ | [[File:Matrix-Button_nanopi_m2.jpg|frameless|600px|Matrix-Button_nanopi_m2]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Button || NanoPi M2 | ||
+ | |- | ||
+ | |S || Pin7 | ||
+ | |- | ||
+ | |V || Pin4 | ||
+ | |- | ||
+ | |G || Pin6 | ||
+ | |} | ||
+ | |||
+ | ===Connect to NanoPC-T2=== | ||
+ | Refer to the following connection diagram to connect the module to the NanoPC-T2:<br> | ||
+ | [[File:Matrix-Button_NanoPC-T2.jpg|frameless|600px|Matrix-Button_NanoPC-T2]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Button || NanoPC-T2 | ||
+ | |- | ||
+ | |S || Pin15 | ||
+ | |- | ||
+ | |V || Pin29 | ||
+ | |- | ||
+ | |G || Pin30 | ||
+ | |} | ||
+ | |||
+ | ==Compile & Run Test Program== | ||
+ | Boot your ARM board with Debian and copy the matrix code: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ apt-get update && apt-get install git | ||
+ | $ git clone https://github.com/friendlyarm/matrix.git | ||
+ | </syntaxhighlight> | ||
+ | If your cloning is done successfully a "matrix" directory will be generated. | ||
+ | |||
+ | Compile and install Matrix: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cd matrix | ||
+ | $ make && make install | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Run test program: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ matrix-gpio_int | ||
+ | </syntaxhighlight> | ||
+ | Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.<br> | ||
+ | Here is what you should observe:<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | Waiting event... | ||
+ | Device[0] value is 1 | ||
+ | </syntaxhighlight> | ||
+ | When you press the button an event will be detected. | ||
+ | |||
+ | ==Code Sample== | ||
+ | This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-gpio_int". Here is its source code: | ||
+ | <syntaxhighlight lang="c"> | ||
+ | int main(int argc, char ** argv) | ||
+ | { | ||
+ | int i, board; | ||
+ | int retSize = -1; | ||
+ | char value[ARRAY_SIZE(dev)]; | ||
+ | |||
+ | if ((board = boardInit()) < 0) | ||
+ | printf("Fail to init board\n"); | ||
+ | |||
+ | if (argc == 2) { | ||
+ | dev[0].pin = atoi(argv[1]); | ||
+ | } | ||
+ | printf("Using GPIO_PIN(%d)\n", dev[0].pin); | ||
+ | system("modprobe "DRIVER_MODULE); | ||
+ | signal(SIGINT, intHandler); | ||
+ | if (board == BOARD_NANOPI_T2) | ||
+ | dev[0].pin = GPIO_PIN(15); | ||
+ | if ((devFD =sensorInit(dev, ARRAY_SIZE(dev))) == -1) { | ||
+ | printf("Fail to init sensor\n"); | ||
+ | return -1; | ||
+ | } | ||
+ | printf("Waiting event...\n"); | ||
+ | if ((retSize = sensorRead(devFD, value, ARRAY_SIZE(dev))) == -1) { | ||
+ | printf("Fail to read sensors\n"); | ||
+ | } | ||
+ | if (retSize > 0) { | ||
+ | i = 0; | ||
+ | for (i=0; i<retSize; i++) { | ||
+ | printf("dev[%d] value: %d\n", i, value[i]); | ||
+ | } | ||
+ | } | ||
+ | sensorDeinit(devFD); | ||
+ | system("rmmod "DRIVER_MODULE); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | For more details about this APIs called in this code sample refer to [[Matrix API reference manual]] <br> | ||
+ | |||
+ | <!--- | ||
+ | ==Download Matrix Source Code== | ||
+ | All the matrix modules' code samples are open source. They are maintained on GitHub --https://github.com/friendlyarm/matrix.git <br> | ||
+ | Each branch in this hub contains the matrix modules' code samples for a board that the matrix modules can work with.<br> | ||
+ | * The nanopi branch contains the matrix modules' code samples for the NanoPi | ||
+ | * The nanopi 2 branch contains the matrix modules' code samples for the NanoPi 2 | ||
+ | * The tiny4412 branch contains the matrix modules' code samples for the Tiny4412 | ||
+ | * The raspberrypi branch contains the matrix modules' code samples for the RaspberryPi | ||
+ | |||
+ | Please follow the steps below to get the source code:<br> | ||
+ | Install the git utility on a PC running Ubuntu14.04 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ sudo apt-get install git | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Clone the matrix code from GitHub | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ git clone https://github.com/friendlyarm/matrix.git | ||
+ | </syntaxhighlight> | ||
+ | If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples. | ||
+ | |||
+ | ==Connect to NanoPi 2== | ||
+ | ===Hardware Connection=== | ||
+ | Please refer to the following connection diagram to connect the Matrix-Button to the NanoPi 2:<br> | ||
+ | [[File:Matrix-Button_nanopi_2.jpg|frameless|600px|Matrix-Button_nanopi_2]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Button || NanoPi 2 | ||
+ | |- | ||
+ | |S || Pin7 | ||
+ | |- | ||
+ | |V || Pin4 | ||
+ | |- | ||
+ | |G || Pin6 | ||
+ | |} | ||
+ | ===Compile Test Program=== | ||
+ | Please login the matrix hub and enter the nanopi2 branch | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cd matrix | ||
+ | $ git checkout nanopi2 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Compile the matrix code | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ make CROSS_COMPILE=arm-linux- clean | ||
+ | $ make CROSS_COMPILE=arm-linux- | ||
+ | $ make CROSS_COMPILE=arm-linux- install | ||
+ | </syntaxhighlight> | ||
+ | Note: please make sure to install the cross compiler "arm-linux-gcc-4.9.3" on your PC, which is used to compile files for the NanoPi2.<br> | ||
+ | Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Button" module is "matrix-button".<br> | ||
+ | The driver is under the modules directory and its source code is in github: https://github.com/friendlyarm/linux-3.4.y.git <br> | ||
+ | |||
+ | ===Run Test Program=== | ||
+ | Please insert a TF card which is flashed with Debian to a Linux host and mount its boot and rootfs sections.<br> | ||
+ | We assume the rootfs is mounted to /media/rootfs then please run the following commands to copy the driver, library and test program to the card.<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cp modules /media/rootfs/ -r | ||
+ | $ cp install/lib/* /media/rootfs/lib/ -d | ||
+ | $ cp install/usr/bin/* /media/rootfs/usr/bin/ | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Insert this TF card to your NanoPi 2, power on and run the following commands.<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cd /modules | ||
+ | $ insmod matrix_gpio_int.ko | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Start the matrix-button program<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ matrix-button | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Here is what you should expect:<br> | ||
+ | [[File:matrix-button_result.png|frameless|600px|matrix-button_result]] | ||
+ | |||
+ | ===Code Sample=== | ||
+ | <syntaxhighlight lang="c"> | ||
+ | static struct sensor button[] = { | ||
+ | { | ||
+ | GPIO_PIN(7), | ||
+ | IRQ_TYPE_EDGE_FALLING, | ||
+ | } | ||
+ | }; | ||
+ | int main(int argc, char ** argv) | ||
+ | { | ||
+ | int i; | ||
+ | int retSize = -1; | ||
+ | char value[ARRAY_SIZE(button)]; | ||
+ | int devFD = -1; | ||
+ | |||
+ | if (argc == 2) { | ||
+ | button[0].pin = atoi(argv[1]); | ||
+ | } | ||
+ | |||
+ | printf("Using GPIO_PIN(%d)\n", button[0].pin); | ||
+ | if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | ||
+ | printf("Fail to init sensor\n"); | ||
+ | return -1; | ||
+ | } | ||
+ | printf("Press the button...\n"); | ||
+ | if ((retSize = sensorRead(devFD, value, ARRAY_SIZE(button))) == -1) { | ||
+ | printf("Fail to read sensors\n"); | ||
+ | } | ||
+ | if (retSize > 0) { | ||
+ | i = 0; | ||
+ | for (i=0; i<retSize; i++) { | ||
+ | printf("Button[%d]:%d\n", i, value[i]); | ||
+ | } | ||
+ | } | ||
+ | sensorDeinit(devFD); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Connect to NanoPi== | ||
+ | ===Preparations=== | ||
+ | Please install a Debian on a NanoPi and an appropriate cross compiler on a PC. Please refer to wiki:[[NanoPi/zh|NanoPi]] & [[How_to_build_the_Compiling_Environment/zh|How to Build the Compiling Environment]] <br> | ||
+ | Compile a NanoPi kernel. Note: please use the kernel's source code from the nanopi-v4.1.y-matrix branch.<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ git clone https://github.com/friendlyarm/linux-4.x.y.git | ||
+ | $ cd linux-4.x.y | ||
+ | $ git checkout nanopi-v4.1.y-matrix | ||
+ | $ make nanopi_defconfig | ||
+ | $ touch .scmversion | ||
+ | $ make | ||
+ | </syntaxhighlight> | ||
+ | A newly generated zImage will be under arch/arm/boot/. You can replace the one under "sd-fuse_nanopi/prebuilt" with this new image file. | ||
+ | |||
+ | ===Hardware Connection=== | ||
+ | Please refer to the following connection diagram to connect the Matrix-Button to the NanoPi <br> | ||
+ | [[File:matrix-button_nanopi.jpg|frameless|600px|matrix-button_nanopi]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Button || NanoPi | ||
+ | |- | ||
+ | |S || Pin7 | ||
+ | |- | ||
+ | |V || Pin4 | ||
+ | |- | ||
+ | |G || Pin6 | ||
+ | |} | ||
+ | |||
+ | ===Compile Test Program=== | ||
+ | Please login the matrix hub and enter the nanopi branch | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cd matrix | ||
+ | $ git checkout nanopi | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Compile the matrix code | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ make CROSS_COMPILE=arm-linux- clean | ||
+ | $ make CROSS_COMPILE=arm-linux- | ||
+ | $ make CROSS_COMPILE=arm-linux- install | ||
+ | </syntaxhighlight> | ||
+ | Note: please make sure to install the cross compiler "arm-linux-gcc-4.4.3" on your PC, which is used to compile files for the NanoPi-Debian.<br> | ||
+ | Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Button" module is "matrix-button".<br> | ||
+ | |||
+ | ===Run Test Program=== | ||
+ | Please insert a TF card which is flashed with Debian to a Linux host and mount its boot and rootfs sections.<br> | ||
+ | We assume the rootfs is mounted to /media/rootfs then please run the following commands to copy these files to the card.<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cp install/lib/* /media/rootfs/lib/ -d | ||
+ | $ cp install/usr/bin/* /media/rootfs/usr/bin/ | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Insert this TF card to your NanoPi, power on and run the following commands.<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ matrix-button | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Code Sample=== | ||
+ | <syntaxhighlight lang="c"> | ||
+ | int main(int argc, char ** argv) | ||
+ | { | ||
+ | int i; | ||
+ | int retSize = -1; | ||
+ | char value[ARRAY_SIZE(button)]; | ||
+ | int devFD = -1; | ||
+ | |||
+ | printf("Using pin GPIO_PIN1\n"); | ||
+ | if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | ||
+ | printf("Fail to init sensor\n"); | ||
+ | return -1; | ||
+ | } | ||
+ | printf("Press the button...\n"); | ||
+ | if ((retSize = sensorRead(devFD, value, ARRAY_SIZE(button))) == -1) { | ||
+ | printf("Fail to read sensors\n"); | ||
+ | } | ||
+ | if (retSize > 0) { | ||
+ | i = 0; | ||
+ | for (i=0; i<retSize; i++) { | ||
+ | printf("Button[%d]:%d\n", i, value[i]); | ||
+ | } | ||
+ | } | ||
+ | sensorDeinit(devFD); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Connect to Tiny4412== | ||
+ | ===Preparations=== | ||
+ | Please refer to the Tiny4412's user's manual to install a UbuntuCore on the Tiny4412 and install an appropriate cross compiler on a PC.<br> | ||
+ | Note: only the Tiny4412SDK-1506 carrier board can work with this module. | ||
+ | |||
+ | ===Hardware Connection=== | ||
+ | Please refer to the following diagram to connect the Matrix-Button to the Tiny4412 <br> | ||
+ | [[File:matrix-button_tiny4412.jpg|frameless|600px|matrix-button_tiny4412]] | ||
+ | |||
+ | Connection Details: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Matrix-Button || Tiny4412 | ||
+ | |- | ||
+ | |S || GPIO1 S | ||
+ | |- | ||
+ | |V || GPIO1 5V | ||
+ | |- | ||
+ | |G || GPIO1 GND | ||
+ | |} | ||
+ | |||
+ | ===Compile Test Program=== | ||
+ | Please login the Matrix hub and enter the matrix-tiny4412 branch | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cd matrix | ||
+ | $ git checkout tiny4412 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Compile the matrix code | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ make CROSS_COMPILE=arm-linux-gnueabihf- clean | ||
+ | $ make CROSS_COMPILE=arm-linux-gnueabihf- | ||
+ | $ make CROSS_COMPILE=arm-linux-gnueabihf- install | ||
+ | </syntaxhighlight> | ||
+ | Note: please make sure to install the cross compiler "arm-linux-gnueabihf-gcc-4.7.3" on your PC, which is used to compile files for the Tiny4412-UbuntuCore. <br> | ||
+ | Generated library files are under the "install/lib" directory. Applications are under the "install/usr/bin" directory. The test program for the "Matrix-Button" module is "matrix-button". | ||
+ | |||
+ | ===Run Test Program=== | ||
+ | Please insert an SD card which is flashed with UbuntuCore to a Linux host and mount its boot and rootfs sections.<br> | ||
+ | We assume the rootfs is mounted to /media/rootfs then please run the following commands to copy these files the card.<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cp install/usr/bin/* /media/rootfs/usr/bin/ | ||
+ | $ cp install/lib/* /media/rootfs/lib/ -d | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Insert this card to your Tiny4412, power on and run the following command to start the Matrix-Button test program。<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ matrix-button | ||
+ | </syntaxhighlight> | ||
+ | Note: this module is not plug and play therefore before running the module please make sure it is connected to a Tiny4412. | ||
+ | |||
+ | ===Code Sample=== | ||
+ | <syntaxhighlight lang="c"> | ||
+ | int main(int argc, char ** argv) | ||
+ | { | ||
+ | int i; | ||
+ | int retSize = -1; | ||
+ | char value[ARRAY_SIZE(button)]; | ||
+ | int devFD = -1; | ||
+ | |||
+ | printf("Using pin GPIO_PIN1\n"); | ||
+ | if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | ||
+ | printf("Fail to init sensor\n"); | ||
+ | return -1; | ||
+ | } | ||
+ | printf("Press the button...\n"); | ||
+ | if ((retSize = sensorRead(devFD, value, ARRAY_SIZE(button))) == -1) { | ||
+ | printf("Fail to read sensors\n"); | ||
+ | } | ||
+ | if (retSize > 0) { | ||
+ | i = 0; | ||
+ | for (i=0; i<retSize; i++) { | ||
+ | printf("Button[%d]:%d\n", i, value[i]); | ||
+ | } | ||
+ | } | ||
+ | sensorDeinit(devFD); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Connect to RaspberryPi== | ||
+ | |||
+ | ==Connect to Arduino== | ||
+ | ---> | ||
+ | |||
+ | ==Resources== | ||
+ | |||
+ | ==Update Log== | ||
+ | ===Feb-19-2016=== | ||
+ | * In section 4 added NanoPi 2 branch | ||
+ | * In section 5.2 added the driver and its source code's locations | ||
+ | |||
+ | ===June-17-2016=== | ||
+ | * Re-organized and simplified wiki | ||
+ | |||
+ | <!-- | ||
+ | |||
+ | ==Introduction== | ||
+ | [[Image:Btn.png|thumb|按键]] | ||
+ | The Matrix-Button is an instant(non self-lock) button. The button's status can be read from pin S in the 3-pin 2.54 mm spacing pin header. If the button is not pressed S will output high otherwise S will output low. | ||
+ | |||
+ | ==Features== | ||
+ | * Instant, non self-lock | ||
+ | * Tiny, easy to be used in various situations | ||
+ | * 2.54mm spacing pin | ||
+ | |||
+ | ==How To== | ||
+ | ===Connection=== | ||
+ | *Connect to Tiny4412 SDK (1506) | ||
+ | ::Connect the module's pin S to GPIO PIN1, pin V to 5V and pin G grounded | ||
+ | |||
+ | ===Code Sample in C Under Linux=== | ||
+ | <syntaxhighlight lang="c"> | ||
+ | #include <stdio.h> | ||
+ | #include "libfahw.h" | ||
+ | |||
+ | static struct sensor button[] = { | ||
+ | { | ||
+ | TINY4412_GPIO_PIN1, | ||
+ | IRQ_TYPE_EDGE_FALLING, | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | int main(void) | ||
+ | { | ||
+ | int i; | ||
+ | int retSize = -1; | ||
+ | char value[ARRAY_SIZE(button)]; | ||
+ | int devFD = -1; | ||
+ | if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | ||
+ | printf("Fail to init sensor\n"); | ||
+ | return -1; | ||
+ | } | ||
+ | printf("Press the button...\n"); | ||
+ | if (( retSize = sensorRead(devFD, value, ARRAY_SIZE(button)) ) == -1) { | ||
+ | printf("Fail to read sensors\n"); | ||
+ | } | ||
+ | if (retSize > 0) { | ||
+ | i = 0; | ||
+ | for (i=0; i<retSize; i++) { | ||
+ | printf("Button[%d]:%d\n", i, value[i]); | ||
+ | } | ||
+ | } | ||
+ | sensorDeinit(devFD); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Compile and Run=== | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | git clone http://github.com/friendlyarm/fa-hardware.git | ||
+ | cd fa-hardware | ||
+ | cd demo | ||
+ | cd matrix-button | ||
+ | make | ||
+ | </syntaxhighlight> | ||
+ | Copy your compiled bin to your board and you are ready to go. | ||
+ | |||
+ | ==Resources== | ||
+ | |||
+ | --> |
Latest revision as of 10:31, 19 June 2016
Contents
1 Introduction
- The Matrix-Button module is used to detect button events.
- If the button is not pressed S will output high otherwise S will output low.
2 Features
- 3 PIN interface
- PCB dimension (mm): 8 x 24
- Pin Description:
Pin | Description |
S | GPIO |
V | Supply Voltage 5V |
G | Ground |
3 Basic Device Operation
- The Matrix-Button is an instant(non self-lock) button. The button's status can be read from pin S in the 3-pin 2.54 mm spacing pin header.
- If the button is not pressed S will output high otherwise S will output low.
4 Applications
4.1 Connect to NanoPi M1
Refer to the following connection diagram to connect the module to the NanoPi M1:
Connection Details:
Matrix-Button | NanoPi M1 |
S | Pin7 |
V | Pin4 |
G | Pin6 |
4.2 Connect to NanoPi 2
Refer to the following connection diagram to connect the module to the NanoPi 2:
Connection Details:
Matrix-Button | NanoPi 2 |
S | Pin7 |
V | Pin4 |
G | Pin6 |
4.3 Connect to NanoPi M2 / NanoPi 2 Fire
Refer to the following connection diagram to connect the module to the NanoPi M2/ NanoPi 2 Fire:
Connection Details:
Matrix-Button | NanoPi M2 |
S | Pin7 |
V | Pin4 |
G | Pin6 |
4.4 Connect to NanoPC-T2
Refer to the following connection diagram to connect the module to the NanoPC-T2:
Matrix-Button_NanoPC-T2
Connection Details:
Matrix-Button | NanoPC-T2 |
S | Pin15 |
V | Pin29 |
G | Pin30 |
5 Compile & Run Test Program
Boot your ARM board with Debian and copy the matrix code:
$ apt-get update && apt-get install git $ git clone https://github.com/friendlyarm/matrix.git
If your cloning is done successfully a "matrix" directory will be generated.
Compile and install Matrix:
$ cd matrix $ make && make install
Run test program:
$ matrix-gpio_int
Note: this module is not plug and play therefore before running the module please make sure it is connected to an ARM board.
Here is what you should observe:
Waiting event... Device[0] value is 1
When you press the button an event will be detected.
6 Code Sample
This Matrix code sample can work with all the ARM boards mentioned in this module's wiki. The name of this code sample is "matrix-gpio_int". Here is its source code:
int main(int argc, char ** argv) { int i, board; int retSize = -1; char value[ARRAY_SIZE(dev)]; if ((board = boardInit()) < 0) printf("Fail to init board\n"); if (argc == 2) { dev[0].pin = atoi(argv[1]); } printf("Using GPIO_PIN(%d)\n", dev[0].pin); system("modprobe "DRIVER_MODULE); signal(SIGINT, intHandler); if (board == BOARD_NANOPI_T2) dev[0].pin = GPIO_PIN(15); if ((devFD =sensorInit(dev, ARRAY_SIZE(dev))) == -1) { printf("Fail to init sensor\n"); return -1; } printf("Waiting event...\n"); if ((retSize = sensorRead(devFD, value, ARRAY_SIZE(dev))) == -1) { printf("Fail to read sensors\n"); } if (retSize > 0) { i = 0; for (i=0; i<retSize; i++) { printf("dev[%d] value: %d\n", i, value[i]); } } sensorDeinit(devFD); system("rmmod "DRIVER_MODULE); return 0; }
For more details about this APIs called in this code sample refer to Matrix API reference manual
7 Resources
8 Update Log
8.1 Feb-19-2016
- In section 4 added NanoPi 2 branch
- In section 5.2 added the driver and its source code's locations
8.2 June-17-2016
- Re-organized and simplified wiki