Difference between revisions of "Matrix - Button"
(→Applications) |
|||
(18 intermediate revisions by 3 users not shown) | |||
Line 2: | Line 2: | ||
==Introduction== | ==Introduction== | ||
− | [[File:Btn01.jpg|thumb| | + | [[File:Btn01.jpg|thumb|Button]] |
* The Matrix-Button module is used to detect button events. | * 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. | * If the button is not pressed S will output high otherwise S will output low. | ||
Line 27: | Line 27: | ||
* If the button is not pressed S will output high otherwise S will output low. | * 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== | ==Download Matrix Source Code== | ||
− | All the matrix modules' code samples are open source. They are maintained on GitHub - | + | 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> | 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 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 tiny4412 branch contains the matrix modules' code samples for the Tiny4412 | ||
* The raspberrypi branch contains the matrix modules' code samples for the RaspberryPi | * The raspberrypi branch contains the matrix modules' code samples for the RaspberryPi | ||
Line 42: | Line 176: | ||
Clone the matrix code from GitHub | Clone the matrix code from GitHub | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | $ git clone | + | $ git clone https://github.com/friendlyarm/matrix.git |
</syntaxhighlight> | </syntaxhighlight> | ||
If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples. | If this is successful a "matrix" directory will be generated, which will contain all the matrix modules' code samples. | ||
Line 77: | Line 211: | ||
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> | 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> | 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=== | ===Run Test Program=== | ||
Line 93: | Line 228: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Start matrix-button program<br> | + | Start the matrix-button program<br> |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ matrix-button | $ matrix-button | ||
Line 103: | Line 238: | ||
===Code Sample=== | ===Code Sample=== | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
+ | static struct sensor button[] = { | ||
+ | { | ||
+ | GPIO_PIN(7), | ||
+ | IRQ_TYPE_EDGE_FALLING, | ||
+ | } | ||
+ | }; | ||
int main(int argc, char ** argv) | int main(int argc, char ** argv) | ||
{ | { | ||
Line 110: | Line 251: | ||
int devFD = -1; | int devFD = -1; | ||
− | printf("Using | + | 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) { | if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | ||
printf("Fail to init sensor\n"); | printf("Fail to init sensor\n"); | ||
Line 132: | Line 277: | ||
==Connect to NanoPi== | ==Connect to NanoPi== | ||
===Preparations=== | ===Preparations=== | ||
− | Please install a Debian on a NanoPi and an appropriate cross compiler on a PC. Please refer to wiki:[[NanoPi/zh|NanoPi]] <br> | + | 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> | Compile a NanoPi kernel. Note: please use the kernel's source code from the nanopi-v4.1.y-matrix branch.<br> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Line 142: | Line 287: | ||
$ make | $ make | ||
</syntaxhighlight> | </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=== | ===Hardware Connection=== | ||
Line 176: | Line 322: | ||
===Run Test Program=== | ===Run Test Program=== | ||
− | Please | + | 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"> | <syntaxhighlight lang="bash"> | ||
− | $ cp install/ | + | $ cp install/lib/* /media/rootfs/lib/ -d |
− | $ cp install/ | + | $ cp install/usr/bin/* /media/rootfs/usr/bin/ |
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Insert this TF card to your NanoPi, power on and run the following commands.<br> | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ matrix-button | $ matrix-button | ||
Line 189: | Line 336: | ||
===Code Sample=== | ===Code Sample=== | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
− | + | int main(int argc, char ** argv) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | int main( | + | |
{ | { | ||
int i; | int i; | ||
Line 202: | Line 342: | ||
char value[ARRAY_SIZE(button)]; | char value[ARRAY_SIZE(button)]; | ||
int devFD = -1; | int devFD = -1; | ||
+ | |||
+ | printf("Using pin GPIO_PIN1\n"); | ||
if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | ||
printf("Fail to init sensor\n"); | printf("Fail to init sensor\n"); | ||
Line 207: | Line 349: | ||
} | } | ||
printf("Press the button...\n"); | printf("Press the button...\n"); | ||
− | if (( retSize = sensorRead(devFD, value, ARRAY_SIZE(button)) ) == -1) { | + | if ((retSize = sensorRead(devFD, value, ARRAY_SIZE(button))) == -1) { |
printf("Fail to read sensors\n"); | printf("Fail to read sensors\n"); | ||
} | } | ||
Line 259: | Line 401: | ||
===Run Test Program=== | ===Run Test Program=== | ||
− | Please | + | 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"> | <syntaxhighlight lang="bash"> | ||
− | $ cp install/usr/bin/* | + | $ cp install/usr/bin/* /media/rootfs/usr/bin/ |
− | $ cp install/lib/* | + | $ cp install/lib/* /media/rootfs/lib/ -d |
</syntaxhighlight> | </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"> | <syntaxhighlight lang="bash"> | ||
$ matrix-button | $ matrix-button | ||
</syntaxhighlight> | </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=== | ===Code Sample=== | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
− | + | int main(int argc, char ** argv) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | int main( | + | |
{ | { | ||
int i; | int i; | ||
Line 285: | Line 422: | ||
char value[ARRAY_SIZE(button)]; | char value[ARRAY_SIZE(button)]; | ||
int devFD = -1; | int devFD = -1; | ||
+ | |||
+ | printf("Using pin GPIO_PIN1\n"); | ||
if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | if ((devFD =sensorInit(button, ARRAY_SIZE(button))) == -1) { | ||
printf("Fail to init sensor\n"); | printf("Fail to init sensor\n"); | ||
Line 290: | Line 429: | ||
} | } | ||
printf("Press the button...\n"); | printf("Press the button...\n"); | ||
− | if (( retSize = sensorRead(devFD, value, ARRAY_SIZE(button)) ) == -1) { | + | if ((retSize = sensorRead(devFD, value, ARRAY_SIZE(button))) == -1) { |
printf("Fail to read sensors\n"); | printf("Fail to read sensors\n"); | ||
} | } | ||
Line 307: | Line 446: | ||
==Connect to Arduino== | ==Connect to Arduino== | ||
+ | ---> | ||
==Resources== | ==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 | ||
<!-- | <!-- |
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