목차
아두이노에서 Multi Task 작업
WAT_Multi.h 를 사용하여 아두이노에서 multi task 형태로 작업이 가능합니다.
WAT-Arduino128 예제
부품 목록
| 번호 | 부품명 | 수량 | 기능 | 판매처 |
|---|---|---|---|---|
| 1 | WAT-Arduino128 | 1 | 아두이노 | https://kit128.com/goods/view?no=64 |
| 2 | WAT-LED | 1 | LED | https://kit128.com/goods/view?no=51 |
| WAT-Arduino128 | WAT-LED |
|---|---|
|
|
소스코드
/*
3개의 작업을 서로 독립적으로 수행하는 예제입니다.
- 1초마다 시리얼통신 작업
- 0.5, 1초 간격으로 ON/OFF 하는 LED
- 1, 2초 간격으로 ON/OFF 하는 LED
이 예제로 많은 TASK를 만들어 확장이 가능합니다.
출처: http://whiteat.com/Arduino
보드: WAT-128 Arduino
*/
#include <WAT_Multi.h>
WMulti tSerial = WMulti(1000);
WMulti tLED1 = WMulti( 3000);
WMulti tLED2 = WMulti( 3000);
// 프로그램 시작 - 초기화 작업
void setup()
{
Serial.begin(115200); //시리얼 통신 초기화
pinMode(PA1,OUTPUT); //PA1 포트를 출력으로 설정
pinMode(PA2,OUTPUT); //PA2 포트를 출력으로 설정
}
void loop()
{
TaskSerial(&tSerial); // 시리얼 통신 작업
TaskLED1(&tLED1); // LED1 작업
TaskLED2(&tLED2); // LED2 작업
}
int g_Timer = 0;
// 1초마다 타이머 값을 전송
void TaskSerial(WMulti * _task)
{
if(!_task->IsMyTurn()) return;
Serial.println(++g_Timer);
}
// PA1 에 연결된 LED 를 0.5초 ON 하고, 1초간 OFF 를 반복
void TaskLED1(WMulti * _task )
{
if(!_task->IsMyTurn()) return;
switch(_task->Status)
{
case 0: digitalWrite(PA1,HIGH); _task->Next(1000); break;
case 1: digitalWrite(PA1,LOW); _task->SetNext(0,500); break;
default: _task->Status = 0;
}
}
// PA2 에 연결된 LED 를 1초 ON 하고, 2초간 OFF 를 반복
void TaskLED2(WMulti * _task )
{
if(!_task->IsMyTurn()) return;
switch(_task->Status)
{
case 0: digitalWrite(PA2,HIGH); _task->Next(2000); break;
case 1: digitalWrite(PA2,LOW); _task->SetNext(0,1000); break;
default: _task->Status = 0;
}
}
모니터링 화면
프로그램이 실행되고 17초 후에는 17이 출력되며
2개의 LED는 3초마다 동시에 켜집니다.



