プラス側の足を13番から11番にします
LED_BUILTINを11に変更
digitalWriteをanalogWriteに変更
HIGH, LOWを255, 30に変更→数値をいろいろ変更してみます
ArudinoのAnalogとは
アナログ入力(AnalogRead) A0〜A5
アナログ出力/PWM出力 (AnalogWrite) 3、5、6、9、10、11
AnalogWriteは、0〜255までの数値を出力できます。
AnalogReadは、0~5Vの電圧の変化を、0~1023の数字に変換して入力することが可能です
for文(日本語リファレンス)をつかいます。void loop() 以下を、for文にいれかえてください
void loop() {
for(int i=0; i<=255; i++){ // iが255になるまで、iに1を足し算していく
analogWrite(11,i); // 11番にiの数値を代入していく
delay(10); //状態を保つ時間(短くすれば早い明滅に、長くすれば遅い明滅になる。
}
問題
もっとも明るくなったら、そこから暗くなるような明滅にするには?
- ヒント。いままでは、0から1を足し算して、255まで光の強さを強くしていったので、こんどは0になるまで255から1をひいていきます。
□
loopを書き換えます
可変抵抗(analogRead)の値は、0〜1023の値でとれますが、LED(analogWrite)は0〜255にしないといけません。
なので、map関数(日本語リファレンス)をつかってスケーリングします。 void loop(){以下を、下のように書き換えます。
void loop() {
int val = analogRead(0);
int LED = map(val,0,1023,0,255); //スケーリング
analogWrite(11,LED);
}
※ スケッチ例-03 Analog- AnalogOutSerialの以下の変数を変更すれば同様につかえます。
const int analogInPin = A0; //可変抵抗を刺す穴
const int analogOutPin = 9; // LEDを指す穴
tone関数(日本語リファレンス)をつかってみます。
LEDをはずして、スピーカーに、analogWriteのかわりに、toneをつかいます。
tone関数を使うと、3番と11番のピンがつかえなくなります。なので、スピーカーは10番に挿してみます。
LEDを可変抵抗で動かすプログラムを、ピンの入力を10番にし、AnalogWriteをtoneに書き換えて、うごかしてみます。音はでますが、ちょっとへんなところがありますね。
何が変なのかモニタリングしてみましょう。シリアルモニタをつかいます。
ここで使う関数は以下の3つ
Serial.begin(); シリアル通信の準備をします
Serial.print(出力する値); ()内の変数や数値、文字列をシリアルモニタに出力します。
Serial.println(""); 改行します。
以下をのように追加してください
void setup() {
pinMode(10, OUTPUT);
Serial.begin(9600);
}
void loop() {
int val = analogRead(0);
int LED = map(val,0,1023,32,3000);
Serial.print(val);
Serial.println("");
tone(10,LED);
}
シリアルモニタをだします。
メニューの、ツール→シリアルモニタ
0から255までの数値が順番にあらわれるのが確認できます。
さて、何が変なのか、tone関数のリファレンスをもう一度みてみます。
というわけで、スケーリングを変更し、出力する音のヘルツ数を適正なものにしましょう。
tone関数は、analogWriteと異なり、上限が255ではないので、32から自分がきめたい数値(3000Hzとかけっこう高いです)にスケーリングして大丈夫です。
例: int LED = map(val,0,1023,32,1000);
なお、シリアルモニタの出力はarudinoの処理を重くします。ある程度観察できたら、シリアルモニタ出力の記述はコメントアウトしましょう。
arduinoで音を鳴らすには、tone以外にも、Mozziというライブラリを使う方法があります。同時に音をならしたり、サイン波やのこぎり波などが使えます。