Arduino
1459384008

Two Wire Arduino Knight Rider Circuit and Sketch Using PCF8574 I/O expander IC

Arduinoから2ピンで複数のLED操作をする回路が参考になる。
Tutorial 18: Two Wire Arduino Knight Rider Circuit and Sketch Using PCF8574 I/O expander IC
Connect eight LEDs to an Arduino and make a Knight Rider display using only two Arduino pins in this tutorial. This is made possible by using a PCF8574 I/O expander IC.
1459383902

Arduino Clock Circuit and Sketch using PCF8563 Real Time Clock (RTC)

水晶振動子や電池バックアップの回路が参考になる。
Tutorial 16: Arduino Clock Circuit and Sketch using PCF8563 Real Time Clock (RTC)
The Arduino displays the time and date on a LCD (optional) and in the Arduino IDE serial monitor window in this tutorial. A PCF8563 real time clock (RTC) IC is used to generate the time and date.
1459156180

割り込み処理

  • LOW:LOWの間は何回でも発火
  • CHANGE:LOW→HIGH と HIGH→LOW の変化時に発火
  • RISING:LOW→HIGH の変化時に発火
  • FALLING:HIGH→LOW の変化時に発火
  • HIGH:HIGHの間は何回でも発火(UNOでは使用不可)
#include <TM1637Display.h> // 4-Dig LED Disp

#define FOURDIG_LED_CLK 4 // 7セグ4桁LEDはD4ピンに挿す
#define FOURDIG_LED_DAT 5
#define LED 8 // LEDはD8ピンに挿す
#define BUTTON 2 // ボタンはD2ピンに挿す

TM1637Display led4d(FOURDIG_LED_CLK, FOURDIG_LED_DAT);
int mode = 0; // 0=消灯モード、1=点滅モード
int count = 0; // ボタンを押した回数

void warikomi()
{
  led4d.showNumberDec(++count, false, 4, 0);
  if (mode) {
    mode = 0;
  } else {
    mode = 1;
  }
}

void setup() {
  led4d.setBrightness(0x0a);
  led4d.showNumberDec(count, false, 4, 0);
  pinMode(LED, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(BUTTON), warikomi, RISING ); // 0=D2、1=D3
}

void loop() {
  if (mode) {
    // LED点滅
    digitalWrite(LED, HIGH);
    delay(100);
    digitalWrite(LED, LOW);
    delay(100);
  } else {
    // LED消灯
    digitalWrite(LED, LOW);
  }
}
1458980082

時計(時報あり)

#include <TM1637Display.h> // 4-Dig LED Disp
#include <Wire.h>
#include "RTClib.h"

#define BUZZER 7
#define BUTTON 8
#define FOURDIG_LED_CLK 2
#define FOURDIG_LED_DAT 3

RTC_DS1307 rtc;
TM1637Display led4d(FOURDIG_LED_CLK, FOURDIG_LED_DAT);

int last = 0;
bool isLedPower = true;
uint8_t dataLed[] = { 0,0,0,0 };

void beep1() {
  digitalWrite(BUZZER, HIGH);
  delayMicroseconds(1);
  digitalWrite(BUZZER, LOW);
}

void beep2() {
  digitalWrite(BUZZER, HIGH);
  delay(10);
  digitalWrite(BUZZER, LOW);
}

void beep3() {
  for (int i = 0; i < 3; i++) {
    digitalWrite(BUZZER, HIGH);
    delay(3);
    digitalWrite(BUZZER, LOW);
    delay(80);
  }
}

void beep4(int kai) {
  for (int i = 0; i < kai; i++) {
    digitalWrite(BUZZER, HIGH);
    delay(10);
    digitalWrite(BUZZER, LOW);
    delay(200);
  }
}

void setup() {
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

  pinMode(BUTTON, INPUT);
  pinMode(BUZZER, OUTPUT);

  led4d.setBrightness(0x0a);
  beep3();
}

void loop() {
  if (! rtc.isrunning()) {
    led4d.showNumberDec(8888, false, 4, 0);
    beep2();
    delay(1000);
    return;
  }

  DateTime now = rtc.now();

  if (digitalRead(BUTTON)) {
    beep2();
    if (isLedPower) {
      for(int i=0; i<4; i++)
        dataLed[i] = 0;
      led4d.setSegments(dataLed);
      isLedPower = false;
    } else {
      isLedPower = true;
    }
    delay(500);
  }

  int nhour = now.hour();
  int nmin = now.minute();
  int counter = nhour * 100 + nmin;
  int nsec = now.second();
  if (last != nsec) {
    if(nsec == 0) {
      if(nmin == 0) {
        int kai = nhour % 6;
        if(kai == 0)
          kai = 6;
        beep4(kai);
      }
    }
    last = nsec;
    beep1();   
    if (isLedPower) {
      int num = counter;
      dataLed[3] = led4d.encodeDigit(num % 10);
      if (num > 10)
        dataLed[2] = led4d.encodeDigit((num / 10) % 10);
      if (num > 100)
        dataLed[1] = led4d.encodeDigit((num / 100) % 10);
      if (num > 1000)
        dataLed[0] = led4d.encodeDigit((num / 1000) % 10);
      else
        dataLed[0] = led4d.encodeDigit(0);
      if ((nsec % 2) == 0)
        dataLed[1] ^= 0b10000000;   
      led4d.setSegments(dataLed);
    }
  }
  delay(50);
}
1458778549

PlatformIO IDE

Arduinoの開発ツール
An open source ecosystem for IoT development · PlatformIO