This program is a sample program for operation check of the library to perform the SW recognition.
SW認識Library(SWDigital)のサンプルプログラムの説明
<概要>
SW認識させるLibrary(SWDigital)と、Libraryを使用したサンプルプログラムについて説明します。
Libraryとサンプルプログラムは次のアドレスからダウンロードできます。
Library:
http://mbed.org/users/suupen/code/SwDigital/#af5fbc75b7bf
サンプルプログラム:
http://mbed.org/users/suupen/code/SwDigitalLibraryExampleProgram/file/3f5813718d33/SwDigital.lib
サンプルプログラムの動作例
<Libraryについて>
SWのレベルを10[ms]毎に認識して、レベルが3回一致したら、そのレベルを確定値として認識します。
このため、SW操作をして認識値が変化するまでに30[ms]必要になります。
複数回のレベル認識をして確定値を決めるので、SW操作によるチャタリングノイズの除去が可能です。
SW認識に使用する端子は、mbed内部でプルアップしているので、外部にプルアップ抵抗を接続する必要はありません。
このLibraryで使用するmbed機能
- チッカータイマー(Ticker) 1[us]単位、10[ms]周期
- デジタル入力(DigitalIn) プルアップ有効
SW入力に設定可能な端子(LPC1768)
- p5~p30 の内の20本
SW認識処理の変更方法
- SwDitital.h内の定義を変更することで、以下の条件を変更できます。
- SW認識周期:Z_matchcycle 設定範囲:10[ms](10000)~100[ms](100000) (1[us/count])
- SW一致回数:Z_itchPattern 設定範囲:3~8[回]
SwDigital.hの設定箇所
Libraryの使い方
サンプルプログラムより
- SW認識する端子の指定: swDigital
- SWのレベル認識関数 :checkLevel(swNo)
- SWのONエッジ認識関数 :checkEdgeOn(swNo)
- SWのOFFエッジ認識関数:checkEdgeOff(swNo)
引数のswNoは、端子定義関数のswDigitalの引数のポートの順番(0~19)
<サンプルプログラムについて>
mbed(LPC1768)を使用しています。SWは2つ使用しており、
- SW1 : P10
- SW2 : P20
に接続します。
回路図
SW1ではSWのレベル認識(OFFなのかONなのかを判定)させてLED1、LED2を制御します。
SW1 がOFFのときは、mbed(LPC1768)のLED2が点灯します。
ON の時は、 LED1が点灯します。
SW2ではSWのエッジ認識(OFF→ON、ON→OFFの変化)させてLED3,LED4を制御します。
SW2 をOFF→ON、ON→OFFの変化をカウントしてLED3,LED4を点滅させます。
以上
main.cpp@0:325de76ccf53, 2013-12-21 (annotated)
- Committer:
- suupen
- Date:
- Sat Dec 21 08:29:12 2013 +0000
- Revision:
- 0:325de76ccf53
- Child:
- 1:3f5813718d33
In this version, I changed the number of terminal SW;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
suupen | 0:325de76ccf53 | 1 | //============================================ |
suupen | 0:325de76ccf53 | 2 | // SwDigital Library example program |
suupen | 0:325de76ccf53 | 3 | // |
suupen | 0:325de76ccf53 | 4 | // <schematic> |
suupen | 0:325de76ccf53 | 5 | // |
suupen | 0:325de76ccf53 | 6 | // mbed |
suupen | 0:325de76ccf53 | 7 | // sw1 |
suupen | 0:325de76ccf53 | 8 | // ---- |
suupen | 0:325de76ccf53 | 9 | // p10 --------o o----------- GND |
suupen | 0:325de76ccf53 | 10 | // |
suupen | 0:325de76ccf53 | 11 | // sw2 |
suupen | 0:325de76ccf53 | 12 | // ---- |
suupen | 0:325de76ccf53 | 13 | // p20 --------o o------------GND |
suupen | 0:325de76ccf53 | 14 | // |
suupen | 0:325de76ccf53 | 15 | //============================================= |
suupen | 0:325de76ccf53 | 16 | |
suupen | 0:325de76ccf53 | 17 | |
suupen | 0:325de76ccf53 | 18 | #include "mbed.h" |
suupen | 0:325de76ccf53 | 19 | #include "SwDigital.h" |
suupen | 0:325de76ccf53 | 20 | |
suupen | 0:325de76ccf53 | 21 | SwDigital sw(p10,p20); // p10 : sw1 control LED1,LED2 |
suupen | 0:325de76ccf53 | 22 | // p20 : sw2 control LED3,LED4 |
suupen | 0:325de76ccf53 | 23 | enum{ |
suupen | 0:325de76ccf53 | 24 | sw1, |
suupen | 0:325de76ccf53 | 25 | sw2 |
suupen | 0:325de76ccf53 | 26 | }; |
suupen | 0:325de76ccf53 | 27 | |
suupen | 0:325de76ccf53 | 28 | DigitalOut led1(LED1); |
suupen | 0:325de76ccf53 | 29 | DigitalOut led2(LED2); |
suupen | 0:325de76ccf53 | 30 | DigitalOut led3(LED3); |
suupen | 0:325de76ccf53 | 31 | DigitalOut led4(LED4); |
suupen | 0:325de76ccf53 | 32 | |
suupen | 0:325de76ccf53 | 33 | int main() { |
suupen | 0:325de76ccf53 | 34 | while(1) { |
suupen | 0:325de76ccf53 | 35 | //============================================== |
suupen | 0:325de76ccf53 | 36 | // sw1 - LED1,LED2 control |
suupen | 0:325de76ccf53 | 37 | //============================================== |
suupen | 0:325de76ccf53 | 38 | // sw level and edge data refresh |
suupen | 0:325de76ccf53 | 39 | sw.refreshEdgeData(); |
suupen | 0:325de76ccf53 | 40 | |
suupen | 0:325de76ccf53 | 41 | // tact action (sw level = on : led1 = on) |
suupen | 0:325de76ccf53 | 42 | led1 = sw.checkLevel(sw1); |
suupen | 0:325de76ccf53 | 43 | |
suupen | 0:325de76ccf53 | 44 | // tact action (sw level = off : led2 = on) |
suupen | 0:325de76ccf53 | 45 | led2 = !sw.checkLevel(sw1); |
suupen | 0:325de76ccf53 | 46 | |
suupen | 0:325de76ccf53 | 47 | //============================================== |
suupen | 0:325de76ccf53 | 48 | // sw2 - LED3,LED4 control |
suupen | 0:325de76ccf53 | 49 | //============================================== |
suupen | 0:325de76ccf53 | 50 | // toggle action (level Off to On) |
suupen | 0:325de76ccf53 | 51 | if(sw.checkEdgeOn(sw2) == 1){ |
suupen | 0:325de76ccf53 | 52 | led3 = !led3; |
suupen | 0:325de76ccf53 | 53 | } |
suupen | 0:325de76ccf53 | 54 | |
suupen | 0:325de76ccf53 | 55 | // toggle action (level On to Off) |
suupen | 0:325de76ccf53 | 56 | if(sw.checkEdgeOff(sw2) == 1){ |
suupen | 0:325de76ccf53 | 57 | led4 = !led4; |
suupen | 0:325de76ccf53 | 58 | } |
suupen | 0:325de76ccf53 | 59 | } |
suupen | 0:325de76ccf53 | 60 | } |