大人の科学'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