サンプルプログラム(4桁LED)

(2017.8.18 作成)

(2017.10.4 修正)

 このページでは右の4桁LEDディスプレイを使用するためのプログラムの差プルコードを提供しています。

 ライブラリのダウンロードはこちら、モジュールの使い方等についてはこちらをそれぞれ参照してください。

下に示していますが、STM32, Arduinoともにほぼ同じコードで実行できます。プログラムの内容は同じです。

 "0123" -> "-456" -> "Ahoy" -> 時刻の順に表示して終了します。また時刻を表す":"マークが1秒周期で点滅します。

 実際に時刻を設定しているわけではありませんので時間は変わりません。別途プログラムを作成する必要があります。

STM32

 STM32で使用する場合で、時刻を表す":"を点滅させる場合Tickerクラスで呼び出す割り込みルーチンを実装する必要があります。

 下のサンプルコードでは

TIM2_IRQ_Handler

になります。

#include "DKS_Common_F103xB.h"
#include "DKS_F103C8T6.h"
#include "DKS_I2C_F103xB.h"
#include "DKS_GPIO_F103xB.h"
#include "DKS_Wait_F103xB.h"
#include "DKS_Timer_F103xB.h"
#include "DKS_TM1637.h"

#include <time.h>

DKS::DigitalOut *scl, *sda;
DKS::Wait *w;
DKS::I2C::SoftwareI2C *i2c;
DKS::LED_Display::TM1637 *tm;
DKS::Ticker *ticker;
DKS::LED_Display::LEDdisp_Clock *led;

int main(void)
{
        DKS::InitSystem();

        scl = new DKS::DigitalOut(GPIOB, GPIO_PIN_10, DKS::OpenDrain, DKS::Pull_Up);
        sda = new DKS::DigitalOut(GPIOB, GPIO_PIN_11, DKS::OpenDrain, DKS::Pull_Up);
        w = new DKS::Wait(TIM3);
        ticker = new DKS::Ticker(TIM2, 500, DKS::TimeUnit_MilliSec);

        led = new DKS::LED_Display::LEDdisp_Clock(scl, sda, w, ticker);

        led->Show(123, 3, true);
        DKS::Delay(1000);

        led->Show(-456, 3, true);
        DKS::Delay(1000);

        led->Show(0, DKS::LED_Display::A, 1);
        led->Show(1, DKS::LED_Display::h, 2);
        const DKS::LED_Display::Char oy[] = { DKS::LED_Display::o, DKS::LED_Display::y };
        led->Show(2, oy, 2, 1);
        DKS::Delay(1000);

        struct tm t;
        t.tm_year = 2017;
        t.tm_mon = 8;
        t.tm_mday = 14;
        t.tm_hour = 22;
        t.tm_min = 14;
        t.tm_sec = 12;
        led->Show(t, DKS::LED_Display::LEDdisp_Clock::hhmm, 7);

        led->TickStart();
        for (;;)                ;
}

extern "C" void TIM2_IRQHandler()
{
        __HAL_TIM_CLEAR_IT(&ticker->Tim_Handle, TIM_IT_UPDATE);
        led->TickProcess();
}

Arduino

 Arduinoの場合もほぼ同じコードです。割り込みを制定する点も同じです。

 Arduinoの場合はライブラリ内にサンプルプログラムが入っているので、それを実行するのが早いと思います。

#include <DKS_Timer_Arduino.h>
#include <DKS_Wait_Arduino.h>
#include <DKS_Common_Arduino.h>
#include <DKS_I2C_Arduino.h>
#include <DKS_GPIO_Arduino.h>

#include "DKS_TM1637.h"

DKS::DigitalOut *scl, *sda;
DKS::Wait *w;
DKS::Ticker *ticker;
DKS::LED_Display::LEDdisp_Clock *led;

extern "C" void blinkProcess()
{
  led->TickProcess();
}

void setup() {
  scl = new DKS::DigitalOut(2);
  sda = new DKS::DigitalOut(3);
  w = new DKS::Wait();
  ticker = new DKS::Ticker(blinkProcess, 500, DKS::TimeUnit_MilliSec);

  led = new DKS::LED_Display::LEDdisp_Clock(scl, sda, w, ticker);

  // display "123" with zero pad
  led->Show(123, 3, true);
  DKS::Delay(1000);

  // display "-456"
  led->Show(-456, 3, true);
  DKS::Delay(1000);

  // display "Ahoy" with several way
  led->Show(0u, DKS::LED_Display::A, 1u);
  led->Show(1u, DKS::LED_Display::h, 2u);
  DKS::LED_Display::Char oy[] = { DKS::LED_Display::o, DKS::LED_Display::y };
  led->Show(2, oy, 2, 1);
  DKS::Delay(1000);

  struct tm t;
  t.tm_year = 2017;
  t.tm_mon = 8;
  t.tm_mday = 14;
  t.tm_hour = 22;
  t.tm_min = 14;
  t.tm_sec = 12;
  // display Time
  led->Show(t, DKS::LED_Display::LEDdisp_Clock::mmss, 7);

  led->TickStart();
}

void loop() {
  // put your main code here, to run repeatedly:

}