arduinoで7セグメントを使いたい
arduinoで下記のスケッチを使って7セグメントledを動かしているのですが、
///////////////////////////////////////////////////////////////////////////////////////////////////////
//LED表示関数を定義
void NumPrint(int Number){
for (int w=0; w<=7; w++){
digitalWrite(w+1,Num_Array[Number][w]);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
(1)この部分がどのような動作をしているのかわかりません。
(2)また、arduinoMEGAを使用して22~29番ピンを出力にして動かそうとしても上手くいきません。
(1)についての説明と(2)の解決法を知りたいです。
よろしくお願いしますm(._.)m
↓使っているスケッチ(1~8番ピンが出力のもので上手く動作します)
void setup(){
//1~8番ピン デジタル出力へセット
for (int i=1; i<=8; i++){
pinMode(i,OUTPUT);
}
}
//LEDレイアウトを定義
//0,1,2,3,4,5,6,7,8,9,0,. の順。
boolean Num_Array[11][8]={
{0,0,0,1,0,0,0,1},{1,1,0,1,0,1,1,1},{0,0,1,1,0,0,1,0},{1,0,0,1,0,0,1,0},
{1,1,0,1,0,1,0,0},{1,0,0,1,1,0,0,0},{0,0,0,1,1,0,0,0},{1,1,0,1,0,0,0,1},
{0,0,0,1,0,0,0,0},{1,0,0,1,0,0,0,0},{1,1,1,0,1,1,1,1}
};
//LED表示関数を定義
void NumPrint(int Number){
for (int w=0; w<=7; w++){
digitalWrite(w+1,Num_Array[Number][w]);
}
}
void loop(){
for(int t=0;t<=10;t++){
NumPrint(t);
delay(500);
}
}
お礼
ありがとうございます。 Arduino 始めて1週間の初心者です。 下記のように割り込み禁止を入れて確認しました。 正しく動作するのは void loop() { の直後に noInterrupts(); を入れた場合でした。 割り込み許可を再度入れた場合は正常に動作しませんでした。 マニュアルでは「割り込み許可がデフォルト」とあり、どのような割り込みが許可されていて、影響しているかは不明ですが。 ミリ秒の遅延をかける時は問題ない(誤差が小さい)ですが、このような短時間の遅延の場合は気を付けないと思いました。 int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { noInterrupts(); digitalWrite(led, HIGH); // interrupts(); // noInterrupts(); delayMicroseconds(1); // interrupts(); // noInterrupts(); digitalWrite(led, LOW); // interrupts(); // noInterrupts(); delayMicroseconds(1); // interrupts(); }