질문게시판 > atmega128 4x4 키패드 도어락, 초음파 센서 결합질문!

TODAY164 TOTAL2,592,685
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | atmega128 4x4 키패드 도어락, 초음파 센서 결합질문!

페이지 정보

작성자 운치킨 작성일2022-11-14 18:58 조회1,142회 댓글2건

본문

	

초음파 센서가 읽어들이는 신호 딜레이 때문에 FND가 엄청 빠르게 깜빡깜빡 거리는 거 같습니다. FND를 이용한 키패드 도어락과 초음파 센서로 LED를 켜지게 하는 두 개의 동작을 별개로 동작시키고 싶은데 FND 데이터를 읽는 부분을 인터럽트 내부에 넣으려고 하는데 손을 못대겠습니다 ㅜㅜ 소스좀 도와주세요

#define F_CPU 16000000UL

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

#include <stdio.h>

#define Trigger_ON      PORTF=0x01    //초음파 트리거 PF0

#define Trigger_OFF     PORTF=~0x01

#define Echo           (PINF&0x04)     //초음파 에코 PF2

void hc_sr04_init(void);

unsigned int getEcho(void);

volatile char fnd_num[10] = { 0xc0 , 0xf9 , 0xa4 , 0xb0 , 0x99 , 0x92 , 0x82 , 0xd8 , 0x80 , 0x90 };

char fnd_digit[4] = { 0x10 , 0x20 , 0x40 , 0x80};

char KeySet(void);

void ledBuf1 (void);

void ledBuf2 (void);

//void pwReset (char *pWBuf);

void ledBuf_open(void);

int main(void)

{

DDRA = 0xff;

DDRE = 0xff;

DDRB = 0x01;

DDRD = 0xff;

TCCR3A = 0x82;

TCCR3B = 0x1b;

ICR3 = 4999;     //TOP

OCR3A = 375;     //0도

int range=0;

hc_sr04_init();

PORTA= 0xff;

char key;

char pWBuf[4] = { 'n' , 'n' , 'n' , 'n' };            // 초기화는 'n'로 됨

char pW[4] = { fnd_num[0], fnd_num[0], fnd_num[0], fnd_num[0]}; // 초기 비밀번호 0000

int pWC = 0;

int pWCD = 0;

while (1)

{

if ( pWC == 1)                                          // 비밀번호 변경

{

do

{

key = KeySet();

ledBuf1();

}while( key == 'n');

if( key == '#' )

{

for( unsigned int i = 0 ; i < 4 ; i++)

{

pW[i] = 'n';

_delay_ms(100);

}

while( pW[3] == 'n')

{

do

{

key = KeySet();

PORTA = 0xfb;

PORTD = fnd_digit[pWCD];

_delay_ms(5);

}while ( key == 'n');

if(pW[0] == 'n')

{

pWCD = 1;

pW[0] = key;

_delay_ms(300);

key = 'n';

}

else if(pW[1] == 'n')

{

pWCD = 2;

pW[1] = key;

_delay_ms(300);

key = 'n';

}

else if(pW[2] == 'n')

{

pWCD = 3;

pW[2] = key;

_delay_ms(300);

key = 'n';

}

else

{

pWCD = 0;

pW[3] = key;

_delay_ms(300);

key = 'n';

}

}

ledBuf2();

pWC = 0;

}

else

{

ledBuf2();

pWC = 0;

}

}

else

{

key = KeySet();

if(key == '*')                                     // 입력한 비밀번호 초기화

{

for( unsigned int i = 0 ; i < 4 ; i++)

{

pWBuf[i] = 0xff;

}

}

else if ( key == 'A')                              // 비밀번호 일치 여부 확인

{

if( pWBuf[0] != pW[0])

{

for( unsigned int i = 0 ; i < 4 ; i++)

{

pWBuf[i] = 0xff;

}

key = 'n';

}

else if( pWBuf[1] != pW[1])

{

for( unsigned int i = 0 ; i < 4 ; i++)

{

pWBuf[i] = 0xff;

}

key = 'n';

}

else if( pWBuf[2] != pW[2])

{

for( unsigned int i = 0 ; i < 4 ; i++)

{

pWBuf[i] = 0xff;

}

key = 'n';

}

else if( pWBuf[3] != pW[3])

{

for( unsigned int i = 0 ; i < 4 ; i++)

{

pWBuf[i] = 0xff;

}

key = 'n';

}

else

{

OCR3A=125;

_delay_ms(1000);

pWC = 1;

ledBuf_open();

for( unsigned int i = 0 ; i < 4 ; i++)

{

pWBuf[i] = 0xff;

}

continue;

}

}

else if ( key != 'n')                              // 비밀번호 할당

{

if(pWBuf[0] == 'n')

{

pWBuf[0] = key;

_delay_ms(200);

continue;

}

if(pWBuf[1] == 'n')

{

pWBuf[1] = key;

_delay_ms(200);

continue;

}

if(pWBuf[2] == 'n')

{

pWBuf[2] = key;

_delay_ms(200);

continue;

}

if(pWBuf[3] == 'n')

{

pWBuf[3] = key;

_delay_ms(200);

continue;

}

for( unsigned int i = 0 ; i < 4 ; i++)

{

pWBuf[i] = 'n';

}

key = 'n';

}

else                                               // 키를 뗀 상태에서 처리

{

if( pWBuf[3] != 'n')

{

PORTD = 0x80;

PORTA = pWBuf[3];

_delay_ms(3);

}

if( pWBuf[2] != 'n')

{

PORTD = 0x40;

PORTA = pWBuf[2];

_delay_ms(3);

}

if( pWBuf[1] != 'n')

{

PORTD = 0x20;

PORTA = pWBuf[1];

_delay_ms(3);

}

if( pWBuf[0] != 'n')

{

PORTD = 0x10;

PORTA = pWBuf[0];

_delay_ms(3);

}

}

}

range=getEcho();

if (range < 20) PORTB = 0x01;

else     PORTB = 0x00;

}

}

