Arduino-Bits and Bytes関数(ビット・バイト関数)の使い方

  • URLをコピーしました!

当記事では、ArduinoのBits and Bytes関数(ビット・バイト関数)の使い方について詳しく解説します。

Bits and Bytes関数を使うことによって、ビットやバイトの操作をすることができます。

なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。

目次

Bits and Bytes関数(ビット・バイト関数)

関数引数戻り値説明
uint8_t lowByte(x)x:対象の数値下位Bitを返す下位Bitを取得
uint8_t highByte(x)x:対象の数値上位Bitを返す上位Bitを取得
boolean bitRead(x, n)x:対象の数値
n:取得するBitの桁
取得Bitを返す指定Bitを取得
void bitWrite(x, n, b)x:対象の数値
n:取得するBitの桁
b:指定値(0または1)
なし特定の桁を変更した値を取得
void bitSet(x, n)x:対象の数値
n:1にするBitの桁
なし特定の桁を1に変更した値を取得
void bitClear(x, n)x:対象の数値
n:0にするBitの桁
なし特定の桁を0に変更した値を取得
bit(n)n:指定Bitの桁指定した桁のBitを1にした値を返す指定した桁のBitを1にした値を取得

lowByte()/下位Bitを取得

lowByte()/下位Bitを取得
  • 関数:uint8_t lowByte(x)
  • 引数:x⇒対象の数値
  • 戻り値:下位Bitを返す

lowByte()関数は、引数で指定した数値の下位Bitを戻り値として返します。

highByte()/上位Bitを取得

highByte()/上位Bitを取得
  • 関数:uint8_t highByte(x)
  • 引数:x⇒対象の数値
  • 戻り値:上位Bitを返す

highByte()関数は、引数で指定した数値の上位Bitを戻り値として返します。

bitRead()/指定Bitを取得

bitRead()/指定Bitを取得
  • 関数:boolean bitRead(x, n)
  • 引数:x⇒対象の数値
  •   :n⇒取得するBitの桁
  • 戻り値:取得Bitを返す

bitRead()関数は、引数に対象の数値と取得するBitの桁を指定して、戻り値で取得Bitを返します。

bitWrite()/特定の桁を変更した値を取得

bitWrite()/特定の桁を変更した値を取得
  • 関数:void bitWrite(x, n, b)
  • 引数:x⇒対象の数値
  •   :n⇒取得するBitの桁
  •   :b⇒指定値(0または1)
  • 戻り値:なし

bitWrite()関数は、引数に対象の数値、Bitの桁、Bitに書き込む数値(0または1)を指定して、Bitの桁を0または1にした数値に変更します。

bitSet()/特定の桁を1に変更した値を取得

bitSet()/特定の桁を1に変更した値を取得
  • 関数:void bitSet(x, n)
  • 引数:x⇒対象の数値
  •   :n⇒1にするBitの桁
  • 戻り値:なし

bitSet()関数は、引数に対象の数値とBitの桁を指定して、Bitの桁を1にした数値に変更します。

bitClear()/特定の桁を0に変更した値を取得

bitClear()/特定の桁を0に変更した値を取得
  • 関数:void bitClear(x, n)
  • 引数:x⇒対象の数値
  •   :n⇒0にするBitの桁
  • 戻り値:なし

bitClear()関数は、引数に対象の数値とBitの桁を指定して、Bitの桁を0にした数値に変更します。

bit()/指定した桁のBitを1にした値を取得

bit()/指定した桁のBitを1にした値を取得
  • 関数:bit(n)
  • 引数:n⇒指定Bitの桁
  • 戻り値:指定した桁のBitを1にした値を返す

bit()関数は、戻り値として、引数で指定した桁のBitを1にした値を返します。

サンプルプログラム(サンプルスケッチ)

用意するもの
  1. Arduino Uno
  2. USBケーブル
  3. PC(プログラム書き込み・シリアルモニタ表示)

lowByte()/下位Bitを取得

