Initial project import

This commit is contained in:
seo
2026-06-07 01:08:17 +09:00
commit 09e868155f
2 changed files with 138 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
#include <avr/wdt.h>
#define hddledsensor 4 // HDD 상태 체크 (보라)
#define psensor 5 // 전원 상태 체크 (검정)
#define pled 6 // 전원 상태 led (green) (초록)
#define msw 7 // 다기능 버튼 감지 (노랑)
#define psw 8 // 전원 버튼 감지 (흰색)
#define powersupplyrelay 9 // 파워서플라이 온 릴레이 (검정(흰색 쌍))
#define statusled 10 // 입력 상태 led (red) (초록)
#define fanrelay 11 // 케이스 팬 릴레이 (보라(초록 쌍))
#define powerinput 12 // 전원 쇼트 릴레이 (회색)
int buttonflag, buttonflag_old, shutdownflag, powerflag;
boolean coolingflag, backlightflag, serialflag = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, 0);
pinMode(psensor, INPUT_PULLUP);
pinMode(hddledsensor, INPUT_PULLUP);
pinMode(powerinput, OUTPUT);
pinMode(powersupplyrelay, OUTPUT);
pinMode(psw, OUTPUT);
pinMode(msw, OUTPUT);
pinMode(pled, OUTPUT);
pinMode(statusled, OUTPUT);
pinMode(fanrelay, OUTPUT);
wdt_enable(WDTO_8S);
}
void loop() {
wdt_reset();
button();
powercontrol();
}
void powercontrol() {
if (powerflag == 0) { // 전원 켜짐 플래그가 0 일때
if (buttonflag >= 1) { // 버튼 플래그가 1 이상 때
buttonflag = 0;
powerflag = 1;
poweron();
}
} else if (powerflag == 1) {
if (buttonflag >= 1 && buttonflag <= 2) { // 오작동 값 청소
buttonflag = 0;
} else if (buttonflag >= 3 && buttonflag <= 5) { // 문제 있는 부팅
buttonflag = 0;
powerrestart();
} else if (buttonflag >= 6 && buttonflag <= 10) { // 강제종료
buttonflag = 0;
powerflag = 0;
focus_poweroff();
} else if (buttonflag >= 11) { // 오작동 값 청소
buttonflag = 0;
}
if (digitalRead(psensor) == 0) { // 시스템이 종료 상태로 감지 되었을때
shutdownflag = 0;
powerflag = 0;
poweroff();
}
}
}
void button() {
while (digitalRead(msw) == 0 && digitalRead(psw) == 1) { // 전원 버튼 감지 시
buttonflag++;
delay(200);
if (buttonflag != buttonflag_old) {
buttonflag_old = buttonflag;
digitalWrite(statusled, 1);
delay(50);
digitalWrite(statusled, 0);
delay(750);
}
}
}
void poweron() {
digitalWrite(powersupplyrelay, 1);
while (digitalRead(psensor) == 0) {
digitalWrite(powerinput, 1);
delay(100);
digitalWrite(powerinput, 0);
delay(400);
}
digitalWrite(powerinput, 0);
digitalWrite(fanrelay, 1);
digitalWrite(pled, 1);
}
void poweroff() {
digitalWrite(powersupplyrelay, 0);
digitalWrite(fanrelay, 0);
digitalWrite(pled, 0);
}
void focus_poweroff() {
while (digitalRead(psensor) == 0) {
digitalWrite(powerinput, 1);
delay(300);
digitalWrite(powerinput, 0);
delay(700);
}
digitalWrite(powerinput, 0);
digitalWrite(powersupplyrelay, 0);
digitalWrite(fanrelay, 0);
digitalWrite(pled, 0);
}
void powerrestart() {
focus_poweroff();
delay(500);
poweron();
}