酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

RTCユニットに代わって自己内製時計を使う

2022年08月03日 20時42分04秒 | マイコン(ESP32・Arduino等)

さて、先日作ったサーボテスト回路を少し変更して、2chのポテンショメータでPlotClockを動かしてみた。
Liftサーボも含めちゃんと動くようになった。(一体何が悪かったのかわからない・・・)

RTC基盤を接続すると挙動がおかしくなるようだし、そもそも時刻を保持できないという大馬鹿者RTCなので、
今回からはArduinoのタイマー2割り込みを使って擬似的な時間をカウントアップする方針に変更した。

Timer割り込みには3種類あるそうだが、音をだすことなど無いのでTimer2を割り込みに使うことにした。
レジスタの直接操作などの例示もあったが、今回は安直なライブラリを使わせてもらう。

ライブラリ管理から「MsTimer2」を探してインストール

一定時間ごとに割り込みを掛けて、現在時刻をシリアル通信へ吐くソースを書いた。
繰り上げしながらちゃんと時間が進みます。

-----------------

#include "MsTimer2.h"
const int led_pin = 13;   // default to pin 13

int hh;   // 時
int mm;   // 分
int ss;   // 秒
int interval; // 割り込みタイミング (ms) 1000で1秒ごと++

//---- Serialで現在時刻を書き出し --------
void dsptime(){
  Serial.print(hh);
  Serial.print(':');
  Serial.print(mm);
  Serial.print(':');
  Serial.println(ss);
}
//----- 割り込みで秒を++し時間を進める ---
void timeadd()
{
  static boolean output = HIGH;
  digitalWrite(led_pin, output);  // LED(13pin)をon/off
  output = !output;
  ss++;
  if (ss>=60){    // 時間の繰り上げ処理
    ss = 0;
    mm++;
    if (mm >=60){
      mm = 0;
      hh++;
      if (hh >=24){
        hh = 0;
      }
    }
  }
  dsptime();  // Serialで書き出し
}

void setup()
{
  hh = 23;  // 現在の時刻をセット
  mm = 59;
  ss = 55;
  interval = 500; // 割り込みタイミング ms
  pinMode(led_pin, OUTPUT);
  MsTimer2::set(interval, timeadd); // 500ms period
  MsTimer2::start();
  Serial.begin(9600);
}

void loop()
{
}

この記事についてブログを書く
« このAI使った物体消去ソフト... | トップ |  »