Arduinoのサンプルプログラム

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

当記事では、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の桁を0または1にした数値に変更します。

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

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

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

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

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

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

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

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

bit()関数は、引数で指定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()関数の引数に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()関数の引数に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待機)
}

サンプルプログラムは、bitRead()関数で指定Bitを取得します。bit1は「0101」のLSBから1桁目「1」を取得、「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待機)
}

サンプルプログラムは、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待機)
}

サンプルプログラムは、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待機)
}

サンプルプログラムは、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待機)
}

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

テキストのコピーはできません。