목차
아두이노에서 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초마다 동시에 켜집니다.