char KeySet(void)

{

char KeyBuff = 'n';  // 함수 내에서 사용될 버퍼 선언, 초기화 ( else KeyBuff = 'n' )

DDRC = 0x00; PORTC=0xff;  // PC 초기화

DDRC = 0x01; PORTC &= ~0x01;

_delay_us(5);

if(!(PINC&0x10)) KeyBuff = fnd_num[1];

if(!(PINC&0x20)) KeyBuff = fnd_num[2];

if(!(PINC&0x40)) KeyBuff = fnd_num[3];

if(!(PINC&0x80)) KeyBuff = 'A';

DDRC=0x00; PORTC = 0xff;                   // 1 2 3 A 행 검사 끝

DDRC = 0x02; PORTC &= ~0x02;

_delay_us(5);

if(!(PINC&0x10)) KeyBuff = fnd_num[4];

if(!(PINC&0x20)) KeyBuff = fnd_num[5];

if(!(PINC&0x40)) KeyBuff = fnd_num[6];

if(!(PINC&0x80)) KeyBuff = 'B';

DDRC = 0x00; PORTC = 0xff;                 // 4 5 6 B 행 검사 끝

DDRC = 0x04; PORTC &= ~0x04;

_delay_us(5);

if(!(PINC&0x10)) KeyBuff = fnd_num[7];

if(!(PINC&0x20)) KeyBuff = fnd_num[8];

if(!(PINC&0x40)) KeyBuff = fnd_num[9];

if(!(PINC&0x80)) KeyBuff = 'C';

DDRC = 0x00; PORTC = 0xff;                 // 7 8 9 C 행 검사 끝

DDRC = 0x08; PORTC &= ~0x08;

_delay_us(5);

if(!(PINC&0x10)) KeyBuff = '*';

if(!(PINC&0x20)) KeyBuff = fnd_num[0];

if(!(PINC&0x40)) KeyBuff = '#';

if(!(PINC&0x80)) KeyBuff = 'D';

DDRC = 0x00; PORTC = 0xff;                 // * 0 # D 행 검사 끝

return KeyBuff;

}

void ledBuf1 (void)

{

DDRA = 0xff;

DDRE = 0xff;

PORTA = 0xfb;

PORTD = 0x10;

_delay_ms(5);

PORTA = 0xfb;

PORTD = 0x20;

_delay_ms(5);

PORTA = 0xfb;

PORTD = 0x40;

_delay_ms(5);

PORTA = 0xfb;

PORTD = 0x80;

_delay_ms(5);

}

void ledBuf2 (void)

{

DDRA = 0xff;

DDRE = 0xff;

OCR3A = 375;

_delay_ms(1000);

for( unsigned int i = 0 ; i < 2 ; i++)

{

PORTA = 0xfb;

PORTD = 0x10;

_delay_ms(500);

PORTA = 0xfb;

PORTD = 0x20;

_delay_ms(500);

PORTA = 0xfb;

PORTD = 0x40;

_delay_ms(500);

PORTA = 0xfb;

PORTD = 0x80;

_delay_ms(500);

}

PORTA = 0xff;

PORTD = 0xff;

}

void ledBuf_open(void)