void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char low_byte;//「low_byte」をunsigned charで変数宣言

  low_byte = lowByte(0xF3A1);//「0xF3A1」の下位ビットを取得して「low_byte」に代入
  Serial.print("LowByte: ");//文字列「LowByte: 」を送信
  Serial.println(low_byte, HEX);//数字「low_byte」をHEXで送信、改行

  delay(1000);//1秒待機(1000msec待機)
}
シリアルモニタ例

LowByte: A1
LowByte: A1
LowByte: A1
LowByte: A1
LowByte: A1
LowByte: A1
LowByte: A1
LowByte: A1
LowByte: A1
LowByte: A1

サンプルプログラムは、lowByte()関数の引数に0xF3A1を指定して、戻り値で下位Bitの0xA1を返します。

highByte()/上位Bitを取得

void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char high_byte;//「high_byte」をunsigned charで変数宣言

  high_byte = highByte(0xF3A1);//「0xF3A1」の上位ビットを取得して「high_byte」に代入
  Serial.print("HighByte: ");//文字列「HighByte: 」を送信
  Serial.println(high_byte, HEX);//数字「high_byte」をHEXで送信、改行

  delay(1000);//1秒待機(1000msec待機)
}
シリアルモニタ例

HighByte: F3
HighByte: F3
HighByte: F3
HighByte: F3
HighByte: F3
HighByte: F3
HighByte: F3
HighByte: F3
HighByte: F3
HighByte: F3

サンプルプログラムは、highByte()関数の引数に0xF3A1を指定して、戻り値で上位Bitの0xF3を返します。

bitRead()/指定Bitを取得

void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char bit1, bit2;//「bit1」、「bit2」をunsigned charで変数宣言

  bit1 = bitRead(0b0101, 0);//「0101」のLSBから1桁目を取得して「bit1」に代入
  Serial.print("0101のLSBから1桁目: ");//文字列「0101のLSBから1桁目: 」を送信
  Serial.println(bit1);//数字「bit1」を送信、改行

  bit2 = bitRead(0b0101, 3);//「0101」のLSBから4桁目を取得して「bit2」に代入
  Serial.print("0101のLSBから4桁目: ");//文字列「0101のLSBから4桁目: 」を送信
  Serial.println(bit2);//数字「bit2」を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}
シリアルモニタ例

0101のLSBから1桁目: 1
0101のLSBから4桁目: 0
0101のLSBから1桁目: 1
0101のLSBから4桁目: 0
0101のLSBから1桁目: 1
0101のLSBから4桁目: 0
0101のLSBから1桁目: 1
0101のLSBから4桁目: 0
0101のLSBから1桁目: 1
0101のLSBから4桁目: 0

サンプルプログラムは、bitRead()関数によって、指定Bitを取得します。bit1は「0101」のLSBから1桁目「1」、bit2は「0101」のLSBから4桁目「0」をそれぞれ取得します。

bitWrite()/特定の桁を変更した値を取得

void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char bit1=0b1101, bit2=0b1101;//「bit1」、「bit2」をunsigned charで変数宣言

  bitWrite(bit1, 2, 0);//bit1「1101」のLSBから3桁目を「0」に変更
  Serial.print("1101のLSBから3桁目を0に変更: ");//文字列「1101のLSBから3桁目を0に変更: 」を送信
  Serial.println(bit1, BIN);//数字「bit1」を2進数で送信、改行

  bitWrite(bit2, 1, 1);//bit2「1101」のLSBから2桁目を「1」に変更
  Serial.print("1101のLSBから2桁目を1に変更: ");//文字列「1101のLSBから2桁目を1に変更: 」を送信
  Serial.println(bit2, BIN);//数字「bit2」を2進数で送信、改行

  delay(1000);//1秒待機(1000msec待機)
}
シリアルモニタ例

