LoginSignup
11
3

More than 5 years have passed since last update.

ロジック系モジュールをArduinoモジュールでも表現する

Last updated at Posted at 2016-11-30

せいごです。littleBitsアドベントカレンダー1日目です。はじまりました!!

littleBitsのラインナップにはEXPANSION PACKSという、あるテーマに沿って揃えられた拡張パックなるものがありまして、KITのように色々遊べる用途とはちょっと方向性の違ったものがあります。

その中で、回路の理論を学べるLOGIC EXPANSION PACKSというものがありまして、実は買ってみたもののうまく扱えていなかったので、ロジック系モジュールをArduinoモジュールでも表現して学んでみることにします。

image

この試みはArduinoモジュールで同様の動きを再現することに注力しております。

Arduinoモジュールまわりの用意

まず、準備。

  • ボタンモジュール x 2
  • BAR GRAPHモジュール
  • Arduinoモジュール
  • USB POWERモジュール

Arduinoモジュールにボタンを2つ装着します。上部のd0/rxとなっているところは、 digitalRead(0); で、下部のa1となっているところは digitalRead(A1) で値を取得します。今回はON/OFFをとるだけなのでdigitalReadでやります。

image

実際にこれでなにかが起こるわけではないですが取得のコードとしては以下となります。

littleBits_LOGIC_basic.ino
void setup() {
  pinMode(0,INPUT);
  pinMode(A1,INPUT);
  pinMode(5,OUTPUT);
}

void loop() {
  // 入力を取得
  int inputA = digitalRead(0);
  int inputB = digitalRead(A1);
}

BAR GRAPHモジュールはd5と書かれているポートにつなぎます。

詳しいArduinoモジュールの動作が気になる方は、私の記事 littleBitsのArduinoモジュールで簡単にプログラミングをはじめてみよう をご参考下さい。

double AND

入力が両方ONだと出力が動作するONでモジュール。

image

論理積とは|AND - 意味 / 定義 / 解説 / 説明 : IT用語辞典

入力A 入力B 出力
- - -
ON - -
- ON -
ON ON ON

Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。

littleBits_LOGIC_doubleAND.ino
void setup() {
  pinMode(0,INPUT);
  pinMode(A1,INPUT);
  pinMode(5,OUTPUT);
}

void loop() {
  // 入力を取得
  int inputA = digitalRead(0);
  int inputB = digitalRead(A1);
  // LOGIC
  if(inputA && inputB){
    digitalWrite(5,HIGH);
  } else {
    digitalWrite(5,LOW);
  }
}

double OR

入力がどちらか片方ONであれば出力がONで動作するモジュール。

image

論理和とは|OR - 意味 / 定義 / 解説 / 説明 : IT用語辞典

入力A 入力B 出力
- - -
ON - ON
- ON ON
ON ON ON

Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。

littleBits_LOGIC_doubleOR.ino
void setup() {
  pinMode(0,INPUT);
  pinMode(A1,INPUT);
  pinMode(5,OUTPUT);
}

void loop() {
  // 入力を取得
  int inputA = digitalRead(0);
  int inputB = digitalRead(A1);
  // LOGIC
  if(inputA || inputB){
    digitalWrite(5,HIGH);
  } else {
    digitalWrite(5,LOW);
  }
}

XOR

2つの入力のどちらか片方がONだと出力がONで動作するモジュール。

image

XORとは|排他的論理和|EOR|EX-OR|eXclusive OR - 意味 / 定義 / 解説 / 説明 : IT用語辞典

入力A 入力B 出力
- - -
ON - ON
- ON ON
ON ON -

Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。

littleBits_LOGIC_XOR.ino
void setup() {
  pinMode(0,INPUT);
  pinMode(A1,INPUT);
  pinMode(5,OUTPUT);
}

void loop() {
  // 入力を取得
  int inputA = digitalRead(0);
  int inputB = digitalRead(A1);
  // LOGIC
  if(inputA != inputB){
    digitalWrite(5,HIGH);
  } else {
    digitalWrite(5,LOW);
  }
}

NAND

2つの入力にOFFが含まれていると出力がONで動作するモジュール。

image

NANDとは|否定論理積|Not AND - 意味 / 定義 / 解説 / 説明 : IT用語辞典

入力A 入力B 出力
- - ON
ON - ON
- ON ON
ON ON -

Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。

NAND
void setup() {
  pinMode(0,INPUT);
  pinMode(A1,INPUT);
  pinMode(5,OUTPUT);
}

void loop() {
  // 入力を取得
  int inputA = digitalRead(0);
  int inputB = digitalRead(A1);
  // LOGIC
  if(inputA == 0 || inputB == 0 ){
    digitalWrite(5,HIGH);
  } else {
    digitalWrite(5,LOW);
  }
}

NOR

2つの入力が両方OFFだと出力がONで動作するモジュール。

image

NORとは|否定論理和|Not OR - 意味 / 定義 / 解説 / 説明 : IT用語辞典

入力A 入力B 出力
- - ON
ON - -
- ON -
ON ON -

Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。

littleBits_LOGIC_NOR.ino
void setup() {
  pinMode(0,INPUT);
  pinMode(A1,INPUT);
  pinMode(5,OUTPUT);
}

void loop() {
  // 入力を取得
  int inputA = digitalRead(0);
  int inputB = digitalRead(A1);
  // LOGIC
  if(inputA == 0 && inputB == 0 ){
    digitalWrite(5,HIGH);
  } else {
    digitalWrite(5,LOW);
  }
}

やってみて

実際のハードの動作から、あえてプログラムで再度起こす感覚は思ったより楽しかった。単純な動きでも、同様にコピーできると達成感がありますね!

ビット演算子でもっとロジックに則して作る方法も考えたけど、今回は動作を似せる重視でやってみました。それはそれで今度やってみたい。

このような感じでいろいろな形でlittleBitsのことを掘り下げて話していきましょう!littleBitsアドベントカレンダースタートです!

みなさんよろしくお願いしますー!

11
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3