{

DDRA = 0xff;

DDRE = 0xf0;

for( unsigned int i = 0 ; i < 2 ; i++)

{

for( unsigned int i = 0 ; i < 50 ; i++)

{

PORTA = 0xc0;

PORTD = 0x10;

_delay_ms(5);

PORTA = 0x8c;

PORTD = 0x20;

_delay_ms(5);

PORTA = 0x86;

PORTD = 0x40;

_delay_ms(5);

PORTA = 0xc8;

PORTD = 0x80;

_delay_ms(5);

}

PORTD = 0x00;

_delay_ms(1000);

}

}

/*void pwReset (char *pWBuf)

{

for( unsigned int i = 0 ; i < 4 ; i++)

{

pWBuf[i] = 'n';

}

}*/

unsigned int getEcho(void)

{

Trigger_ON;

_delay_us(1);

Trigger_OFF;  // 10uS

while(Echo==0x00);

TCCR1B=(1<<CS11);

TCNT1=0x00;

while(Echo!=0x00);

TCCR1B=(1<<WGM12);

return (TCNT1/58); //cm로 변환 1cm은 58

}

void hc_sr04_init(void)

{

DDRF=0x03;               // PF0 ouput Trigger, PF2 input Echo

TCCR1B=(1<<WGM12);             // Set timer up in CTC mode

TCCR0 = 0x1F; //prscalar 128

OCR0 = 243;

}

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 2

조회수 1,142

운치킨님의 댓글

운치킨 댓글의 댓글 작성일

넵 감사합니다! 디버깅 해보겠습니다 ㅜㅜ

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
질문 LED, LCD, 버튼, 부저 0922tjdus 22-11-24 939
답변 답변글 답변 : LED, LCD, 버튼, 부저 master 22-11-24 785
질문 ATmega128 온도센서 활용 관련 질문입니다. donggle 22-11-24 1377
질문 ATmega128 인터럽트를 이용한 타이머 카운터댓글[1] 코드비전 22-11-24 1017
질문 아두이노 소프트웨어 시리얼 다수 사용 질문댓글[3] s은여우s 22-11-24 887
질문 초음파센서 거리를 인식해서 카운트댓글[6] 아독 22-11-24 1505
질문 atmega128 버저 추가 초보중에최고 22-11-24 1039
질문 버튼으로 외부인터럽트 동작구현 도움이 필요해요 비비빅 22-11-23 510
답변 답변글 답변 : 버튼으로 외부인터럽트 동작구현 도움이 필요해요 master 22-11-23 706
질문 제발 도와주세요 atmega128 오류입니다댓글[1] 코드비전 22-11-23 1205
질문 컨베이어 벨트와 센서 연동 코딩 dpwl 22-11-23 816
답변 답변글 답변 : 컨베이어 벨트와 센서 연동 코딩 master 22-11-23 869
질문 Atmega128 가로등 프로그램 질문드립니다.댓글[2] 모덴 22-11-23 1191
질문 빨간불일때만 작동하게 하려는데댓글[1] daaa 22-11-23 905
질문 Atmega128댓글[1] 일렉트릭붐 22-11-22 1404
질문 atmega128과 초음파 센서 SRF02댓글[3] 마프하나 22-11-22 1172
질문 stm32 uart로 bwt61(진동센서)를 읽고 싶은데댓글[1] 라칸 22-11-22 977
질문 avr 수동부저로 도레미파솔라시 표현하기 부탁드립니다..댓글[3] cretom 22-11-22 1329
질문 아두이노 회로도 구성과 외부전원 관련댓글[1] 이미지첨부파일 덮기 22-11-22 962
질문 multiple definition of `__vector_3'댓글[1] 형니니 22-11-21 800
질문 아두이노 스피커 출력관련해서 질문드립니다댓글[1] 민석 22-11-21 1121
질문 lwip로 서버를 구현시키고 싶은데 이미지 라칸 22-11-21 772
질문 아두이노 우노 라인트레이서 질문드립니다.댓글[1] 전주사람 22-11-21 1006
질문 센서값을 배열에 넣어서 평균을 내려고 하는데 잘 안되네요... BBAM 22-11-21 657
답변 답변글 답변 : 센서값을 배열에 넣어서 평균을 내려고 하는데 잘 안되네요...댓글[1] master 22-11-21 963
질문 블루투스 통신이랑 도어락 코드를 합치고 싶습니다.댓글[1] 이재우 22-11-20 1175
질문 전화 벨소리랑 FND 코드를 합칠 수 있나요? 이제막시작 22-11-20 647
답변 답변글 답변 : 전화 벨소리랑 FND 코드를 합칠 수 있나요?댓글[4] master 22-11-20 1488
질문 RGB 코드와 소음측정 코드를 합치고 싶습니다. llllllux 22-11-20 692
답변 답변글 답변 : RGB 코드와 소음측정 코드를 합치고 싶습니다.댓글[1] master 22-11-20 844
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기