Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

せいごです。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アドベントカレンダースタートです!

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした