アットウィキロゴ

Japaninoを使ってみる

大人の科学'Japanino’を買ってみた。
使いやすくていいね!

まずは7セグメントLED(4桁)を点灯させてみました。
それだけではつまらないので、AD変換で、電圧計にしてみました。





 byte _7seg_table(byte ttemp){
  byte seg;
  switch (ttemp) {
  case 0:
    seg = B01111110;//  0 1111110
    break;
  case 1:
    seg = B00110000;// 1 0110000
    break;
  case 2:
    seg = B01101101;// 2 1101101
    break;
  case 3:
    seg = B01111001;// 3 1111001
    break;
  case 4:
    seg = B00110011;// 4 0110011
    break;
  case 5:
    seg = B01011011;// 5 1011011
    break;
  case 6:
    seg = B01011111;// 6 0011111
    break;
  case 7:
    seg = B01110000;// 7 1110000
    break;
  case 8:
    seg = B01111111;// 8 1111111
    break;
  case 9:
    seg = B01111011;// 9 1110011
    break;
  case 10:
    seg = B01110111;// A
    break;
  case 11:
    seg = B00011111;// b
    break;
  case 12:
    seg = B01001110;// C
    break;
  case 13:
    seg = B00111101;// d
    break;
  case 14:
    seg = B01001111;// E
    break;
  case 15:
    seg = B01000111;// F
    break;
  default:
    seg = B00000000;//  0
  }
  return ~seg; // LOWでONなので反転
 }
 
 /* 
 //  0 1111110
 // 1 0110000
 // 2 1101101
 // 3 1111001
 // 4 0110011
 // 5 1011011
 // 6 0011111
 // 7 1110000
 // 8 1111111
 // 9 1110011
  */
 //ダイナミック点灯をする 
 void DynamicScan(byte deg[4]){
  for (byte i = 0; i < 4; i++){    
    //port D0~7 = a~g
    //port D8  = 1
    //port D9  = 10
    //port D10 = 100
    //port D11 = 1000
    //D0~7 deg[i]
    for(byte j = 0; j < 8; j++){
      digitalWrite(j + 2, bitRead(deg[i], j));
    }
    digitalWrite(i + 10, HIGH);
    delay(1 / 256 * 1024);// ms ( 240Hz )
    digitalWrite(i + 10, LOW);
  }
  return;
 }
 
 boolean flag = false;
 
 void setup() {
  for (byte i = 2; i < 14; i++){
    pinMode(i, OUTPUT);
  }
  for(int i = 100; i > 1; i--){
    _4digits_LED(i);
  }
 }
 
 void _4digits_LED(int val){
  //桁ごとに割る
  byte deg[4];
  deg[3] = val / 1000;
  val = val - deg[3] * 1000;
  deg[2] = val / 100;
  val = val - deg[2] * 100;
  deg[1] = val / 10;
  deg[0] = val - deg[1] * 10;
 
  //変換テーブルに載せる
  for (byte i = 0; i < 4; i++){
    deg[i] = _7seg_table(deg[i]);  
  }
 
  DynamicScan(deg);
  return;
 }
 
 
 void loop(){
 
  flag = true;
  //AD読み出し
  int AD_old = analogRead(0);
  for(int k = 0; k < 1000; k++){
    int AD = analogRead(0);
    _4digits_LED(AD);
    if((AD != AD_old) && (AD != AD_old + 1) && (AD != AD_old - 1)) flag = false;
  }
  if(flag){
    for(byte k = 0; k < 100; k++){
      int AD = analogRead(0);
      if((AD != AD_old) && (AD != AD_old + 1) && (AD != AD_old - 1)) break;
      byte deg[4]={0xfe,0xff,0xff,0xff};
      DynamicScan(deg);
    }
        for(byte k = 0; k < 100; k++){
      int AD = analogRead(0);
      if((AD != AD_old) && (AD != AD_old + 1) && (AD != AD_old - 1)) break;
      byte deg[4]={0xff,0xfe,0xff,0xff};
      DynamicScan(deg);
    }
        for(byte k = 0; k < 100; k++){
      int AD = analogRead(0);
      if((AD != AD_old) && (AD != AD_old + 1) && (AD != AD_old - 1)) break;
      byte deg[4]={0xff,0xff,0xfe,0xff};
      DynamicScan(deg);
    }
        for(byte k = 0; k < 100; k++){
      int AD = analogRead(0);
      if((AD != AD_old) && (AD != AD_old + 1) && (AD != AD_old - 1)) break;
      byte deg[4]={0xff,0xff,0xff,0xfe};
      DynamicScan(deg);
    }
 
  }
  //変換
 
 }
 
最終更新:2010年09月04日 20:09
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。