メディア・アート演習 

Elico Suzuki

 

AnalogWriteをつかってみる

プラス側の足を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をひいていきます。


AnalogReadを使ってみる



可変抵抗を接続します。

 

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を指す穴 


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というライブラリを使う方法があります。同時に音をならしたり、サイン波やのこぎり波などが使えます。


次のページ