Arduino
25
1.  arduino
2.  LED
3.  LED
4. 
5.  LED
6. 
7.  cds
8.  7 LED
( )
LSI
CPU
( )
• 
• 
• 
• 
Arduino Processing/Wiring
LEONARDO 2000
LEONARDO 14 ( PWM
) 6 (+5V GND)
4 LED(ON L TX RX)
Arduino
USB
USB Arduino
USB
Windows
Arduino
LED
LED Light Emitting Diode)
LED ( ) ( )
13 GND
Arduino
OK
Arudino
Arduino
100
1000 1 100 0.1
Arduino
Arduino
Arduino
Arduino
1 2 OK.
Arduino Leonardo
0 13 14
( )
• 
•  5V (LED )
•  0 5V 0.02V
A0 A5 6
•  5V 0.005V
5V 3.3V
Arduino
void setup(){
}
void loop(){
}
void setup(){
}
arduino
1
void loop(){
}
int led =13; →led 13
pinMode(led,OUTPUT);
→13
digitalWrite(led,HIGH);
→13 5V
delay(100);
→ 100m (=0.1 )
digitalWrite(led,LOW);
→13 0V
setup()
loop()
LED
LED
( ) GND
11 12 13
LED
LED
( ) GND
11 12 13
Arduino
LED
int led =13; →led 13
pinMode(led,OUTPUT);
→13
digitalWrite(led,HIGH);
→13 5V
delay(1000);
→ 1000m (=1 )
digitalWrite(led,LOW);
→13 0V
LED
delay(1000)
13 GND
Arduino
delayMicroseconds(500);
→ 500µ (=5×10-6
0.0005 )
Arduino
tone delay
OK
Arudino
tone
262 294 330
duration
500
0.5
tone
void loop(){
tone(pin,262,duration);
delay(duration);
tone(pin,262,duration);
delay(duration);
tone(pin,392,duration);
delay(duration);
tone(pin,392,duration);
delay(duration);
tone(pin,440,duration);
delay(duration);
tone(pin,440,duration);
delay(duration);
tone(pin,392,duration);
delay(duration);
delay(500);
tone(pin,349,duration);
delay(duration);
tone(pin,349,duration);
delay(duration);
tone(pin,330,duration);
delay(duration);
tone(pin,330,duration);
delay(duration);
tone(pin,294,duration);
delay(duration);
tone(pin,294,duration);
delay(duration);
tone(pin,262,duration);
delay(duration);
delay(1000);
}
int pin = 13;
int duration = 500;
void setup(){
pinMode(pin,OUTPUT
}
LED
LED
LED ( ) ( )
13 GND
LED
for(i=0;i<255;i++){
}
→i 0 { }
i 1 {
i 255
analogWrite(ledpin,i)
→i 13
i 0 0V i 255 5V
i 1 0.02V
digitalRead(button)
→button=7 7
HIGH
LOW
if(val == HIGH){
}
else{
}
→val HIGH { }
else { }
arduino
+5V
0V
?V
→ 0V
→ 5V
7
LED
LED
Cds
Cds
Cds
analogRead(0)
→ 0
0V 0 5V 1023
0.004887585 V
0V
5V
0
1023
1024
5÷1024=0.004887585
512
512×0.004887585
=2.50244352 V
7 LED
2 3
4567
|
GND
7 LED Arduino
7 LED
2 3
4567
|
GND
7 LED
0 →a,b,d,f,g,i
a,b,d,f,g,i
7 LED
2 3
4567
|
GND
1 9
delay()
7 LED
11 13 13 16 11 5V 13 8 16
Gnd
Gnd5V
8
7 LED
Arduino (2 )
25
1.  arduino
2.  7 LED
3.  2 7 LED
4. 
5.  7 LED
(2 )
(1)
USB
USB Arduino
USB
→ →
leonardo arduino IDE( ) drivers
Windows
Arduino
(2)
LED
LED ( ) ( )
7 LED (1)
7 LED
LED
Arduino
0 1 2
4567
|
GND
3
7 LED (3)
0 9
7 LED (3)
int a = 0;
int b = 1;
int d = 2;
int e = 3;
int f = 4;
int g = 5;
int i = 6;
int j = 7;
void setup(){
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(i,OUTPUT);
pinMode(j,OUTPUT);
}
void loop(){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(i,HIGH);
digitalWrite(j,LOW);
delay(300);
seg_1.ino
7 LED
GND LED
C Arduino
IO 8
0 1 2
4567
|
8
3
0 9
LED
LED
IO
8
LOW 0 1 2
4567
|
8
3
7 LED
int a = 0;
int b = 1;
int d = 2;
int e = 3;
int f = 4;
int g = 5;
int i = 6;
int j = 7;
int c = 8;
void loop(){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(i,HIGH);
digitalWrite(j,LOW);
digitalWrite(c,LOW);
delay(300);
void setup(){
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(i,OUTPUT);
pinMode(j,OUTPUT);
pinMode(c,OUTPUT);
}
7 LED ( )
_7segLED_2_pre.ino
void loop(){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(i,HIGH);
digitalWrite(j,LOW);
digitalWrite(c,LOW);
7 LED ( )
_7segLED_3_pre.ino
void loop(){
zero();
}
void zero(){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(i,HIGH);
digitalWrite(j,LOW);
digitalWrite(c,LOW);
}
0
zero()
zero()
7 LED 2 (1)
7 LED
7 LED 8
7 LED 1 →8
7 LED 2 →16
7 LED 3 →24
7 LED Arduino
7 LED 2 (2)
7 LED
7 LED 8
7 LED 1 →8
7 LED 2 →16
7 LED 3 →24
7 LED Arduino
7 LED 2 (3)
LED
LED
( )
HIGH LOW 2
LED
7 LED 2 (4)
LED LED
0 1 2
4567
|
8
3 0 1 2
4567
|
9
3
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
LED
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
LED
0 1 2
4567
|
8
3 0 1 2
4567
|
9
3
7 LED 2 (5)
LED LED
LED
7 LED 2 (1)
int a = 0;
int b = 1;
int d = 2;
int e = 3;
int f = 4;
int g = 5;
int i = 6;
int j = 7;
int c_left = 8;
int c_right = 9;
int duration =100;
LED 0
void setup(){
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(i,OUTPUT);
pinMode(j,OUTPUT);
pinMode(c_left,OUTPUT);
pinMode(c_right,OUTPUT);
}
void loop(){
zero_left();
delay(duration);
zero_right();
delay(duration);
}
void zero_left(){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(d,HIGH);
_7segLED_5.ino
7 LED 2 (2)
int a = 0;
int b = 1;
int d = 2;
int e = 3;
int f = 4;
int g = 5;
int i = 6;
int j = 7;
int c_left = 8;
int c_right = 9;
int duration =5;
int k = 0;
void setup(){
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(i,OUTPUT);
pinMode(j,OUTPUT);
pinMode(c_left,OUTPUT);
pinMode(c_right,OUTPUT);
}
void loop(){
for(k=1;k<100;k++){
zero_left();
delay(duration);
one_right();
delay(duration);
}
for(k=1;k<100;k++){
one_left();
delay(duration);
two_right();
delay(duration);
}
01→12→23→ _7segLED_6.ino
+Vs 4-20V Vout
1 10mV
(2)
(3)
void setup() { }
Serial.begin(9600);
void loop() { }
Serial.println( );
float val = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
val = analogRead(0);
Serial.println(val);
delay(500);
}
10mV=0.01V
int→float
(4)
analogRead(0)
→ 0
0V 0 5V 1023
0.004887585 V
0V
5V
0
1023
1024
5÷1024=0.004887585
512
512×0.004887585
=2.50244352 V
0 0V
1
10mV(=0.01V)
20 Vout
Vout = 0.01×20 = 0.2 [V]
analogRead()
(5)
temp
temp = (5/1024)*val / 0.01
temp = (5/1024)*val * 100
temp
float val = 0;
float temp = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
val = analogRead(0);
temp = (5*val) / 1024 * 100;
Serial.println(temp);
delay(500);
}
(1)
temp 7 LED
temp 2 7 LED
10 1
temp ( 25) 10 (25 2) 1 (25 5)
temp_10 temp_1
(2)
temp 7 LED
10 temp 10 1 temp
10 temp_10 temp_1
temp float
temp_int
temp_int = int(temp)
temp_i
/ ( ) % ( )
temp temp_10
temp_1
temp 7 LED
float val = 0;
float temp = 0;
int temp_10;
int temp_1;
int temp_int;
void setup(){
Serial.begin(9600);
}
void loop(){
val = analogRead(0);
temp = (5*val) / 1024 * 100;
temp_int = (int)(temp);
temp_10 = temp_int / 10;
temp_1 = temp_int % 10;
Serial.println(temp);
Serial.println(temp_10);
Serial.println(temp_1);
delay(500);
}
(3)
2 7 LED
•  10
1
•  7 LED
(1)
(2)
void loop(){
val = analogRead(0);
temp = (5*val) / 1024 * 100;
temp_int = int(temp);
temp_10 = temp_int / 10;
temp_1 = temp_int % 10;
Serial.println(temp);
Serial.println(temp_10);
Serial.println(temp_1);
for(k=0;k<100;k++){
if(temp_10==0){
zero_left();
}
if(temp_10==1){
one_left();
}
( void setup() )
7 LED 3
( )
平成25年度 熊本高等専門学校 社会人講座
Arduinoによるマイコン入門講座(3週目)
1.ドットマトリクスLEDの使い方
2.文字や記号の表示方法
3.文字のスクロール方法
4.外部入力による点灯位置の制御
Arduino日本語リファレンス
http://www.musashinodenpa.com/arduino/ref/
ドットマトリクスLEDを用いたミニ電光掲示板
1
赤色ドットマトリクスLED(アノードコモン)
LED:8×8 = 64個 端子は 8+8=16本
ピン番号 ①②③④⑤⑥⑦⑧
※文字面を手前にみる
ピン番号 ⑯⑮⑭⑬⑫⑪⑩⑨
1.ドットマトリクスLEDの使い方
2
赤色ドットマトリクスLED(アノードコモン)
LED:8×8 = 64個 端子は 8+8=16本
行
(row)
列(col)
1.ドットマトリクスLEDの使い方
点灯方法
点灯させたいLEDの行を
HIGH(5V),
列をLOW(0V)にする.
3
配線 「列」の配線には,途中に
100Ωの抵抗を接続する.
1.ドットマトリクスLEDの使い方
デジタル入出力ピンの0番と1番はシリアル通信などで使うため(プログラムをアッ
プロードするときにも干渉することがあるため),できれば接続しない方がよい. 4
配線 LED
ピン番号
行/列
番号
Arduino
ピン番号
9 行1 2
10 列4 3
11 列6 4
12 行4 5
13 列1 6
14 行2 7
15 列7 8
16 列8 9
1.ドットマトリクスLEDの使い方
ANALOG IN A0 A1 A2 A3 A4 A5
UNO 14 15 16 17 18 19
Leonald 18 19 20 21 22 23
注意:アナログ入力端子(A0~A5)をデジタル入出力として使う場合のピン番号
LED
ピン番号
行/列
番号
Arduino
ピン番号
1 行5 13
2 行7 12
3 列2 11
4 列3 10
5 行8 20(A2)
6 列5 21(A3)
7 行6 22(A4)
8 行3 23(A5)
5
どれか1つを点灯させる
1.ドットマトリクスLEDの使い方
const int row[8] = { 2,7,23,5,13,22,12,20 }; //行のArduinoのピン番号
const int col[8] = { 6,11,10,3,21,4,8,9 }; //列のArduinoのピン番号
void setup(){
for(int i=0; i < 8; i++){ // 8回繰り返し
pinMode(col[i], OUTPUT); // 行の端子を「出力」に設定
pinMode(row[i], OUTPUT); // 列の端子を「出力」に設定
digitalWrite(col[i],HIGH); // 列にHIGHを出力してLEDを消灯
}
} ※この部分はこの後共通して使います
LED_MAT_1
6
どれか1つを点灯させる
1.ドットマトリクスLEDの使い方
void loop(){
digitalWrite(row[0],HIGH); // ある行にHIGH(5V)を出力
digitalWrite(col[0], LOW); // ある列にLOW(0V)を出力
}
※配列の番号を変えて,任意の場所を点灯させてみよう.
ただし,配列の番号(アドレス)は0から始まることに注意!
LED_MAT_1
7
順番に1個ずつ点灯させる
1.ドットマトリクスLEDの使い方
void loop(){
for(int i=0; i < 8; i++){ // 8回繰り返し(行の移動)
digitalWrite(row[i],HIGH); // 行にHIGHを出力⇒点灯準備
for(int j=0; j < 8; j++){ // 8回繰り返し(列の移動)
digitalWrite(col[j], LOW); // 列にLOWを出力 ⇒ LED点灯
delay(500); // 移動の間隔 この場合は0.5秒
digitalWrite(col[j],HIGH); // 列にHIGHを出力 ⇒ LED消灯
}
digitalWrite(row[i],LOW); // 行にLOWを出力⇒点灯準備解除
}
}
64個がすべて点灯して見えるようにdelayMicroseconds( )
に替えて値を変更してみましょう.
LED_MAT_2
8
1個ずつ右にずらしながら点灯させ,すべて点
灯したらその行を消灯して次の行へ移動
void loop(){
for(int i=0; i < 8; i++){
digitalWrite(row[i], HIGH); // 行をHIGHにする(ONの準備)
for(int k=0; k<8; k++){ // 一行すべてONになるまで繰り返し
for(int j=0; j<8-k; j++){ // ONの横移動
digitalWrite(col[j], LOW); // 列をLOWにする(LED ON)
delay(100); // 移動スピード
digitalWrite(col[j],HIGH); // 列をHIGHにする(LED OFF)
}
digitalWrite(col[7-k],LOW); // 最後のLEDをONに保つ
}
for(int j=0; j<8; j++){ // 一行すべてOFFになるまで繰り返し
digitalWrite(col[j], HIGH); // 列をHIGHにする(LED OFF)
}
digitalWrite(row[i],LOW); // 行のLED OFF(その行すべてOFF)
}
}
LED_MAT_3
1.ドットマトリクスLEDの使い方
9
一文字の表示法
2.文字や記号の表示方法
boolean matrix[8][8]={
{0,0,0,1,1,0,0,0},
{0,0,1,0,0,1,0,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0}
};
setup( )の前に文字データを二次元配列 matrix[行数][列数]
で準備する.
//boolean型はtrue(1)かfalse(0)だけ
黒を1 ⇒
白を0 ⇒
10
一文字の表示法
2.文字や記号の表示方法
void loop(){
for(int i =0; i < 8; i++){ // 行の繰り返し(配列を縦にみていく)
digitalWrite(row[i],HIGH); // 行をHIGHにする(ONの準備)
for(int j = 0; j < 8; j++){ // 列の繰り返し(配列を横にみていく)
if(matrix[i][j] == 1){ // もし配列の中身が1ならば次の{}を実行
digitalWrite(col[j], LOW); // LED ON(その列をLOWにする)
delayMicroseconds(200); // 点灯時間
}
digitalWrite(col[j],HIGH); // LED OFF(その列をHIGHにする)
}
digitalWrite(row[i],LOW); // 行をLOWにする(その行すべてOFF)
}
}
LED_MAT_CHARACTER1
11
任意の文字や絵の表示
2.文字や記号の表示方法
LED_MAT_CHARACTER2
黒を1⇒
白を0⇒
左側に白黒で文字や絵を描き,右側に 1,0 のデータを作る.
右側の 1,0 のデータをmatrix[8][8]に書いて実行させてみましょう.
12
文字スクロール
3.文字のスクロール方法
boolean matrix[8][MAX_LEN+1]={
{1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0},
{0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0}
};
// 8行,(8×文字数+1)列の配列を作る.
// 最後の列はすべて0としておく.
空の列
#define MAX_LEN 32 //8×4=32文字 文字数に合わせて変更する
LED_MAT_SCROLL
13
文字スクロール(文字表示)
3.文字のスクロール方法
void loop(){
int count = 20; // 1文字の表示回数 5(早い)~50(ゆっくり)
while(count>0){ // count数だけ繰り返し
for(int i=0; i<8; i++){ // 行の繰り返し(配列を縦にみていく)
digitalWrite(row[i],HIGH); // 行をHIGHにする(ONの準備)
for(int j = 0; j < 8; j++){ // 列の繰り返し(配列を横にみていく)
if(matrix[i][j] ==1 ){ // 配列の中身が1のときだけ次を実行
digitalWrite(col[j], LOW); // LED ON
delayMicroseconds(200); // 点灯時間
}
digitalWrite(col[j],HIGH); // LED OFF
}
digitalWrite(row[i],LOW);
}
count--; // countを1減らす
}
次ページへ続く
LED_MAT_SCROLL
14
文字スクロール(文字の移動)
3.文字のスクロール方法
for(int k = 0; k < 8; k++){ // 行の繰り返し
matrix[k][MAX_LEN] = matrix[k][0]; // 最後の列に1列目を移動
for(int l = 0; l < MAX_LEN; l++){ // 列の繰り返し
matrix[k][l]=matrix[k][l+1]; // 2列目以降を1つ左へずらす
}
}
}
文字データの二次元配列を1列ずらす
LED_MAT_SCROLL
15
任意の文字や絵のスクロール
3.文字のスクロール方法
16
エクセルによる二次元データ作成
3.文字のスクロール方法
(1).8×文字数+1列の
枠を準備.その後デー
タを入力する.
点灯 ⇒ 1
消灯 ⇒ 0
(2).「名前を付けて保存」で「ファイルの種類」をCSV(カンマ区切り)として保存し,
終了する.もし,“○○.csv”へ変更を保存しますか?が表示されたら“いいえ”を
選択して終了する.
(3).保存されたCSV形式のファイルを右クリックし,「プログラムから開く」から「メ
モ帳」で開く.そのデータをコピーする.
(4).貼り付けた後,左側に { 最後列の後に }, (中カッコとカンマ)を入力す
る.(5).#define MAX_LEN ○←に列数を入力.
17
好きな文字や図案を作って
スクロールさせてみよう
3.文字のスクロール方法
(1) エクセルによる文字や図案の作成
⇒ CSV形式で保存 ⇒ メモ帳で開く
(2) データをboolean matrix[8][MAX_LEN+1]へコピーする.
(3) 配列データの左に 「 { 」,右側に「 },」を追加する.
(3) 文字数(列の数)に合わせて MAX_LEN を変更する.
(4) loop( )内の count でスクロールスピードを調整する.
18
可変抵抗の使い方
4.外部入力による点灯位置の制御
ALPS ロータリーボリューム 10kΩ 型番RK09K1130AP5
1 2 3 1
3
つまみ
2
10kΩ
つまみの回転角度
端子1-2間の抵抗
B特性
・ポテンショメータ
・電子回路
A特性
オーディオ用
ブレッドボードに挿す
ために曲げている
回路図
19
可変抵抗器の配線
4.外部入力による点灯位置の制御
ANALOGIN
5VX
行方向
Y
列方向
GND
A0
A1
POWER
20
スケッチの例 RowColumnScanning を使用
4.外部入力による点灯位置の制御
(1) ファイル ⇒ スケッチの例 ⇒ 07.Display ⇒
RowColumnScanning を選択
(2) Arduino UNO のピン番号をLEONALD仕様に変更
// 2-dimensional array of row pin numbers:
const int row[8] = {2,7,19,5,13,18,12,16 } を
const int row[8] = {2,7,23,5,13,22,12,20 } に変更
// 2-dimensional array of column pin numbers:
const int col[8] = {6,11,10,3,17,4,8,9 } を
const int col[8] = {6,11,10,3,21,4,8,9 } に変更
21
RowColumnScanning
4.外部入力による点灯位置の制御
// 2-dimensional array of pixels:
int pixels[8][8]; // ドットマトリクスLED用の
8×8の二次元配列を準備
// cursor position:
int x = 5; //LEDのx軸(行方向)の位置を決める変数 ⇒ pixelsのx番地
int y = 5; //LEDのy軸(列方向)の位置を決める変数 ⇒ pixelsのy番地
// initialize the pixel matrix:
for (int x = 0; x < 8; x++) {
for (int y = 0; y < 8; y++) {
pixels[x][y] = HIGH; //配列pixelsの中身をすべてHIGHに初期化
}
}
void setup( )は省略
0
1
2
3
4
5
6
7
yの番地
xの番地
0 1 2 3 4 5 6 7
22
void readSensors() {
// turn off the last position:
pixels[x][y] = HIGH; // 配列pixelsの番地(x,y:前の番地)の中身をHIGHに設定
// read the sensors for X and Y values:
x = 7 - map(analogRead(A0), 0, 1023, 0, 7); //入力電圧を0~7へ変換し,
それを7から引いたものをx
y = map(analogRead(A1), 0, 1023, 0, 7); //入力電圧を0~7へ変換し,それをy
// set the new pixel position low so that the LED will turn on
// in the next screen refresh:
pixels[x][y] = LOW; // 配列pixelsの番地(x,y:現在の番地)の中身をLOWに設定
}
RowColumnScanning
4.外部入力による点灯位置の制御
A0の電圧を取得 現在の範囲 新しい範囲
0
1
2
3
4
5
6
7
yの番地
xの番地
0 1 2 3 4 5 6 7
readSensors()は,可変抵抗のつまみの位置を
電圧として読み込み,その値によって点灯位置の番
地x,y を決め,そこがONになるように配列pixelsに
LOWをセットする.
23
RowColumnScanning
4.外部入力による点灯位置の制御
void refreshScreen() { //pixel[x][y]をスキャンしてLOWの位置でLEDを点灯させ,すぐに消す
// iterate over the rows (anodes):
for (int thisRow = 0; thisRow < 8; thisRow++) { // 行の繰り返し
// take the row pin (anode) high:
digitalWrite(row[thisRow], HIGH); // thisRow番目の行をHIGHにする(ONの準備)
// iterate over the cols (cathodes):
for (int thisCol = 0; thisCol < 8; thisCol++) { // 列の繰り返し
// get the state of the current pixel;
int thisPixel = pixels[thisRow][thisCol]; // thisPixel に 現在のpixels[thisRow][thisCol] の中身を代入
// when the row is HIGH and the col is LOW,
// the LED where they meet turns on:
digitalWrite(col[thisCol], thisPixel); // thisCol列 に thisPixel の値をデジタル出力
(thisPixel が LOW のところだけ LED ON)
// turn the pixel off:
if (thisPixel == LOW) { // もし thisPixel の中身が LOW ならば次を実行
digitalWrite(col[thisCol], HIGH); // thisCol列に HIGH を出力(LED OFF)
}
}
// take the row pin low to turn off the whole row:
digitalWrite(row[thisRow], LOW); // thisRow番目の行をLOWにする(OFFに戻す)
}
}
点灯
消灯
24
参考文献・購入先
• Massimo Banzi著,船田巧訳:Arduinoをはじめよう第2版,㈱オ
ライリージャパン,2000円+税
• 河連庸子,山崎文徳,神原健著:Arduinoスーパーナビゲーショ
ン,リックテレコム,3600円+税
• 建築発明工作ゼミ2008 基本から応用まで詳しく解説されています.
http://kousaku-kousaku.blogspot.jp/2008/07/arduino.html
• 部品の購入先
Arduino:スイッチサイエンス http://www.switch-science.com/
電子部品:秋月電子通商 http://akizukidenshi.com/catalog/
皆様お疲れさまでした.
25

平成25年社会人講座 Arduinoによるマイコン入門講座