Arduinoで作ろう(33) 7セグLEDでデジタル時計 〈その2〉
以前 紹介したMulti Function Shieldで,7セグLEDデジタル時計を作ってみました。
前回のシールドはシフトレジスタ74HC595が1個,7セグLEDはカソードコモンでしたが,今回のは74HC595が2個,7セグLEDはアノードコモンです。
どう配線されているかと言うと,こんな感じ↓
桁選択用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);
}
| 固定リンク | 0
「Arduino」カテゴリの記事
- WCH-LinkE とWCH-Link は別モノである(2023.12.02)
- Arduinoで作ろう(63) UNO R4 WiFiでスクロールNTP時計(2023.12.01)
- Arduinoで作ろう(62) ESP8266+SSD1306でNTP時計(2023.11.18)
- 新型 Arduino UNO R4 MINIMA を買った(2023.07.01)
「aitendo」カテゴリの記事
- aitendo 2023お楽しみ福袋(2023.01.02)
- aitendo 2022 お楽しみ福袋(2022.01.06)
- ZK-80で足し算(2020.07.23)
- TK-80互換機 ZK-80のキット(2020.07.21)
- Arduinoで作ろう(47) GPSモジュールで現在地の緯度・経度を取得(2020.04.18)
コメント