SpartkFun ProMicroで読み取った電圧を表示するプログラムができた。
ポートの8bitのレジスタを直接いじろうかなとも思ったが、Arduinoのプログラムでは各ボードにデジタルピンなどが割り振られているのでdigitalWrite(pinNo, Bool)のほうが移植性が良いらしいとか。
作って思った、表示桁数は必要な分だけ確保するべきであった。
uint8_t Channels[]={2,3,4,5,6,7,8}; //デジタル出力ピンの設定。ドットは別で定義しておこう
// /-a-/
// f b
// /-g-/
// e c
// /-d-/ .
//Channels 23456789
//7segment abcdefg.
//7セグの配列を入れてある
uint8_t SegmentArray[10][7]=
{
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0,1,1,1,1,1},
{1,1,1,0,0,1,0},
{1,1,1,1,1,1,1},
{1,1,1,1,0,1,1},
};
int ADCValue;
int LN2;
uint8_t A;
uint8_t B;
void ShowNum(uint8_t X) {
//7セグLEDに数字を表示する
for(uint8_t i=0;i<sizeof(Channels);i++){
digitalWrite(Channels[i],SegmentArray[X][i]);
}
}
void ShowNone(){
//7セグLED消灯
for(uint8_t i=0;i<sizeof(Channels);i++){
digitalWrite(Channels[i],0);
}
}
void setup() {
// put your setup code here, to run once:
// Serial port setting
Serial.begin(9600);
// delay(3000);
Serial.println("Hello World!");
//pinMode Setting for a to g LEDs
for(unsigned char i=0;i<sizeof(Channels);i++){
pinMode(Channels[i],OUTPUT);
}
//Dot Position
pinMode(9,OUTPUT);
// 7セグLEDの点灯テスト
for(unsigned char i=0;i<sizeof(Channels);i++){
digitalWrite(Channels[i],HIGH);
delay(100);
Serial.println(Channels[i]);
digitalWrite(Channels[i],LOW);
}
//0から9までの数字表示の確認をする
for(uint8_t j=0;j<10;j++){
ShowNum(j);
delay(100);
}
ShowNone();
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
//ADCで電圧を読んでくる
// 1V-5Vを0-99%に割り付けた値をXとする(100%表示はしない)
// Xを10で割った商Aが10の位、余りBが1の位になる。
// Aを表示,Bを表示,ブランク表示を繰り返す。
ADCValue = analogRead(A0); //電圧読み取り
LN2 = map(ADCValue,205,1023,0,99); //1-5Vを0-99に割付
A = LN2 / 10; //10の位
B = LN2 % 10; //1の位
//debug zone
Serial.print(millis());
Serial.print(",ADC Value:");
Serial.print(ADCValue);
Serial.print(",LN2 Level:");
Serial.print(LN2);
Serial.print(",AandB:");
Serial.print(A);
Serial.print(",");
Serial.println(B);
ShowNum(A);
delay(600);
ShowNone();
delay(50);
ShowNum(B);
delay(400);
ShowNone();
delay(300);
}