LED키기

아무개·2024년 9월 20일

C/C++

목록 보기
3/6
post-thumbnail
#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로 부터 입력 받아 가독성이 좋아짐

profile
생각 정리

0개의 댓글