#include <stdio.h>
#include <windows.h>
#include <conio.h>
#define RED 4
#define YELLOW 6
#define GREEN 10
#define GRAY 8
#define WHITE 15
typedef struct _led_t {
int state;
}led_t;
typedef enum _led_state {
LED_OFF, LED_ON
} led_state;
led_t led1 = { LED_OFF }, led2 = { LED_OFF };
void set_color(unsigned short text, unsigned short back) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), text | (back << 4));
}
void toggle_led_state(led_t* led) {
if (led->state == LED_ON) {
led->state = LED_OFF;
}
else {
led->state = LED_ON;
}
}
void show_traffic_light(led_t* led1, led_t* led2) {
if (led1->state == LED_ON) {
printf("\r\n");
printf("┏━━━━━┓\r\n");
printf("┃ "); set_color(RED, 0); printf("● ");
}
if (led1->state == LED_OFF) {
printf("\r\n");
printf("┏━━━━━┓\r\n");
printf("┃ "); set_color(RED, 0); printf(" ");
}
if (led2->state == LED_ON) {
set_color(GREEN, 0); printf("● ");
set_color(WHITE, 0); printf("┃"); printf("\r\n");
printf("┗━━━━━┛\r\n");
printf("\r\n");
set_color(WHITE, 0);
}
if (led2->state == LED_OFF) {
set_color(WHITE, 0); printf(" ┃"); printf("\r\n");
printf("┗━━━━━┛\r\n");
printf("\r\n");
set_color(WHITE, 0);
}
}
void button() {
char n;
while (1) {
show_traffic_light(&led1, &led2);
Sleep(1000);
if (_kbhit()) {
n = _getch();
if (n == '1') toggle_led_state(&led1);
if (n == '2') toggle_led_state(&led2);
if (n == '3') break;
}
}
}
int main() {
button();
return (0);
}
1초마다 LED상태 출력
windows.h를 이용해 콘솔에 색깔 표시 가능
led_state를 enum로 만들기 <- 다른 값 들어오지 않게 함
led_t를 led_state로 부터 입력 받아 가독성이 좋아짐