This program is used to verify the operations of the library SW recognize an analog port.

Dependencies:   SwAnalog_LPC1768 mbed

Fork of SwAnalogInputLibraryExampleProgram by suu pen

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/)

/media/uploads/suupen/analogsw--.jpg
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[回]

/media/uploads/suupen/sw---------.jpg
SwAnalog.hの設定箇所

Libraryの使い方

/media/uploads/suupen/---------.jpg
サンプルプログラムより

  • 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
に接続します。

/media/uploads/suupen/samplesw--.jpg
回路図

/media/uploads/suupen/-------p1170483.jpg
ブレットボードでの配線

プログラムの動作内容

  • 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の出力を反転させます。

以上

Files at this revision

API Documentation at this revision

Comitter:
suupen
Date:
Sun Feb 12 00:52:09 2012 +0000
Child:
1:c4d2d6df69ce
Commit message:
2012/02/12 : V1.0

Changed in this revision

SwAnalog.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SwAnalog.lib	Sun Feb 12 00:52:09 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/suupen/code/SwAnalog/#ba027616fdf1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Feb 12 00:52:09 2012 +0000
@@ -0,0 +1,61 @@
+//********************************************************************
+// 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.
+//
+// <schematic>
+//   -.- mbed VOUT(+3.3[V])
+//    |                                               |--------------------> mbed p20(ADinput)
+//    |   ---------       ---------       ---------   |   ---------
+//    .---| Rsw2  |---.---| Rsw1  |---.---| Rsw0  |---.---| Rout  |----|
+//    |   ---------   |   ---------   |   ---------   |   ---------    |
+//    |     ----      |     -----     |     -----     |                |
+//    |-----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[%])
+//
+// <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.
+//
+// 
+// <rireki>
+// 2012/02/12 : syohan
+// *********************************************************************
+
+#include "mbed.h"
+#include "SwAnalog.h"
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+SwAnalog sw(p20);  // p20(adinput) :sw0,sw1,sw2
+                   
+int main() {
+    while(1) {
+        // sw level and 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);
+        
+        // tact action (sw2 level = off : led3 = on)
+        led3 = sw.checkLevel(2);
+        
+        // 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;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Feb 12 00:52:09 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/b4b9f287a47e