Arduino UNOはしばらく後に仕事を止める - SOLVED

だから、私はこの問題を徹底的に見据えていましたが、問題が何であるかを推測することはできません。

私は行列モジュールで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
0
String クラスを使わずに書き直すことをお勧めします。あなたはおそらくメモリを断片化しています。時間を把握することは、文字列ではなく数字を使用することの練習です。
追加された 著者 Nick Gammon,
ああ、少なくとも書き直しは、基本的なロジックをよりよく理解するのに役立ちました。よくやった!
追加された 著者 Nick Gammon,
@NickGammonあなたの提案をありがとう!私はそれを書き直しましたが、同じことをしました。コードがずっと簡単で短くても、ちょうど同じ秒数で停止しました。実際にはコードの他の部分が問題を引き起こしていました。これは時間を計る部分でした。コードを更新して説明します。 :)
追加された 著者 Simon Steinberger,
私はこの問題をOP以外のトピックとしてクローズすることに投票しました。なぜなら、それはOP自身によって解決されたプログラミングエラーであったからです。
追加された 著者 user31481,

答えはありません

0