せいごです。littleBitsアドベントカレンダー1日目です。はじまりました!!
littleBitsのラインナップにはEXPANSION PACKSという、あるテーマに沿って揃えられた拡張パックなるものがありまして、KITのように色々遊べる用途とはちょっと方向性の違ったものがあります。
その中で、回路の理論を学べるLOGIC EXPANSION PACKSというものがありまして、実は買ってみたもののうまく扱えていなかったので、ロジック系モジュールをArduinoモジュールでも表現して学んでみることにします。
この試みはArduinoモジュールで同様の動きを再現することに注力しております。
Arduinoモジュールまわりの用意
まず、準備。
- ボタンモジュール x 2
- BAR GRAPHモジュール
- Arduinoモジュール
- USB POWERモジュール
Arduinoモジュールにボタンを2つ装着します。上部のd0/rxとなっているところは、 digitalRead(0);
で、下部のa1となっているところは digitalRead(A1)
で値を取得します。今回はON/OFFをとるだけなのでdigitalReadでやります。
実際にこれでなにかが起こるわけではないですが取得のコードとしては以下となります。
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でモジュール。
論理積とは|AND - 意味 / 定義 / 解説 / 説明 : IT用語辞典
入力A | 入力B | 出力 |
---|---|---|
- | - | - |
ON | - | - |
- | ON | - |
ON | ON | ON |
Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。
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で動作するモジュール。
論理和とは|OR - 意味 / 定義 / 解説 / 説明 : IT用語辞典
入力A | 入力B | 出力 |
---|---|---|
- | - | - |
ON | - | ON |
- | ON | ON |
ON | ON | ON |
Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。
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で動作するモジュール。
XORとは|排他的論理和|EOR|EX-OR|eXclusive OR - 意味 / 定義 / 解説 / 説明 : IT用語辞典
入力A | 入力B | 出力 |
---|---|---|
- | - | - |
ON | - | ON |
- | ON | ON |
ON | ON | - |
Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。
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で動作するモジュール。
NANDとは|否定論理積|Not AND - 意味 / 定義 / 解説 / 説明 : IT用語辞典
入力A | 入力B | 出力 |
---|---|---|
- | - | ON |
ON | - | ON |
- | ON | ON |
ON | ON | - |
Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。
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で動作するモジュール。
NORとは|否定論理和|Not OR - 意味 / 定義 / 解説 / 説明 : IT用語辞典
入力A | 入力B | 出力 |
---|---|---|
- | - | ON |
ON | - | - |
- | ON | - |
ON | ON | - |
Arduinoモジュールのコードは以下のようにすることで同様の動作をさせることができました。
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アドベントカレンダースタートです!
みなさんよろしくお願いしますー!