« Arduinoで作ろう(31) ATtiny13をArduino IDEで使ってみる | トップページ | Arduinoで作ろう(33) 7セグLEDでデジタル時計 〈その2〉 »

2019年9月 7日 (土)

Arduinoで作ろう(32) 7セグLEDでデジタル時計

Kcs1

 aitendoで買ったシールドで,このラーニングキットK-CS1ってのを忘れてました。
4桁7セグ表示器+74HC595ディスプレイ回路,温度センサインターフェース,クロックモジュールインターフェース,電圧メーター回路,タクトスイッチx2回路,超音波センサインターフェース,ブザー回路がついていて,学習用に便利なものです。
 今回はこれでデジタル時計を作ってみます。RTCはDS3231で,ライブラリはこれを使いました。

Fritzingで描いた回路図はこうなります。

7segled_tokei_2 シフトレジスタ74HC595があるので比較的ラクですが,スマートなコードはなかなかうまく書けませんなあ。もう少し勉強が必要ですね。

スケッチはこれ→20190907_7segled_clock.ino

// aitendoシールド K-CS1 + RTC DS3231 + 7セグLED デジタル時計

#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire>
Rtc(Wire);
const byte segment[] = {4,5,6,7}; //各桁カソードピン
const int clock = 10;   //74HC595 → Pin 10
const int latch = 9;    //74HC595 → Pin 9
const int data = 8;     //74HC595 → Pin 8
const byte digit[] =       //7セグLED 点灯パターン
{
  B00111111, //0
  B00000110, //1
  B01011011, //2
  B01001111, //3
  B01100110, //4
  B01101101, //5
  B01111101, //6
  B00000111, //7
  B01111111, //8
  B01101111  //9
};

void setup ()
 {
  for (int i = 0; i < 4; i++) {
  pinMode(segment[i], OUTPUT);
  }
  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){
  for (byte j = 0; j < 4; j++) {
   digitalWrite(segment[j], HIGH); // 全桁LEDをOFF
   }
  digitalWrite(segment[keta], LOW);
  digitalWrite(latch, LOW);
  shiftOut(data, clock, MSBFIRST,digit[value]);
   if (keta == 2) {
   shiftOut(data, clock, MSBFIRST, digit[value]|B10000000); //hhとmmの間に小数点をつける
   }
  digitalWrite(latch, HIGH);
  delay(4);
 }

Rimg0044

|

« Arduinoで作ろう(31) ATtiny13をArduino IDEで使ってみる | トップページ | Arduinoで作ろう(33) 7セグLEDでデジタル時計 〈その2〉 »

Arduino」カテゴリの記事

コメント

コメントを書く



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


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



« Arduinoで作ろう(31) ATtiny13をArduino IDEで使ってみる | トップページ | Arduinoで作ろう(33) 7セグLEDでデジタル時計 〈その2〉 »