参考資料

About

Arduinoの基礎(ソフトウェア)

C++やProcessingとはよく似ているため, それらでプログラミングをできるなら簡単かも?

Arduinoのスケッチを理解する

Arduino IDEを起動して,スケッチにコピー&ペーストする

// setup(): Arduinoが起動, 再起動したときに1度だけ呼び出される
void setup() {
	// pinMode(pin, mode): デジタルI/O設定関数
  // |- pin: ピン番号を指定する(LED_BUILTIN: デフォルトで13番が指定されている)
  // -- mode: 読み込みならINPUT, 書き込みならOUTPUT
  pinMode(LED_BUILTIN, OUTPUT);
}

// loop(): setup()後にループする処理
void loop() {
	// digitalWrite(pin, value): デジタル出力関数
	// |- pin: ピン番号
	// -- value: 1を出力するならHIGH, 0ならLOW
  digitalWrite(LED_BUILTIN, HIGH);  // LEDが点灯する
  // delay(tm): tmミリ秒だけ待機する
  delay(1000);                      // 1000ms=1sec待機する
  digitalWrite(LED_BUILTIN, LOW);   // LEDが消灯する
  delay(1000);                      // 1000ms=1sec待機する
}

Arduinoの基礎(ハードウェア, インタフェース)

ここではArduino UNOを参考にする

Untitled

https://store-usa.arduino.cc/products/arduino-uno-rev3

https://www.switch-science.com/products/789?_pos=2&_sid=ab6a6e6c0&_ss=r

ピンの情報

アナログ入力(ADC)A0~A5(図左下)

アナログ出力(PWM)D3, D5, D6, D9, D10, D11(図右下)

デジタル入出力(GPIO)→D0~D13

UART (Serial)D0(RX, 受信), D1(TX, 送信)

I2CI2C[SCL], I2C[SDA]

SPI→D10~D13 (SCK, MISO, MOSI, SS)


ブレッドボードを使ってLEDを点灯させる

キーワード

組込み関数や標準ライブラリを知ろう!

上述のスケッチについて考えてみる

void setup()

void loop()

配線が終わったらマイコンに書き込み(以下のように動作すればOK)

IMG_0885.mov

ブレッドボード (配線)

ブレッドボード

image.png

用意するもの(LED1個の点灯であるため最小構成で配線を行います)

配線

  1. 部品エリアの任意の場所(どこでも良い)にLEDを挿す
    1. ここでLEDは足が2本あるが両方が部品エリアで繋がっていない場所に挿す
  2. Arduino UNOの13番ピン(D13)と, ブレッドボードでLEDの足が長い方が挿してあり, 内部で繋がっている部分にジャンパーワイヤーを挿す
    1. LEDには極性があり, 足が長い方は陽極(+極, アノード)と言い, 足が短い方を陰極(-極, カソード)と言う, 配線の際には注意
  3. ブレッドボードでLEDの足が短い方が挿してあり, 内部で繋がっている部分と, Arduino UNOのGNDにジャンパーワイヤーを挿す

実際に配線した写真

参考: https://iot.keicode.com/electronics/what-is-breadboard.php


演習: 複数のLEDを制御してみよう!

出来たら第2回課題 ができる!!!


おまけ

delay()の罠

正確に定期実行したい場合には,  delay() は非推奨となる (delay() 以外の処理時間分ズレていくため)

millis(): プラグラムがスタートしてからの時間をミリ秒単位で出力する

const int intervalMillis = 1000;

unsigned long lastRunMillis = 0;

/* 中略 */

void loop() {
	unsinged long currentMillis = millis();
	// スタートしてから現在のミリ秒が, lastMillisから1000ms経過していたらtrue
	if (currentMillis - lastRunMillis >= intervalMillis) {

		// 実行したい処理をここに記述する
		
		lastRunMillis = currentMillis;
		}
}