학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

타임스케쥴 만들기

학습목표

하루 기계를 동작 시키는 시간을 입력하고 이에 따라 기계를 동작 시킨다.

학습주제

프로그램은 시계 만들기 과제3” 프로그램 이용하고 시간의 입력 창을 “NumEdit Control” 사용한다.

시간을 double 형태의 변수에 저장하여 비교한다.

예습내용

“NumEdit Control” 형태를 “Time”으로 변경하면 이는 “double” 또는 “float” 저장된다.

1시간 = 1/24    1=1/(24*60)   1=1/(24*60*60) 으로 저장된다.

위와 같이 계산하여 시간++입력하면 된다.

실습방법

   

(1)    시작시간 선택하고 마우스 오른쪽 키를 눌러서 아래와 같이 “Time 선택한다. “종료시간 현재시간 같은 방법으로 시간으로 바꾼다.

(2)   메뉴에서 “View”  “ClassWizard” 선택하여 시간의 Member Variable 아래와 같이 “m_StartTime” “m_EndTime” “m_NowTime”으로 설정한다.

(3)   OnTimer() 함수에 현재 시간을 얻고 이를 시간이 시작 시간보다 크고 종료 시간보다 작으면 Led On 시키고 그렇지 않으면 Off 시킨다. 아래의 빨간색 글씨의 표시를 프로그램하면 동작을 시작한다.

처음

 

예제1  NumEdit Control 이용한 시간의 표시와 동작

 

 

void CClockDlg::OnTimer(UINT nIDEvent)

{

              // TODO: Add your message handler code here and/or call default

     struct _timeb timebuffer;                                            // (7)

      char *timeline;

      char Tbuf[9];

 

      _ftime( &timebuffer );

      timeline = ctime( & ( timebuffer.time ) );                     

      Tbuf[0]=timeline[11];

      Tbuf[1]=timeline[12];

      Tbuf[2]=timeline[13];

      Tbuf[3]=timeline[14];

      Tbuf[4]=timeline[15];

      Tbuf[5]=timeline[16];

      Tbuf[6]=timeline[17];

      Tbuf[7]=timeline[18];

      Tbuf[8]=0x00;

      m_clock.Format("%s",Tbuf);

 

      // 만을 표시하는

      Tbuf[0]=timeline[17];

      Tbuf[1]=timeline[18];

      Tbuf[2]=0x00;

      m_clock1.Format("%s",Tbuf);

 

      // 이전의 Led 동작은 정지 시킨다.

      // =0 led 켜진다.

      //if(Tbuf[0]==0x30 && Tbuf[1]==0x30)

      //      m_led.Value=1;

      //else

      //      m_led.Value=0;

 

      // 현재 시간 계산하여 표시한다.

      m_NowTime.Value =((double)(timeline[11]-0x30)*10+(double)(timeline[12]-0x30))/24.

              +((double)(timeline[14]-0x30)*10+(double)(timeline[15]-0x30))/(24.*60.)

              +((double)(timeline[17]-0x30)*10+(double)(timeline[18]-0x30))/(24.*60.*60.);

 

      // Led 동작 시킨다.

      if(m_NowTime.Value>=m_StartTime.Value && m_NowTime.Value<=m_EndTime.Value)

              m_led.Value=1;

      else

              m_led.Value=0;

 

      UpdateData(FALSE);

 

      CDialog::OnTimer(nIDEvent);

}

 

다음은 완성된 프로그램의 동작을 나타낸 것이다.

 

 

   

1.      다음은꿈의소리.wav” 사운드를 연주하는 함수이다. 다음을 이용하여 하루중 일정한 시간이 되면 음악을 연주하는 프로그램을 완성하시오. 원하는 음악을 연주하려면꿈의소리.wav” 대신 다른 음악파일을 넣으면 된다.

sndPlaySound("꿈의소리", SND_SYNC);

2.      아래 그림과 같이 에디트 창을 하나 만들어서 여기에는 ,, 중에 초만 표시 되도록 프로그램 한다.

   

  변수는 아래와 같이 정의 한다.

타이머 함수를 아래와 같이 수정한다.

 

void CClockDlg::OnTimer(UINT nIDEvent)

