前の記事の回路などが思いきり間違っていたので修正しつつ、CapSenseとLED4つずつに増やした。
多分、マイコンの足の数だ増やせる。

例によってコードはBitbucketにアップした




CapSense CSDウィザードで4つスイッチを置いて
capsenseたくさん


AnalogMUXBusに接続されている事を確認
capsenseたくさん


CSDの設定。しきい値などをかなり何度も直した。適当にやってたので理論をわかってないんだけど、どうやらセンサ部分の形状や配置に応じて微調整しなければ使い物にならないっぽい。
capsenseたくさん


ピンの設定。LEDが4つにした。
使ってないピンをPull Upにしておくとノイズが来ないので安定する事に気づいた。
capsenseたくさん


実体配置図
capsenseたくさん


前の記事の回路が間違っていて、あのままではうまく動かなかったが、1kΩの抵抗と0.1μFのキャパシタを足したら複数認識できるようになった。

CapSense CSDのデータシートにあった図。抵抗とキャパシタが必要らしい
capsenseたくさん

P1[5]とP0[3]の間に1kΩを入れて、P0[3]からキャパシタを通して銅箔テープに延ばす。
R0011375
前の記事はP1[5]とP0[3]で静電容量取ろうとしてたので、思いっきり間違ってた。



プログラム。
前のやつのif(CSD_1_bIsSensorActive(センサ番号))を増やしただけ。
shokai / CapSense LED / source — bitbucket.org
main.c

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#define _BV(BIT) (1<<BIT)
#define sbi(BYTE,BIT) (BYTE |= _BV(BIT))
#define cbi(BYTE,BIT) (BYTE &= ~_BV(BIT))
#define LED_0_ON() sbi(PRT1DR, 7);
#define LED_0_OFF() cbi(PRT1DR, 7);
#define LED_1_ON() sbi(PRT0DR, 1);
#define LED_1_OFF() cbi(PRT0DR, 1);
#define LED_2_ON() sbi(PRT0DR, 5);
#define LED_2_OFF() cbi(PRT0DR, 5);
#define LED_3_ON() sbi(PRT0DR, 7);
#define LED_3_OFF() cbi(PRT0DR, 7);


void main()
{
  M8C_EnableGInt;
  CSD_1_Start();
  CSD_1_InitializeBaselines();
  CSD_1_SetDefaultFingerThresholds();
  while(1){
    CSD_1_ScanAllSensors();
    CSD_1_UpdateAllBaselines();
    if(CSD_1_bIsSensorActive(0)){
      LED_0_ON();
    }
    else{
      LED_0_OFF();
    }

    if(CSD_1_bIsSensorActive(1)){
      LED_1_ON();
    }
    else{
      LED_1_OFF();
    }
    if(CSD_1_bIsSensorActive(2)){
      LED_2_ON();
    }
    else{
      LED_2_OFF();
    }
    if(CSD_1_bIsSensorActive(3)){
      LED_3_ON();
    }
    else{
      LED_3_OFF();
    }
  }
}




電源を5VのACアダプタにしたらすっきりしたので、大学院棟の俺の机に置いておきます
さわると光ります
R0011369