Lチカ
まずは、LEDを光らせてみましょう。LEDをチカチカさせることをLチカといいます。
使うLED
LEDのプラス、マイナス
LEDは長い方が+、短い方がーです。
+はアノード
ーはカソード
といいます。
LEDとArduinoのピンを接続
LEDの
長い方(+)を13番ピン
短い方(ー)をGNDに
につなげます。
↑は5V用に抵抗が入ったものを使っています。そうでないものを使う時は適宜、抵抗を入れてください。
Lチカプログラム
下記のプログラムをコピペし、スケッチに貼り付けし、保存後にArduinoに書き込んでみましょう。
void setup() {
// put your setup code here, to run once:
pinMode(13,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
}
Arduinoに書き込み
Macでエラー
macを使っている人で書き込みができなかった人は、ターミナルから下記のコマンドを実行してRosettaをupdateしてみてください。
softwareupdate --install-rosetta --agree-to-license
プログラムの解説
ポイント1:setupとloop
void setup() {
}
void loop() {
}
Arduinoのスケッチを作成するとという2つのプログラムがもともと書いてあります。
setupは最初に一回だけ実行されるプログラム
loopはずっと繰り返し実行されるプログラム
です。
{ 〜 }の間がそれぞれのプログラムになります。
ポイント2:約束事(文の最後はセミコロン;)
プログラムの中をみると、ところどころに;(セミコロン)があります。
Arduinoでは基本的に命令文の最後には;(セミコロン)をつけます
※ただし、ifやforのように{}でくくるループや条件分岐の場合は除きます。
ポイント3:ピンの設定と出力
デジタルピン(1〜13)の設定
・pinMode:指定したピンを入力用に使うのか、出力用に使うのかを設定する
今回はLEDを点灯させるために13番ピンから電気を流したい(出力したい)ので、
pinMode(13,OUTPUT);
・digitalWrite:デジタルピンの出力をLOWかHIGHで設定します。
LOW→0V
HIGH→5V
が出力されます。
つまり、
digitalWrite(HIGH)でLEDがつく
digitalWrite(LOW)でLEDが消える
事になります。
ポイント4:delayで待つ
delayは指定した時間待つ命令です。
単位はミリ秒(ms)です。
例)
delay(1000)→1秒待つ (1000/1000=1)
delay(100)→0.1秒待つ(100/1000=0.1)
delay(10)→0.01秒待つ(10/1000=0.01)
LEDを高速で点滅させると、点滅しているかわからないので、ある程度の間隔をおいてHIGHとLOWを切り替えます。
練習:For文を使って制御
下記のプログラムは0.3秒ごとの点滅を10回繰り返し、その後2秒ごとの点滅を3回繰り返す、というプログラムです。
最後まで行ったら、また0.3秒の繰り返しに戻ります。
void setup() {
// put your setup code here, to run once:
pinMode(13,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
for(int i=0; i < 10; i++){
digitalWrite(13,HIGH);
delay(300);
digitalWrite(13,LOW);
delay(300);
}
for(int i=0; i < 3; i++){
digitalWrite(13,HIGH);
delay(2000);
digitalWrite(13,LOW);
delay(2000);
}
}
プログラムの解説
ポイント For文
for (初期化式; 条件式; 変化式){
// 繰り返しの中で実行される処理
}
下記の式は
- iという変数で繰り返しを判断する
- iは0から始まる
- iが3未満の間は繰り返す(0から始まるので、3回の繰り返しになることに注意)
- i++はiが1ずつ足される
for(int i=0; i < 3; i++){
//繰り返しの中で実行される処理
}
長縄跳びを想像しましょう。跳んでる時に「いーち、にー、さーん・・・」と数えていきますよね。その数字がiに入っているということになります。
if文
条件分岐は
void setup() {
// put your setup code here, to run once:
pinMode(13,OUTPUT);
}
void loop() {
// intervalという変数を作って、間隔を制御する
int interval=0;
for(int i=0; i < 13; i++){
if(i<10){
// もしiが10より小さかったら間隔は0.3秒
interval=300;
}else{
// そうじゃなかったら間隔は2秒
interval=2000;
}
digitalWrite(13,HIGH);
delay(interval);
digitalWrite(13,LOW);
delay(interval);
}
}
プログラムの解説
ポイント
if (条件式){
処理内容1 //条件式を満たす場合にのみ実行する
}
else{
処理内容2 //条件式を満たさない場合にのみ実行される
}