[WAT-AK336]기능 실험 키트 – 버튼 상태, 카운터 표시

아두이노 보드 – 버튼 상태, 카운터 표시

[WAT-AK336]기능 실험 키트 예제 중  버턴의 상태를 LED에 표시, 버턴의 카운터를 FND로 표시하는 예제입니다.

 

소스코드

 

최신 소스코드는 [파일]=>[예제]=>[WhiteAT UNO]=> [AK336] => [09_Button]  에 있으며
라이브러리는 아두이노 개발환경(https://docs.whiteat.com/?page_id=5449)  을 참조하세요

/*
	[WAT-AK336]기능 실험 키트 예제 중
	버튼 눌림 횟수를 표시하고 눌림 상태를 LED에 표시하는 예제입니다.
	3번째 버튼은 부저 소리를 내며 카운터가 증가합니다.

	[WAT-AK336] 아두이노 기능 실험 키트: https://kit128.com/goods/view?no=336

	출처: https://docs.whiteat.com/?p=4588

*/
 
#include <WAT_Multi.h> 

WMulti tButton1 = WMulti(10);
WMulti tButton2 = WMulti(10);
WMulti tButton3 = WMulti(10);


#define pinLatch 4
#define pinClock 7
#define pinData 8

/* 0 부터 9 까지 숫자 모양 */
const byte SEGMENT_DATA[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0X80, 0X90, 0xff };
/* 1 부터 4 까지의 자리 선택 */
const byte SEGMENT_SELECT[] = { 0xF1, 0xF2, 0xF4, 0xF8 };

int pinBuzzer = 3;

int pinLED1 = 13;
int pinLED2 = 12;
int pinLED3 = 11;
int pinLED4 = 10;

int pinButton1 = A1;
int pinButton2 = A2;
int pinButton3 = A3;

int buttonCount = 0;

// 프로그램 초기화
void setup()
{
	Serial.begin(115200);
	Serial.println("Arduino Examples - [WAT-AK336] Button to FND/LED");
	Serial.println(" https://docs.whiteat.com/?p=4588");

	// LED 핀을 출력으로 설정
	pinMode(pinLED1, OUTPUT); digitalWrite(pinLED1, HIGH); // led off
	pinMode(pinLED2, OUTPUT); digitalWrite(pinLED2, HIGH); // led off
	pinMode(pinLED3, OUTPUT); digitalWrite(pinLED3, HIGH); // led off
	pinMode(pinLED4, OUTPUT); digitalWrite(pinLED4, HIGH); // led off

	// BUZZER 핀을 출력으로 설정
	pinMode(pinBuzzer, OUTPUT);
	digitalWrite(pinBuzzer, HIGH);

	// 출력으로 설정
	pinMode(pinLatch, OUTPUT);
	pinMode(pinClock, OUTPUT);
	pinMode(pinData, OUTPUT);

	// button 입력으로 설정
	pinMode(pinButton1, INPUT); digitalWrite(pinButton1, HIGH);
	pinMode(pinButton2, INPUT); digitalWrite(pinButton2, HIGH);
	pinMode(pinButton3, INPUT); digitalWrite(pinButton3, HIGH);
}

// 계속 실행할 무한 루프
void loop()
{
	TaskButton(&tButton1, pinButton1, pinLED1);
	TaskButton(&tButton2, pinButton2, pinLED2);
	TaskButton(&tButton3, pinButton3, pinLED3);

	// FND 숫자 표시
	if (buttonCount >= 1000) WriteNumberToSegment(0, (buttonCount / 1000));
	else WriteNumberToSegment(0, 10);

	if (buttonCount >= 100) WriteNumberToSegment(1, (buttonCount / 100) % 10);
	else WriteNumberToSegment(1, 10);

	if (buttonCount >= 10) WriteNumberToSegment(2, (buttonCount / 10) % 10);
	else WriteNumberToSegment(2, 10);

	WriteNumberToSegment(3, buttonCount % 10);
}

void TaskButton(WMulti * _task, byte _pin, byte _led)
{
	if (!_task->IsMyTurn()) return;

	switch (_task->Status)
	{
	case 0:
		if (!digitalRead(_pin))
		{
			buttonCount++;
			digitalWrite(_led, LOW); // led on

			// BUTTON 이 3일때만 부저 동작
			if (_pin == pinButton3) digitalWrite(pinBuzzer, LOW); // buzzer on 

			_task->SetNext(1, 1);
		}
		break;
	case 1:
		if (digitalRead(_pin))
		{
			digitalWrite(_led, HIGH); // led off
			
			// BUTTON 이 3일때만 부저 동작
			if (_pin == pinButton3) digitalWrite(pinBuzzer, HIGH); // buzzer off

			_task->SetNext(0, 1);
		}
		break;
	default: _task->Status = 0;

	}
}


/* 각 자리에 숫자 표시 */
void WriteNumberToSegment(byte Segment, byte Value)
{
	// FND를 제어해 주는 HC595의 latch enable
	digitalWrite(pinLatch, LOW);

	// 숫자 모양을 설정
	shiftOut(pinData, pinClock, MSBFIRST, SEGMENT_DATA[Value]);

	// 자리수 설정
	shiftOut(pinData, pinClock, MSBFIRST, SEGMENT_SELECT[Segment]);

	// FND를 제어해 주는 HC595의 latch disable
	digitalWrite(pinLatch, HIGH);
}

결과 화면

키 눌림 상태를 LED 에 표시하고, 전체 눌림 카운터를 FND에 표시됩니다.

 

 

 

 

WAT-AK336 제공 예제(소스코드)

WAT-AK336 보드 아두이노 예제

 

WAT-AK336 보드 엔트리 예제

엔트리 예제는 엔트리 사이트 내 학급 자료실 에서 제공됩니다.

 

 

제품 구매

[WAT-AK336] 아두이노 기능 실험 키트는 https://kit128.com/goods/view?no=336 에서 구매하실 수 있습니다.

 

고객 지원

WAT-AK336 사용 중 궁금한 점이나 예제 추가 요청은 help@kit128.com 또는 help@whiteat.com 메일로 주시면 됩니다.

감사합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다