だから、私はこの問題を徹底的に見据えていましたが、問題が何であるかを推測することはできません。
私は行列モジュールでArduino UNOを使用しています。プログラムをアップロードした後、常に同じ秒間正しく動作します。プログラムはバイナリのカウントダウンです。 :)
だから私はそれが何らかのオーバーフローの問題でなければならないと思いますが、コードのどの部分がそれを引き起こすのを助けてくださいますか?私の先端は弦です....
更新:@NickGammonありがとう簡単なintを使用してコードを書き直しましたが、コードは同じように動作しました。遅延によって問題が発生しました。私は時間を適切に数えなかった。この記事もチェックしてください:
Arduino遅延機能
#include "LedControl.h"
LedControl lc=LedControl(12,11,10,1); //Pins: DIN,CLK,CS, # of Display connected
long previoustime=0;
long interval=1000;
unsigned long currenttime;
int hours = 11;
int minutes = 0;
int seconds = 0 ;
void setup() {
Serial.begin(9600);
lc.shutdown(0,false);
lc.setIntensity(0,5);
lc.clearDisplay(0);
currenttime= millis();
}
void loop() {
currenttime=millis();
if(currenttime-previoustime>=interval) {
set(hours/10, 0);
set(hours%10, 1);
set(0,2);
set(minutes/10, 3);
set(minutes%10, 4);
set(0,5);
set(seconds/10, 6);
set(seconds%10, 7);
minusone();
previoustime=currenttime;
}
}
void set(int num, int i) {
switch(num) {
case 1: lc.setColumn(0,i,B00000001); break;
case 2: lc.setColumn(0,i,B00000010); break;
case 3: lc.setColumn(0,i,B00000011); break;
case 4: lc.setColumn(0,i,B00000100); break;
case 5: lc.setColumn(0,i,B00000101); break;
case 6: lc.setColumn(0,i,B00000110); break;
case 7: lc.setColumn(0,i,B00000111); break;
case 8: lc.setColumn(0,i,B00001000); break;
case 9: lc.setColumn(0,i,B00001001); break;
default: lc.setColumn(0,i,B00000000); break;
}
}
void minusone() {
if(hours==0 && minutes == 0 && seconds == 0) {
}
if(seconds!=0) {
seconds--;
} else if(minutes!=0) {
minutes--;
seconds=59;
} else if(hours!=0) {
hours--;
minutes=59;
seconds=59;
}
}
オリジナルのコードとバグのコード:
#include "LedControl.h"
LedControl lc=LedControl(12,11,10,1); //Pins: DIN,CLK,CS, # of Display connected
int counttime=0;
void setup() {
Serial.begin(9600);
lc.shutdown(0,false);
lc.setIntensity(0,5);
lc.clearDisplay(0);
counttime=millis();
//Serial.println(counttime);
}
String time = "11:00:00";
void loop() {
//Serial.println(millis());
for(int i=0;i