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

以上

Committer:
suupen
Date:
Sun Feb 12 00:52:09 2012 +0000
Revision:
0:7ce3de2c24c3
Child:
1:c4d2d6df69ce
2012/02/12 : V1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:7ce3de2c24c3 1 //********************************************************************
suupen 0:7ce3de2c24c3 2 // SwAnalogInput Library example program
suupen 0:7ce3de2c24c3 3 // mbed no analog port de 3hon no sw wo ninsiki suru.
suupen 0:7ce3de2c24c3 4 // 6hon no analog port (p15 - p20) de 6 * 3 = 18 ko no sw ninsiki ga dekiru.
suupen 0:7ce3de2c24c3 5 //
suupen 0:7ce3de2c24c3 6 // <schematic>
suupen 0:7ce3de2c24c3 7 // -.- mbed VOUT(+3.3[V])
suupen 0:7ce3de2c24c3 8 // | |--------------------> mbed p20(ADinput)
suupen 0:7ce3de2c24c3 9 // | --------- --------- --------- | ---------
suupen 0:7ce3de2c24c3 10 // .---| Rsw2 |---.---| Rsw1 |---.---| Rsw0 |---.---| Rout |----|
suupen 0:7ce3de2c24c3 11 // | --------- | --------- | --------- | --------- |
suupen 0:7ce3de2c24c3 12 // | ---- | ----- | ----- | |
suupen 0:7ce3de2c24c3 13 // |-----o o------.-----o o------.-----o o------| -----
suupen 0:7ce3de2c24c3 14 // SW2 SW1 SW0 mbed GND(0[V])
suupen 0:7ce3de2c24c3 15 //
suupen 0:7ce3de2c24c3 16 // Rsw2 : 8.2[kohm], Rsw1 = 3.9[kohm], Rsw0 = 2.0[kohm], Rout = 1.0[kohm] (R no seido ha +-1[%])
suupen 0:7ce3de2c24c3 17 //
suupen 0:7ce3de2c24c3 18 // <program no naiyo>
suupen 0:7ce3de2c24c3 19 // mbed LED1 : sw0 no level de tento sw Off = led Off, sw On = led On
suupen 0:7ce3de2c24c3 20 // mbed LED2 : sw1 no level de tento sw Off = led Off, sw On = led On
suupen 0:7ce3de2c24c3 21 // mbed LED3 : sw2 no level de tento sw Off = led Off, sw On = led On
suupen 0:7ce3de2c24c3 22 // mbed LED4 : sw0,sw1,sw2 no Off kara On henka de led tento jotai wo hanten.
suupen 0:7ce3de2c24c3 23 //
suupen 0:7ce3de2c24c3 24 //
suupen 0:7ce3de2c24c3 25 // <rireki>
suupen 0:7ce3de2c24c3 26 // 2012/02/12 : syohan
suupen 0:7ce3de2c24c3 27 // *********************************************************************
suupen 0:7ce3de2c24c3 28
suupen 0:7ce3de2c24c3 29 #include "mbed.h"
suupen 0:7ce3de2c24c3 30 #include "SwAnalog.h"
suupen 0:7ce3de2c24c3 31
suupen 0:7ce3de2c24c3 32 DigitalOut led1(LED1);
suupen 0:7ce3de2c24c3 33 DigitalOut led2(LED2);
suupen 0:7ce3de2c24c3 34 DigitalOut led3(LED3);
suupen 0:7ce3de2c24c3 35 DigitalOut led4(LED4);
suupen 0:7ce3de2c24c3 36
suupen 0:7ce3de2c24c3 37 SwAnalog sw(p20); // p20(adinput) :sw0,sw1,sw2
suupen 0:7ce3de2c24c3 38
suupen 0:7ce3de2c24c3 39 int main() {
suupen 0:7ce3de2c24c3 40 while(1) {
suupen 0:7ce3de2c24c3 41 // sw level and edge data refresh
suupen 0:7ce3de2c24c3 42 sw.refreshEdgeData();
suupen 0:7ce3de2c24c3 43
suupen 0:7ce3de2c24c3 44 // tact action (sw0 level = on : led1 = on)
suupen 0:7ce3de2c24c3 45 led1 = sw.checkLevel(0);
suupen 0:7ce3de2c24c3 46
suupen 0:7ce3de2c24c3 47 // tact action (sw1 level = off : led2 = on)
suupen 0:7ce3de2c24c3 48 led2 = sw.checkLevel(1);
suupen 0:7ce3de2c24c3 49
suupen 0:7ce3de2c24c3 50 // tact action (sw2 level = off : led3 = on)
suupen 0:7ce3de2c24c3 51 led3 = sw.checkLevel(2);
suupen 0:7ce3de2c24c3 52
suupen 0:7ce3de2c24c3 53 // toggle action (sw0 to sw3 level Off to On : led4 invert )
suupen 0:7ce3de2c24c3 54 if((sw.checkEdgeOn(0) == 1) // sw0
suupen 0:7ce3de2c24c3 55 || (sw.checkEdgeOn(1) == 1) // sw1
suupen 0:7ce3de2c24c3 56 || (sw.checkEdgeOn(2) == 1) // sw2
suupen 0:7ce3de2c24c3 57 ){
suupen 0:7ce3de2c24c3 58 led4 = !led4;
suupen 0:7ce3de2c24c3 59 }
suupen 0:7ce3de2c24c3 60 }
suupen 0:7ce3de2c24c3 61 }