ラベル 親子時計、設備時計、master clock の投稿を表示しています。 すべての投稿を表示
ラベル 親子時計、設備時計、master clock の投稿を表示しています。 すべての投稿を表示

2022年1月5日水曜日

親子時計(設備時計)をうごかす 3 パルス発生装置

 Arduino + RTC + Hブリッジで行けそうかと思っております。

とり合えず書いたスケッチを。


#include <DS3232RTC.h>           

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);

const char *weekStr[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

const int DIN_PIN = 8;


void setup() {

  // use pins for pulse

  pinMode(DIN_PIN, INPUT_PULLUP );

  pinMode(6, OUTPUT);

  pinMode(7, OUTPUT);


  ///// 時刻の設定 /////

  // 時刻設定時のみ以下2行のコメントアウト(//)する

  //  setTime(12, 26, 30, 14, 1, 2022);  // 時,分,秒,日,月,年の順で設定

  //  RTC.set(now());  

  setSyncProvider(RTC.get);  

  lcd.init();                          

  lcd.backlight();

}


void loop() {


 int value;

  value = digitalRead( DIN_PIN );



  //早送りモードの条件 pin8をアースに落とす 5秒で2パルス

  if (value == LOW) {

    digitalWrite(6, HIGH);

    digitalWrite(7, LOW);

    delay (2000);

    digitalWrite(6, LOW);

    digitalWrite(7, LOW);

    delay(1000);

    digitalWrite(6, LOW);

    digitalWrite(7, HIGH);

    delay (2000);

    lcd.init();

    lcd.setCursor(0, 0);

    lcd.print("FORWARD>>>");


  } else

 //以下通常時計動作 

  {

    lcd.setCursor(0, 0);

    lcd.print(year());

    lcd.print("/");

    if (month() < 10) {

      lcd.print("0");

    }

    lcd.print(month());

    lcd.print("/");

    if (day() < 10) {

      lcd.print("0");

    }

    lcd.print(day());

    lcd.print(" ");

    lcd.print(weekStr[weekday() - 1]);

    lcd.setCursor(0, 1);

    if (hour() < 10) {

      lcd.print("0");

    }

    lcd.print(hour());

    lcd.print(":");

    if (minute() < 10) {

      lcd.print("0");

    }

    lcd.print(minute());

    lcd.print(":");

    if (second() < 10) {

      lcd.print("0");

    }

    lcd.print(second());


//秒数が 0,1秒、30,31秒のときだけpin 6,7出力する。(パルス幅2秒)

    if (second() == 30 || second() == 31) {

      digitalWrite(6, HIGH);

    }  else

      digitalWrite(6, LOW);

    if (second() == 0 || second() == 1) {

      digitalWrite(7, HIGH);

    } else

      digitalWrite(7, LOW);

    delay(1000);  // 1秒でループ

  }

}


とりあえずブレッドボードで動作確認。