{

              // TODO: Add your message handler code here and/or call default

              struct _timeb timebuffer;                                                 // (7)

              char *timeline;

              char Tbuf[9];

 

              _ftime( &timebuffer );

              timeline = ctime( & ( timebuffer.time ) );                           

              Tbuf[0]=timeline[11];

              Tbuf[1]=timeline[12];

              Tbuf[2]=timeline[13];

              Tbuf[3]=timeline[14];

              Tbuf[4]=timeline[15];

              Tbuf[5]=timeline[16];

              Tbuf[6]=timeline[17];

              Tbuf[7]=timeline[18];

              Tbuf[8]=0x00;

              m_clock.Format("%s",Tbuf);

 

              // 만을 표시하는

              Tbuf[0]=timeline[17];

              Tbuf[1]=timeline[18];

              Tbuf[2]=0x00;

              m_clock1.Format("%s",Tbuf);

 

              UpdateData(FALSE);

 

              CDialog::OnTimer(nIDEvent);

}

 

 

 

 

3.      그림과 같이 Led 추가하여 0초가 On 되도록 프로그램 하여라.

   

4.      아래는 Led 4 만들어 초침의 십단위 숫자에 따라 led 켜지도록 프로그램한것이다.

  프로그램으 Variable 아래와 같이 정의 한다.

  

 

AVR 통신 프로그램

예제4 AVR 보드와 연결하여 동작 시킨다.

C언어 첫페이지의 RS232 기본 프로그램을 내려받아 위의 Led 추가한다. [PC통신프로그램 내려받기]

 

  

 

   Variable 아래와 같이 정의 한다.

OnTimer 함수를 아래와 같이 정의 작성한다.

 

void CRs232Dlg::OnTimer(UINT nIDEvent)

{

              // TODO: Add your message handler code here and/or call default

              struct _timeb timebuffer;                                                 // (7)

              char *timeline;

              char Tbuf[9];

              unsigned char buff[5]="";

 

              _ftime( &timebuffer );

              timeline = ctime( & ( timebuffer.time ) );                           

              Tbuf[0]=timeline[11];

              Tbuf[1]=timeline[12];

              Tbuf[2]=timeline[13];

              Tbuf[3]=timeline[14];

              Tbuf[4]=timeline[15];

              Tbuf[5]=timeline[16];

              Tbuf[6]=timeline[17];

              Tbuf[7]=timeline[18];

              Tbuf[8]=0x00;

              m_clock.Format("%s",Tbuf);

 

              // 만을 표시하는

              Tbuf[0]=timeline[17];

              Tbuf[1]=timeline[18];

              Tbuf[2]=0x00;

              m_clock1.Format("%s",Tbuf);

 

              // 초침의 십단위 숫자에 따라 led 켜진다.

              if(Tbuf[0]==0x30) {

                             m_led0.Value=1;

                             m_led1.Value=0;

                             m_led2.Value=0;

                             m_led3.Value=0;

                             buff[0]=0x01;

                             m_ComuPort.WriteComm((unsigned char*)buff,1);

              }

              else if(Tbuf[0]==0x31) {

                             m_led0.Value=0;

                             m_led1.Value=1;

                             m_led2.Value=0;

                             m_led3.Value=0;

                             buff[0]=0x02;

                             m_ComuPort.WriteComm((unsigned char*)buff,1);

              }

              else if(Tbuf[0]==0x32) {

                             m_led0.Value=0;

                             m_led1.Value=0;

                             m_led2.Value=1;

                             m_led3.Value=0;

                             buff[0]=0x04;

                             m_ComuPort.WriteComm((unsigned char*)buff,1);

              }

              else if(Tbuf[0]==0x33) {

                             m_led0.Value=0;

                             m_led1.Value=0;

                             m_led2.Value=0;

                             m_led3.Value=1;

                             buff[0]=0x08;

                             m_ComuPort.WriteComm((unsigned char*)buff,1);

              }

              else {

                             m_led0.Value=0;

                             m_led1.Value=0;

                             m_led2.Value=0;

                             m_led3.Value=0;

                             buff[0]=0x00;

                             m_ComuPort.WriteComm((unsigned char*)buff,1);

              }

 

              UpdateData(FALSE);

              CDialog::OnTimer(nIDEvent);

}

 

 이번 과제 전체 소스 프로그램을 아래에서 내려 받아 실행하여 비교해 보시오.

[전체프로그램 내려받기]