« Arduinoで作ろう(32) 7セグLEDでデジタル時計 | トップページ | Arduinoで作ろう(34) 赤外線リモコンカー »

2019年9月 9日 (月)

Arduinoで作ろう(33) 7セグLEDでデジタル時計 〈その2〉

20190909multi_function_shield

 以前 紹介したMulti Function Shieldで,7セグLEDデジタル時計を作ってみました。

Multifunctionshield_tokei_
 前回のシールドはシフトレジスタ74HC595が1個,7セグLEDはカソードコモンでしたが,今回のは74HC595が2個,7セグLEDはアノードコモンです。
どう配線されているかと言うと,こんな感じ↓

20190909

 桁選択用74HC595のSDOから数字表示用74HC595のSDIに配線されてますから,Shiftoutでデータを送るときは,数字表示用のデータを先に送らないといけません。
で,スケッチはこれです→ 20190908_ks0184_tokei.ino

/*
  Multi_function_shield
  RTC DS3231 7セグLEDデジタル時計
*/
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire>
Rtc(Wire);
const int latch = 4;   // Latchピン
const int clock = 7;   // Clockピン
const int data = 8;   // Serial Data In ピン
const byte digit[] = //7seg 点灯パターン(アノードコモン)
{
  B11000000, // 数字 0
  B11111001, // 1
  B10100100, // 2
  B10110000, // 3
  B10011001, // 4
  B10010010, // 5
  B10000010, // 6
  B11011000, // 7
  B10000000, // 8
  B10010000  // 9
};

const byte segment[] =
{
  B00001000, //1桁め
  B00000100, //2桁め
  B00000010, //3桁め
  B00000001  //4桁め
};

void setup() {
  pinMode(latch, OUTPUT);
  pinMode(clock, OUTPUT);
  pinMode(data, OUTPUT);
  Rtc.Begin() ;
 // DS3231の日時を「それなりの値」に設定する場合に、以下の2行をコメントアウト
 // RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__) ;
 // Rtc.SetDateTime(compiled) ;
}

void loop() {
 RtcDateTime dt = Rtc.GetDateTime() ;
  Disp(3,dt.Hour()/10%10);
  Disp(2,dt.Hour()%10);
  Disp(1,dt.Minute()/10%10);
  Disp(0,dt.Minute()%10);
 }

void Disp(byte keta,byte value){
  digitalWrite(latch, LOW);
  shiftOut(data, clock, MSBFIRST,digit[value]);
    if (keta == 2) {
    shiftOut(data, clock, MSBFIRST, digit[value]&B01111111); //hhとmmの間に小数点をつける
    }
  shiftOut(data, clock, MSBFIRST, segment[keta]);
  digitalWrite(latch, HIGH);
  delay(4);
 }

20190908

|

« Arduinoで作ろう(32) 7セグLEDでデジタル時計 | トップページ | Arduinoで作ろう(34) 赤外線リモコンカー »

Arduino」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« Arduinoで作ろう(32) 7セグLEDでデジタル時計 | トップページ | Arduinoで作ろう(34) 赤外線リモコンカー »