第1回

変数・型・演算子

プログラムでデータを扱う方法を理解する。

変数

int count = 0;
  • int:型
  • count:変数名
  • 0:初期値

変数は「名前を付けた箱」であり、型はその箱に入れられるものの種類を表す。

基本的な型

int
float
double
char
bool
型扱うもの例
int整数int count = 0;
float小数(単精度)float temperature = 25.5f;
double小数(倍精度)double pi = 3.14159;
char1文字char c = 'A';
bool真偽(true / false)bool isOn = false;

マイコンでの注意

型のサイズは環境によって異なる場合があるため、必要に応じて次のような型も紹介する。

int8_t
uint8_t
int16_t
uint16_t
int32_t
uint32_t

算術演算

+
-
*
/
%

比較演算

==
!=
<
>
<=
>=

論理演算

&&
||
!
演算子意味例
&&かつif (a >= 10 && b < 5)
||またはif (a == 0 || b == 0)
!否定if (!isOn)

動かして確かめる

演習に入る前に、まずこのサンプルを動かして結果を見る。追加の部品は要らない。光るのはボードに載っている内蔵LEDで、それ以外はシリアルモニタの出力で確かめられる。code/examples/01-variables/を開き、pio run -t uploadで書き込んでからpio device monitorで出力を見る(手順と、外付けのLEDなどをつなぐ場合は開発環境にまとめてある)。

code/examples/01-variables/src/main.cpp
// 第1回:変数・型・演算子
// 値をシリアルモニタに出して、型と演算子のふるまいを目で確かめる。

#include <Arduino.h>

void setup() {
    Serial.begin(115200);
    delay(1000);  // シリアルモニタが繋がるのを待つ

    int count = 7;
    int divisor = 2;
    float temperature = 23.5f;
    char grade = 'A';
    bool isHot = false;

    Serial.println("--- 変数と型 ---");
    Serial.print("count       = ");
    Serial.println(count);
    Serial.print("temperature = ");
    Serial.println(temperature);
    Serial.print("grade       = ");
    Serial.println(grade);

    Serial.println("--- 割り算 ---");
    Serial.print("7 / 2    = ");
    Serial.println(count / divisor);  // 3(小数は切り捨てられる)
    Serial.print("7 % 2    = ");
    Serial.println(count % divisor);  // 1
    Serial.print("7 / 2.0f = ");
    Serial.println(count / 2.0f);     // 3.50

    Serial.println("--- 比較と論理 ---");
    isHot = temperature >= 30.0f;
    Serial.print("temperature >= 30.0f = ");
    Serial.println(isHot);  // 0(false は 0 と表示される)

    Serial.print("20 < t && t < 30     = ");
    Serial.println(20.0f < temperature && temperature < 30.0f);  // 1

    Serial.println("--- 型の大きさ(バイト)---");
    Serial.print("int     : ");
    Serial.println(sizeof(int));
    Serial.print("float   : ");
    Serial.println(sizeof(float));
    Serial.print("double  : ");
    Serial.println(sizeof(double));
    Serial.print("char    : ");
    Serial.println(sizeof(char));
    Serial.print("bool    : ");
    Serial.println(sizeof(bool));
    Serial.print("uint8_t : ");
    Serial.println(sizeof(uint8_t));
}

void loop() {
}
シリアルモニタの出力
--- 変数と型 ---
count       = 7
temperature = 23.50
grade       = A
--- 割り算 ---
7 / 2    = 3
7 % 2    = 1
7 / 2.0f = 3.50
--- 比較と論理 ---
temperature >= 30.0f = 0
20 < t && t < 30     = 1
--- 型の大きさ(バイト)---
int     : 4
float   : 4
double  : 8
char    : 1
bool    : 1
uint8_t : 1

確かめること。

  • 7 / 2が3になっている。整数どうしの割り算では小数が捨てられる
  • 7 / 2.0fは3.50になる。片方を小数で書けば結果も小数になる
  • trueは1、falseは0として表示される
  • intは4バイト。これは環境によって変わることがある
  • temperatureを書き換えて、>= 30.0fの行が1に変わることを確かめる

演習:温度が30度以上ならLEDを点灯する

float temperature = 32.0;

if (temperature >= 30.0) {
    // LED ON
}
  • まずはtemperatureを固定値で書き、しきい値を変えて動作を確認する
  • 余裕があればSerial.println()で値を出力してみる