Seeeduino XIAOのデジタル入力

Seeed K.K. エンジニアブログにも記事をポストしていますが、雑多な感じのものはこっちの個人ブログへポストすることにします。

今回は、デジタル入力を確認しましょう。

ハードウェア

デジタル出力のときと同様、(電源を除いた)全ピンで入力できるようです。

f:id:matsujirushix:20200418162232p:plain

なので、D0にタクトスイッチ経由で3V3(3.3V)に結線し、かつ、D0を抵抗経由でGNDに結線しました。

f:id:matsujirushix:20200418200744p:plain

ソフトウェア

タクトスイッチを押したときに、オンボードの黄色LEDを点灯するコードを作成しました。
オンボードの黄色LEDは13で、論理が反対(LOWで点灯)なので注意してください。

constexpr int BTN = 0;  // D0
constexpr int LED = 13; // YELLOW_LED

void setup()
{
  pinMode(BTN, INPUT);
  pinMode(LED, OUTPUT);
}

void loop()
{
  digitalWrite(LED, digitalRead(BTN) ? LOW : HIGH);
}

実行!

タクトスイッチを押すと、黄色LEDが点灯しました。(動画は割愛w)

プルアップ/プルダウン抵抗って省略できないの?

SAMD21マイコンのPORTには、内蔵プルアップ/プルダウンの機能があります。
↓データシートから抜粋
f:id:matsujirushix:20200418201437p:plain

Platformにも、それらしい定義があるので試してみることに。

f:id:matsujirushix:20200418201544p:plain

ハードウェアはこちら。プルダウン抵抗を取っ払いました。
f:id:matsujirushix:20200418201637p:plain

ソフトウェアは、pinMode()で指定していたINPUTINPUT_PULLUPにしました。

constexpr int BTN = 0;  // D0
constexpr int LED = 13; // YELLOW_LED

void setup()
{
  pinMode(BTN, INPUT_PULLDOWN); // <---
  pinMode(LED, OUTPUT);
}

void loop()
{
  digitalWrite(LED, digitalRead(BTN) ? LOW : HIGH);
}

結果、ちゃんと動作しましたー

おしまい。