
#include <TM1637Display.h>
// TM1637 핀 설정
#define CLK 5
#define DIO 6
// 스위치 및 부저 핀 설정
#define BUTTON_PIN 2
#define BUZZER_PIN 3
// 난이도 조절 변수 (ex 15는 09:85~10:15초 범위에 들면 성공)
const int difficultyMargin = 15;
TM1637Display display(CLK, DIO);
bool isRunning = false;
unsigned long startTime = 0;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
// 버튼 민감도 설정. 숫자가 높을 수록 꾹 눌러야함. 숫자가 너무 낮으면 의도치 않은 리셋이 됨.
unsigned long debounceDelay = 50;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
// 부저 초기화
digitalWrite(BUZZER_PIN, LOW);
noTone(BUZZER_PIN);
display.setBrightness(0x0f);
display.showNumberDecEx(0, 0b01000000, true);
}
// 성공 시 울릴 멜로디 함수
void playSuccessMelody() {
tone(BUZZER_PIN, 523, 150); // 도
delay(200);
tone(BUZZER_PIN, 659, 150); // 미
delay(200);
tone(BUZZER_PIN, 784, 400); // 솔
delay(400);
}
void loop() {
int reading = digitalRead(BUTTON_PIN);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
static int buttonState = HIGH;
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
if (!isRunning) {
isRunning = true;
startTime = millis();
} else {
isRunning = false;
unsigned long elapsed = millis() - startTime;
unsigned long seconds = (elapsed / 1000) % 100;
unsigned long centiseconds = (elapsed / 10) % 100;
unsigned long displayTime = (seconds * 100) + centiseconds;
// 난이도 변수를 적용한 성공 판정 로직
if (displayTime >= (1000 - difficultyMargin) && displayTime <= (1000 + difficultyMargin)) {
// 성공 시 디스플레이를 10:00(1000)으로 표시
display.showNumberDecEx(1000, 0b01000000, true);
playSuccessMelody();
} else {
// 실패 시 실제 멈춘 시간을 표시
display.showNumberDecEx(displayTime, 0b01000000, true);
}
}
}
}
}
lastButtonState = reading;
if (isRunning) {
unsigned long elapsed = millis() - startTime;
unsigned long seconds = (elapsed / 1000) % 100;
unsigned long centiseconds = (elapsed / 10) % 100;
unsigned long displayTime = (seconds * 100) + centiseconds;
display.showNumberDecEx(displayTime, 0b01000000, true);
}
}

(주)인투피온
대표:소영삼 사업자등록번호:113-86-29364 [사업자정보확인] 통신판매신고:2015-서울구로-1028
본사 : 서울 구로구 경인로 53길 90 STX W-Tower 1307호
매장 : 서울 구로구 경인로 53길 15 중앙유통단지 다동 4403호
고객상담
팩스번호: 02-6124-4242 이메일: info@intopion.com
* 재고 확인, 배송, 기술문의는 바로 답변이 어려우니, 가급적 카카오톡 플러스친구 [인투피온] 이용 부탁드립니다 *
개인정보관리책임자 : 이성민 / Hosting Provider : ㈜가비아씨엔에스