LEDバーアレイ
LEDバーアレイは10個のLEDが組み込まれたデバイスで、複数集めると動的な棒グラフの表示ができます。各LEDにUNOから直接に接続をすると手間なので、シフトレジスターを用いて、UNO
からは2本の信号で制御する方法を紹介します。この方法は、後のSPIやI2Cによるシリアル接続の基礎となります。





digitalWrite(D5,HIGH); digitalWrite(D5,LOW);次に、D4(CLK) に ht 個のパルスを送ります。
for(i=0;i<ht;i++){
digitalWrite(D4,HIGH);
digitalWrite(D4,LOW);
}
これで、QAから順に ht 個の出力端子を HIGH に設定できます。たとえば、ht を 3にすると、QA,QB,QC が1になります。//LED Bar
//CLR:9 D11
//CLK:9 D10
int ht,i;
int CLR=11;
int CLK=10;
void setup(){
pinMode(CLR,OUTPUT);
pinMode(CLK,OUTPUT);
}
void loop(){
for(ht=0;ht<9;ht++){
//シフトレジスタをクリア
digitalWrite(CLR,LOW);
digitalWrite(CLR,HIGH);
digitalWrite(CLK,LOW);
//set ht bits
for(i=0;i<ht;i++){
//CLKを送りシフトする
digitalWrite(CLK,HIGH);
digitalWrite(CLK,LOW);
}
delay(200);
}
}

//LEDバーを順に点灯する
int BarLED1 = 2;//バーLEDが接続されている一番若いピン
void setup(){
//モード指定
for(int i = 0;i <= 10;i++){
pinMode(BarLED1 + i,OUTPUT);
}
}
void loop(){
for(int i = 0;i <= 10;i++){
setBar(i);
delay(500);//
}//for
}
//num個のLEDを点灯する
void setBar(int num){
int i;
if(num >= 10) num = 10;
if(num < 0) num = 0;
//num個点灯
for(int i = 0;i < num;i++){
digitalWrite(BarLED1 + i,HIGH);
}
//それ以上は消灯
for(int i = num;i < 10;i++){
digitalWrite(BarLED1 + i,LOW);
}
}