1101のLSBから3桁目を0に変更: 1001
1101のLSBから2桁目を1に変更: 1111
1101のLSBから3桁目を0に変更: 1001
1101のLSBから2桁目を1に変更: 1111
1101のLSBから3桁目を0に変更: 1001
1101のLSBから2桁目を1に変更: 1111
1101のLSBから3桁目を0に変更: 1001
1101のLSBから2桁目を1に変更: 1111
1101のLSBから3桁目を0に変更: 1001
1101のLSBから2桁目を1に変更: 1111

サンプルプログラムは、bitWrite()関数によって、特定の桁を変更した値を取得します。bit1は「1101」のLSBから3桁目を「0」に変更した値「1001」、bit2は「1101」のLSBから2桁目を「1」に変更した値「1111」をそれぞれ取得します。

bitSet()/特定の桁を1に変更した値を取得

void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char bit1=0b1101;//「bit1」をunsigned charで変数宣言

  bitSet(bit1, 1);//bit1「1101」のLSBから2桁目を「1」に変更
  Serial.print("1101のLSBから2桁目を1に変更: ");//文字列「1101のLSBから2桁目を1に変更: 」を送信
  Serial.println(bit1, BIN);//数字「bit1」を2進数で送信、改行

  delay(1000);//1秒待機(1000msec待機)
}
シリアルモニタ例

1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111
1101のLSBから2桁目を1に変更: 1111

サンプルプログラムは、bitSet()関数によって、特定の桁を「1」に変更した値を取得します。bit1は「1101」のLSBから2桁目を「1」に変更した値「1111」を取得します。

bitClear()/特定の桁を0に変更した値を取得

void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char bit1=0b1101;//「bit1」をunsigned charで変数宣言

  bitClear(bit1, 2);//bit1「1101」のLSBから3桁目を「0」に変更
  Serial.print("1101のLSBから3桁目を0に変更: ");//文字列「1101のLSBから3桁目を0に変更: 」を送信
  Serial.println(bit1, BIN);//数字「bit1」を2進数で送信、改行

  delay(1000);//1秒待機(1000msec待機)
}
シリアルモニタ例

1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001
1101のLSBから3桁目を0に変更: 1001

サンプルプログラムは、bitClear()関数によって、特定の桁を「0」に変更した値を取得します。bit1は「1101」のLSBから3桁目を「0」に変更した値「1001」を取得します。

bit()/指定した桁のBitを1にした値を取得

void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char bit1, bit2;//「bit1」、「bit2」をunsigned charで変数宣言

  bit1 = bit(0);//2進数でLSBから1桁目のBitを「1」にして「bit1」に代入
  Serial.print("LSBから1桁目のBitを1: ");//文字列「LSBから1桁目のBitを1: 」を送信
  Serial.println(bit1, BIN);//数字「bit1」を2進数で送信、改行

  bit2 = bit(4);//2進数でLSBから5桁目のBitを「1」にして「bit2」に代入
  Serial.print("LSBから5桁目のBitを1: ");//文字列「LSBから5桁目のBitを1: 」を送信
  Serial.println(bit2, BIN);//数字「bit2」を2進数で送信、改行

  delay(1000);//1秒待機(1000msec待機)
}
シリアルモニタ例

LSBから1桁目のBitを1: 1
LSBから5桁目のBitを1: 10000
LSBから1桁目のBitを1: 1
LSBから5桁目のBitを1: 10000
LSBから1桁目のBitを1: 1
LSBから5桁目のBitを1: 10000
LSBから1桁目のBitを1: 1
LSBから5桁目のBitを1: 10000
LSBから1桁目のBitを1: 1
LSBから5桁目のBitを1: 10000

サンプルプログラムは、bit()関数によって、指定した桁のBitを「1」にした値を取得します。bit1はLSBから1桁目のBitを「1」にした値「1」、bit2はLSBから5桁目のBitを「1」にした値「10000」をそれぞれ取得します。

おすすめのArduinoボードはどれ?

当記事『Arduino-Bits and Bytes関数(ビット・バイト関数)の使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。

やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。

電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。

また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。

このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次