질문게시판 > ATmega128 타이머, 알람, LCD, 모터제어 코딩에 대한 질문이 있습니다.

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

ATmega128 타이머, 알람, LCD, 모터제어 코딩에 대한 질문이 있습니다.

페이지 정보

작성자 리치 작성일21-06-03 14:47 조회7,786회 댓글1건

본문

//;****  먹이 제어 시계    *****

 

#include <avr/io.h>

#include <avr/interrupt.h>

#include "OK128.h"

 

unsigned char FL,FL2;

volatile unsigned char second, minute, hour=12;

volatile unsigned char ampm = 'P';

volatile unsigned char minuteA, hourA=00;

volatile unsigned char ampmA = 'A';

 

  

void LCD_2digit(unsigned char number) //2자리 디스플레이   

{ LCD_data4(number/10 +'0');    //10                

  LCD_data4(number%10 +'0');    //1                

 

//------- 알람 시  셋팅  -------------------------------------

void AACONT(void)    

{  hourA++;                     // increment hour

   if(hourA == 13)             // if hour = 13, hour = 1

     {hourA = 1; }

   if(hourA == 12)             // if hour = 12, adjust AM/PM

     {if(ampmA == 'A') {ampmA='P';}

      else            ampmA ='A';

     }                    

}

 

//-------- 알람 분 셋팅  ------------------------------------- 

void AMCONT(void)    

{ minuteA++;               // increment minute

  if(minuteA == 60)       // if minute = 60, minute = 0

    { minuteA = 0;    

}   }

 

void DISP_AL1(void)

{ LCD_command4(0xC7); // display AM/PM

  LCD_data4(ampmA);           

  LCD_command4(0xCA); // display hour

  LCD_2digit(hourA);

  LCD_command4(0xCD); // display minute

  LCD_2digit(minuteA);  

}

 

//====== 알람1 시간 셋팅용 함수  ====================

void AL1_SET(void) 

{ if((PIND & 0B01000000)==0) 

    { AACONT(); DISP_AL1();} 

        

  if((PIND & 0B00010000) ==0) 

    { AMCONT(); DISP_AL1();}   

}

 

//------- 시 셋팅  ----------------------------------------

void ACONT(void)    

{  hour++;                        // increment hour

   if(hour == 13)                // if hour = 13, hour = 1

     {hour = 1; }

   if(hour == 12)                // if hour = 12, adjust AM/PM

     {if(ampm == 'A') {ampm = 'P';}

       else            ampm = 'A';

     }        

}

 

//-------- 분 셋팅  ----------------------------------------

void MCONT(void)    

{ minute++;                 // increment minute

  if(minute ==60)           // if minute = 60, minute = 0

   { minute = 0;       

   }

}

 

void DISP(void) //디스플레이

{ LCD_command4(0x81); // display AM/PM

  LCD_data4(ampm);         

  LCD_command4(0x84); //display hour

  LCD_2digit(hour); 

  LCD_command4(0x87); //display minute

  LCD_2digit(minute);   

  LCD_command4(0x8A); // display second

  LCD_2digit(second);  

}

 

//====== 시간 셋팅용 함수  =================================== 

void A_SET(void) 

{ if(!(PIND & 0B00100000)) //분 조정 버튼 

   { MCONT(); 

     DISP();  }            

        

  if(!(PIND & 0B00000100)) //시 조정 버튼 

   { ACONT(); 

     DISP(); }

}

 

//*******************************************************************  

ISR(TIMER1_COMPA_vect) //타이머 인터럽트 함수

{ second++; // increment second

  if(second == 60)                      // if second = 60, second = 0

    { second = 0;

      minute++;                         // increment minute

       if(minute == 60)                 // if minute = 60, minute = 0

        { minute = 0;

          hour++;                       // increment hour

          if(hour == 13)                // if hour = 13, hour = 1

            hour = 1;

          if(hour == 12)                // if hour = 12, adjust AM/PM

            { if(ampm == 'A') ampm='P';

              else            ampm='A';

            }

        }

     }

  DISP();     

}

 

void OPEN(void) //문 여닫기 함수 

   {PORTD |=0B00000010;  //모터 열기 회전.

    Delay_ms(150); //150미리초 동안

    PORTD &=0B11111101; //모터 정지 

   

    Delay_ms(1000); //1초간 열림.

    

    PORTD |=0B00001000;  //모터 닫기 회전.

    Delay_ms(160); //160미리초 간 

    PORTD &=0B11110111; //모터 정지   

    Delay_ms(3000);

   }

           

              

//***** 메  인    함  수  *************************************

   

int main(void)

{

  DDRB = 0B11111111; // PORTB = output 

  PORTB =0B00000000;

  

  DDRD = 0B00001010;

  PORTD =0B11110101;

  

  LCD_initialize4(); //LCD초기화 

  LCD_string4(0x80," PM 12:00:00    ");

  LCD_string4(0xC0,"ALARM  AM 00:00 ");

 

//;------  Initialize Timer/Counter1 CTC Mode (1초 생성용) -------    

  TCCR1A = 0x00;               // CTC mode(4), don't output OC1A

  TCCR1B = 0x0C;               // 16MHz/256/(1+62499) = 1Hz

  TCCR1C = 0x00;

  OCR1A = 31249;

  TCNT1 = 0x0000;              // clear Timer/Counter1

 

//----------- 타이머 1 int 셋팅  --------------------------------

  TIMSK = 0x10;                // enable OC1A interrupt

  ETIMSK = 0x00;

  TIFR = 0x3C;                 // clear all interrupt flags

  ETIFR = 0x01;

  sei();          //인터럽트 시작. 

  

  while(1)

  { 

    A_SET(); //현재 시간 조정

    AL1_SET(); //알람1 시간 조정

 

  if((minute==minuteA)&&(hour==hourA)&&(ampm==ampmA)) //알람상황이면...

   {if(!(FL)) 

    {OPEN(); //모터 작동.

     FL=1;

    }

   }

      

  else FL=0; //알람 아니면 

 

  

  if((PIND & 0B00000001)) //밤이 되면

   {if(!(FL2)) 

     {OPEN(); //모터 작동,

      FL2=1; //알람 플래그 셋

     }

   }  

  

  if(!(PIND & 0B00000001)) //아침이 되면 

   {if((FL2)) 

     {OPEN(); //모터작동.

      FL2=0; //알람 플래그 셋

     }

   }  

    

  if(!(PIND & 0B10000000)) //임의 스위치 누르면 

   {OPEN();}        //모터 작동.  

 

  Delay_ms(200);    

 }



LCD에 시간과 알람을 표시하고 알람으로 맞춰준 시간이 되면 모터가 작동하고 
cds센서가 빛을 감지하거나 감지하지 못하는 상황이 되었을 때에도 모터가 작동하는 회로를 구성하고 싶어서
해당 소스를 만들었습니다,
하지만 제대로 동작을 하지 않는 상황이라 소스의 잘못된 부분이 있는지 여쭤보고 싶습니다.
감사합니다.
  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 1

조회수 : 7,786

master님의 댓글

master 작성일

제공된 예제를 구동해서 각각의 센서 및 회로가 정상동작하는지 체크부터 하세요

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
질문 atmega128과 dht11, lcd를 연결했는데 0… 댓글[1] 고양이33  22-08-02
질문 LCD 도와주세요 ㅜㅠㅠㅠ 댓글[2] 첨부파일dentist22  22-06-17
질문 아두이노 LCD 시계 첨부파일dentist22  22-06-16
답변 답변 : 아두이노 LCD 시계 master  22-06-17
질문 LCD 2줄 출력 오류 데라라  22-06-15
답변 답변 : LCD 2줄 출력 오류 댓글[2] master  22-06-15
질문 아두이노 LCD와 7세그먼트 동시 사용 댓글[4] 페이즐리  22-06-14
질문 TFT LCD 이상이 있습니다 댓글[4] 플립플롭  22-06-10
질문 LCD 화면 문자출력이 안되요.. 댓글[3] 첨부파일chelsea  22-06-09
질문 아두이노 lcd 카운트다운 ghost45  22-06-08
답변 답변 : 아두이노 lcd 카운트다운 master  22-06-08
질문 아래 ATMEGA LCD 출력 코드 및 에러 확인 질문… 댓글[1] 첨부파일chelsea  22-06-03
답변 답변 : 아래 ATMEGA LCD 출력 코드 및 에러 … master  22-06-03
질문 ATMEGA LCD 출력 코드 및 에러 확인 부탁드립니… 댓글[2] chelsea  22-06-03
질문 아두이노 속도측정, 속도를 LCD에 표시, 가까워지면 … wgtjdwls  22-05-27
답변 답변 : 아두이노 속도측정, 속도를 LCD에 표시, 가… master  22-05-27
질문 ATmega128 1602A LCD 출력 질문입니다. 댓글[2] 444222a  22-05-27
질문 ATmega128 lcd 관련 질문 있습니다. 댓글[1] 첨부파일순머  22-04-27
질문 Tutorial on Using Arduino TFT … grey  22-03-27
질문 아두이노 메가에 TFT LCD & 무선통신 모듈 댓글[1] 갈배사이다  21-12-31
질문 atmega128 adc 온도계 값 lcd에 나타내기 … 댓글[2] 파이라닝  21-12-15
질문 아두이노 lcd표시문제 댓글[4] 첨부파일아두이노공부해요  21-12-10
질문 atmega128 적외선 IR센서와 Lcd 도와주세요 … 댓글[2] 도와줘용  21-12-09
질문 아두이노 lcd관련 댓글[2] 코딩처음초보  21-11-29
질문 LCD패널 질문 댓글[2] 초보코딩자  21-11-26
질문 atmega128 블루투스를 이용한 LCD !! 도와주… 댓글[4] 이이잉  21-11-22
질문 atmega128 초음파센서로 거리측정하여 CLCD에 … 댓글[1] 아두이장인  21-11-11
질문 이산화탄소 센서와 릴레이로 환풍기를 제어하고 LCD에 … 댓글[1] 유채  21-11-09
질문 아두이노 lcd 댓글[3] 확신의말  21-11-04
질문 아두이노 블루투스 lcd 디스플레이 통신관련 질문 댓글[2] 첨부파일iwonder  21-10-31
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전