아두이노 보드 – 버튼 상태, 카운터 표시
[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 보드 아두이노 예제
- 시작하기
- [예제 01] 1개의 LED 깜박이기(완전 기초)
- [예제 02] 4개의 LED 깜박이기(기초)
- [예제 03] LED 순차 이동
- [예제 04] FND ( 4-digit 7-segment) 숫자 표시
- [예제 05] FND 순차 이동
- [예제 06] 부저 ‘삑’ 소리 내기
- [예제 07] 가변저항 값 FND에 표시
- [예제 08] 가변저항 값에 따라 LED 표시
- [예제 09] 버턴에 따라 LED 켜며, 카운터 증가
WAT-AK336 보드 엔트리 예제
엔트리 예제는 엔트리 사이트 내 학급 자료실 에서 제공됩니다.
- 시작하기
- [예제 01] 컴퓨터 키보드로 엔트리봇 움직이며 동시에 LED ON/OFF(보드 연결방법 포함)
- [예제 02] 엔트리 버튼을 눌러 보드 LED ON/OFF
- [예제 03] LED 순차 이동
- [예제 04]
- [예제 05]
- [예제 06] 엔트리 버튼을 눌러 부저 울리기
- [예제 07]
- [예제 08] 가변저항 값에 따라 LED 표시
- [예제 09] 가변저항 값에 따라 63빌딩 높이 조절
- [예제 10] 버튼으로 해당 월의 서울 행사수 출력
제품 구매
[WAT-AK336] 아두이노 기능 실험 키트는 https://kit128.com/goods/view?no=336 에서 구매하실 수 있습니다.
고객 지원
WAT-AK336 사용 중 궁금한 점이나 예제 추가 요청은 help@kit128.com 또는 help@whiteat.com 메일로 주시면 됩니다.
감사합니다.