This program is used to verify the operations of the library SW recognize an analog port.
Dependencies: SwAnalog_LPC1768 mbed
Fork of SwAnalogInputLibraryExampleProgram by
SW認識Library(SWAnalog)のサンプルプログラムの説明
<概要>
SW認識させるLibrary(SwAnalog)と、Libraryを使用したサンプルプログラムについて説明します。
Libraryとサンプルプログラムは次のアドレスからダウンロードできます。
Library:
http://mbed.org/users/suupen/code/SwAnalog_LPC1768/
サンプルプログラム:
http://mbed.org/users/suupen/code/SwAnalogInputLibraryExampleProgram/
サンプルプログラムの動作
<Libraryについて>
SWの状態を、抵抗による電圧の分圧比の変化で認識します。
使用する抵抗は、精度±1[%]のもの(金属皮膜抵抗)を使います。
(共立エレショップ:http://eleshop.jp/shop/c/c110312/)
SW認識回路
アナログポートから読み込んだアナログ認識値から、SWのON,OFF状態を判定します。
この判定値を10[ms]毎に更新して、判定値が3回一致したら、その判定値を確定値として認識します。
このため、SW操作をして認識値が変化するまでに30[ms]必要になります。
複数回のレベル認識をして確定値を決めるので、SW操作によるチャタリングノイズの除去が可能です。
このLibraryで使用するmbed機能
- チッカータイマー(Ticker) 1[us]単位、10[ms]周期
- アナログ入力(AnalogIn)
SW入力に設定可能な端子(LPC1768)
- p15~p20 の内の6本
(各端子に3本のSW認識が可能で、合計18本のSW認識が可能)
SW認識処理の変更方法
SwDitital.h内の定義を変更することで、以下の条件を変更できます。
- SW認識周期:Z_matchcycle 設定範囲:10[ms](10000)~100[ms](100000) (1[us/count])
- SW一致回数:Z_itchPattern 設定範囲:3~8[回]
SwAnalog.hの設定箇所
Libraryの使い方
サンプルプログラムより
- SW認識する端子の指定: swAnalog
- SWのレベル認識関数 :checkLevel(swNo)
- SWのONエッジ認識関数 :checkEdgeOn(swNo)
- SWのOFFエッジ認識関数:checkEdgeOff(swNo)
引数のswNoは、端子定義関数のswAnalogの第一引数には,0,1,2、第二引数には3,4,5と割り振られていきます。
<サンプルプログラムについて>
mbed(LPC1768)を使用しています。SWは3つ使用しており、
アナログポートのP20
に接続します。
回路図
ブレットボードでの配線
プログラムの動作内容
- SW0、SW1では、SWのレベル認識(OFFなのかONなのかを判定)する例です。
SW0は、ONしている間、LED1を点灯させます。
SW1は、OFFしている間、LED2を点灯させます。
- SW2では、SWのエッジ認識(OFF→ON、ON→OFF)する例です。
SW2のONエッジ(OFF→ON)の時に、LED3の出力を反転させます。
SW2のOFFエッジ(ON→OFF)の時に、LED4の出力を反転させます。
以上
Revision 1:c4d2d6df69ce, committed 2013-12-22
- Comitter:
- suupen
- Date:
- Sun Dec 22 09:27:26 2013 +0000
- Parent:
- 0:7ce3de2c24c3
- Commit message:
- This program is used to verify the operations of the library SW recognize an analog port.
Changed in this revision
diff -r 7ce3de2c24c3 -r c4d2d6df69ce SwAnalog.lib --- a/SwAnalog.lib Sun Feb 12 00:52:09 2012 +0000 +++ b/SwAnalog.lib Sun Dec 22 09:27:26 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/suupen/code/SwAnalog/#ba027616fdf1 +http://mbed.org/users/suupen/code/SwAnalog_LPC1768/#3cdb536ed157
diff -r 7ce3de2c24c3 -r c4d2d6df69ce main.cpp --- a/main.cpp Sun Feb 12 00:52:09 2012 +0000 +++ b/main.cpp Sun Dec 22 09:27:26 2013 +0000 @@ -1,11 +1,11 @@ -//******************************************************************** +// ******************************************************************** // SwAnalogInput Library example program -// mbed no analog port de 3hon no sw wo ninsiki suru. -// 6hon no analog port (p15 - p20) de 6 * 3 = 18 ko no sw ninsiki ga dekiru. +// Per pin analog port, SW recognition There are three possible. // // <schematic> // -.- mbed VOUT(+3.3[V]) // | |--------------------> mbed p20(ADinput) +// | 8.2[kohm] 3.9[kohm] 2.0[kohm] | 1.0[kohm] // | --------- --------- --------- | --------- // .---| Rsw2 |---.---| Rsw1 |---.---| Rsw0 |---.---| Rout |----| // | --------- | --------- | --------- | --------- | @@ -13,17 +13,20 @@ // |-----o o------.-----o o------.-----o o------| ----- // SW2 SW1 SW0 mbed GND(0[V]) // -// Rsw2 : 8.2[kohm], Rsw1 = 3.9[kohm], Rsw0 = 2.0[kohm], Rout = 1.0[kohm] (R no seido ha +-1[%]) +// +// Accuracy of the resistance value that is within ± 1% // -// <program no naiyo> -// mbed LED1 : sw0 no level de tento sw Off = led Off, sw On = led On -// mbed LED2 : sw1 no level de tento sw Off = led Off, sw On = led On -// mbed LED3 : sw2 no level de tento sw Off = led Off, sw On = led On -// mbed LED4 : sw0,sw1,sw2 no Off kara On henka de led tento jotai wo hanten. +// <Operation details of this program> +// mbed LED1 : When it detects the ON level of the SW0, and turns the LED1. +// mbed LED2 : When it detects the OFF level of the SW1, and turns the LED2. +// mbed LED3 : When it detects the ON edge of SW2, inverting the output to LED3. +// mbed LED4 : When it detects the OFF edge of SW2, inverting the output to LED4. // // -// <rireki> -// 2012/02/12 : syohan +// <history> +// 120212 : first edtion +// 131221 : In this edition, I have changed the behavior of the program content +// // ********************************************************************* #include "mbed.h" @@ -35,27 +38,42 @@ DigitalOut led4(LED4); SwAnalog sw(p20); // p20(adinput) :sw0,sw1,sw2 + +enum{ + sw0 = 0, + sw1, + sw2 + }; int main() { while(1) { - // sw level and edge data refresh + //=========================================== + // sw edge data refresh + //=========================================== sw.refreshEdgeData(); - - // tact action (sw0 level = on : led1 = on) - led1 = sw.checkLevel(0); - - // tact action (sw1 level = off : led2 = on) - led2 = sw.checkLevel(1); + + //=========================================== + // SW level action + //=========================================== + // sw0 : OFF:LED1=ON ON:LED1=OFF + led1 = sw.checkLevel(sw0); - // tact action (sw2 level = off : led3 = on) - led3 = sw.checkLevel(2); + // sw1 : OFF:LED2=OFF ON:LED2=ON + led2 = !sw.checkLevel(sw1); - // toggle action (sw0 to sw3 level Off to On : led4 invert ) - if((sw.checkEdgeOn(0) == 1) // sw0 - || (sw.checkEdgeOn(1) == 1) // sw1 - || (sw.checkEdgeOn(2) == 1) // sw2 - ){ - led4 = !led4; + //=========================================== + // SW edge action + //=========================================== + // sw2 on edge : LED3 invert + if(sw.checkEdgeOn(sw2) == 1){ + led3 = !led3; + } + + // sw2 off edge : LED4 invert + if(sw.checkEdgeOff(sw2) == 1){ + led4 = !led4; } } + + }
diff -r 7ce3de2c24c3 -r c4d2d6df69ce mbed.bld --- a/mbed.bld Sun Feb 12 00:52:09 2012 +0000 +++ b/mbed.bld Sun Dec 22 09:27:26 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/b4b9f287a47e +http://mbed.org/users/mbed_official/code/mbed/builds/b4b9f287a47e \ No newline at end of file