スイッチの状態に合わせて16進数を表示する

【Ver.1非対応】
Ver.2とArduino基礎学習シールドで利用可能です

スイッチ(S3,S4,S5,S6)の状態に合わせて、7セグメントLEDに対応する16進数を表示するプログラムです。スイッチはHIGHになっているところを「1」とします。7セグメントLEDの表示には配列を使用しています。7セグ→{a,b,c,d,e,f,g} 例えば、「0」は{1,1,1,1,1,1,0} として点灯するセグメントを「1」にしています。

// スイッチ(S3,S4,S5,S6)の状態に合わせて
// 7セグメントLEDに対応する16進数を表示する。
// スイッチはHIGHになっているところを「1」とします。
//  配列を使用7セグ→{a,b,c,d,e,f,g}

#define L1 10
#define L2 11
#define L3 12
#define L4 13

#define S3 19
#define S4 18
#define S5 17
#define S6 16

int i,kazu,keta1,keta2,keta4,keta8 ;           // 変数を整数型で宣言

int num0[]={1,1,1,1,1,1,0};      //配列の宣言 7セグメントLED「0」
int num1[]={0,1,1,0,0,0,0};      // 1
int num2[]={1,1,0,1,1,0,1};      // 2
int num3[]={1,1,1,1,0,0,1};      // 3
int num4[]={0,1,1,0,0,1,1};      // 4
int num5[]={1,0,1,1,0,1,1};      // 5
int num6[]={1,0,1,1,1,1,1};      // 6
int num7[]={1,1,1,0,0,0,0};      // 7
int num8[]={1,1,1,1,1,1,1};      // 8
int num9[]={1,1,1,0,0,1,1};      // 9
int numa[]={1,1,1,0,1,1,1};      // A
int numb[]={0,0,1,1,1,1,1};      // b
int numc[]={1,0,0,1,1,1,0};      // C
int numd[]={0,1,1,1,1,0,1};      // d
int nume[]={1,0,0,1,1,1,1};      // E
int numf[]={1,0,0,0,1,1,1};      // F
 
void setup() {
  
  for(i=1;i<=7;i++){              //  iを変えて4回繰り返し
  pinMode(i, OUTPUT);             //ポートの設定(入力か出力か?)
  }                               //D1~D7を出力に設定
  
  for(i=10;i<=13;i++){            //  iを変えて4回繰り返し
  pinMode(i, OUTPUT);             //ポートの設定(入力か出力か?)
  }                               //D10,D11,D12,D13を出力に設定
  
  for(i=16;i<=19;i++){            //  iを変えて4回繰り返し
  pinMode(i, INPUT);              //ポートの設定(入力か出力か?)
  }                               //D16,D17,D18,D19を入力に設定
  
}
 
void loop() {
  
  if(digitalRead(S3)==HIGH){ digitalWrite(L1, HIGH);      // L1を点灯
                             keta1 = 1;
                           }                        
  else{digitalWrite(L1, LOW);
       keta1 = 0;
      }
  
  if(digitalRead(S4)==HIGH){ digitalWrite(L2, HIGH);      // L2を点灯
                            keta2 = 2 ;
                           }         
  else{digitalWrite(L2, LOW);
       keta2 = 0;
      }
  
  if(digitalRead(S5)==HIGH){ digitalWrite(L3, HIGH);      // L3を点灯
                            keta4 = 4 ;
                           }          
  else{digitalWrite(L3, LOW);
       keta4 = 0 ;
      }
  
  if(digitalRead(S6)==HIGH){ digitalWrite(L4, HIGH);       // L4を点灯
                            keta8 = 8;
                           }         
  else{digitalWrite(L4, LOW);
       keta8 = 0;
      }
      
  kazu = keta1 + keta2 + keta4 + keta8 ;      //16進数の計算
  
  for (int i=1;i<=7;i++){digitalWrite(i,LOW);}     //一旦、7セグ消灯
  
  switch (kazu) {                             //ここから16進数の表示
  
  case 0:
    for (int i=1;i<=7;i++){      //「0」を表示。aからgまで7回繰り返し処理
      if(num0[i-1]==1){          //「1」の時はそのセグメントを点灯させる
        digitalWrite(i,HIGH);
      }
    }
    
    break;
  
  case 1:
    for (int i=1;i<=7;i++){       //「1」を表示
      if(num1[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
    
    break;
  
  case 2:
    for (int i=1;i<=7;i++){        //「2」を表示
      if(num2[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
    break;
  
  case 3:
    for (int i=1;i<=7;i++){         //「3」を表示
      if(num3[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
   
    break;
  
  case 4:
    for (int i=1;i<=7;i++){          //「4」を表示
      if(num4[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
   
    break;
  
  case 5:
    for (int i=1;i<=7;i++){           //「5」を表示
      if(num5[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
   
    break;
  
  case 6:
    for (int i=1;i<=7;i++){           //「6」を表示
      if(num6[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
  
    break;
  
  case 7:
    for (int i=1;i<=7;i++){            //「7」を表示
      if(num7[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
   
    break;
  
  case 8:
    for (int i=1;i<=7;i++){             //「8」を表示
      if(num8[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
   
    break;
  
  case 9:
    for (int i=1;i<=7;i++){               //「9」を表示
      if(num9[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
  
    break;
  
  case 10:
    for (int i=1;i<=7;i++){               //「A」を表示
      if(numa[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }

    break;
  
  case 11:
    for (int i=1;i<=7;i++){                //「b」を表示
      if(numb[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
  
    break;
  
  case 12:
    for (int i=1;i<=7;i++){                 //「C」を表示
      if(numc[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
  
    break;
  
  case 13:
    for (int i=1;i<=7;i++){                  //「d」を表示
      if(numd[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
  
    break;
  
  case 14:
    for (int i=1;i<=7;i++){                   //「E」を表示
      if(nume[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
    
    break;
  
  case 15:
    for (int i=1;i<=7;i++){                    //「F」を表示
      if(numf[i-1]==1){
        digitalWrite(i,HIGH);
      }
    }
  
    break;
  }
  
}
//ここまで