질문게시판 > 아두이노 atmega128 코딩 질문

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

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


BASIC4MCU | 질문게시판 | 아두이노 atmega128 코딩 질문

페이지 정보

작성자 master 작성일2018-07-02 10:25 조회9,860회 댓글0건

본문

	
스위치로 부저를 작동시키려 하는데 코딩좀 봐주세요 안되가지고;

#include
#include
#define F_CPU 16000000UL
#define __DELAY_BACKWARD_COMPATIBLE__
#include
volatile int hz,count;
void buzzer(int hz, int count);
ISR(INT4_vect)
{
 
 _delay_ms(10);
 EIFR |= 1<<4;
 
}

int main()
{
 int i;
 DDRB = 0x10;
 while(1)
 {
  for(i=0; i<20; i++)
  {
    buzzer(2093.2,1);
    buzzer(2093.2,1);
    buzzer(1568,1);
    buzzer(1568,1);
    buzzer(1760,1);
    buzzer(1975.6,1);
    buzzer(2093.2,1);
    buzzer(1760,1);
    buzzer(1568,1);
  }
  _delay_ms(2000);
 }
 DDRE = 0xef;
 EICRB = 0x02;
 EIMSK = 0x10;
 SREG |= 1<<7;
 while(1)
 buzzer(hz,count);
}
void buzzer(int hz,int count)
{
 int i;
 double ms;
 ms = 500.0/hz;
 for(i=0;i {
  PORTB = 0x10; _delay_ms(ms);
  PORTB = 0x00; _delay_ms(ms);
 }
}

//

// DateTime : 2018-05-31 오후 10:15:35
// by Ok-Hyun Park
//
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL
#define __DELAY_BACKWARD_COMPATIBLE__
#include <util/delay.h>
volatile int hz,count;
//
void buzzer(int hz,int count){
  int i;
  double ms;
  ms=1000.0/hz// 주파수를 주기로 변경(ms단위)
  ms=ms/2;      // HIGH, LOW 시간으로 나누기 위해서 1/2
  for(i=0;i<count;i++){
    PORTB=0x10_delay_ms(ms); //HIGH
    PORTB=0x00_delay_ms(ms); //LOW
  }
}
//
ISR(INT4_vect){
  _delay_ms(10);
  EIFR|=1<<4;
}
//
int main(){
  int i;
  DDRB=0x10// 부저핀 출력으로 설정 pinMode와 같음
  while(1){
    for(i=0;i<20;i++){
      buzzer(2093.2,1); // 2093.2Hz, 1회
      buzzer(2093.2,1);
      buzzer(1568  ,1); // 1568  Hz, 1회
      buzzer(1568  ,1);
      buzzer(1760  ,1); // 1760  Hz, 1회
      buzzer(1975.6,1); // 1975.6Hz, 1회
      buzzer(2093.2,1); // 2093.2Hz, 1회
      buzzer(1760  ,1); // 1760  Hz, 1회
      buzzer(1568  ,1); // 1568  Hz, 1회
    }
    _delay_ms(2000);
  }
  //DDRE=0xef; // 없어도 되고, 없는 것이 고장발생이 적음
  EICRB=0x02EIMSK=0x10SREG|=1<<7// 외부인터럽트4 설정
  while(1)buzzer(hz,count); // 계속 부저가 울리다가, 인터럽트 누르면 10ms 부저가 안울림
}

 

첨부 이미지

1568Hz~2093Hz이므로 솔~도 까지의 톤 발생 예제입니다.

//

//
ISR(INT4_vect){
  _delay_ms(10);
  EIFR|=1<<4;
}
외부 인터럽트의 딜레이는 10ms로는 표시가 잘 안되고 1000ms 정도 딜레이를 시켜야지 확실히 체크 되겠죠
//
  //DDRE=0xef; // 없어도 되고, 없는 것이 고장발생이 적음
  EICRB=0x02EIMSK=0x10SREG|=1<<7// 외부인터럽트4 설정
  while(1)buzzer(hz,count); // 계속 부저가 울리다가, 인터럽트 누르면 10ms 부저가 안울림
제일 아래의 3라인은 무한루프문 괄호밖의 내용이라서 실행되지 않습니다.
따라서 외부 인터럽트 함수도 필요 없습니다.
게다가 뭘하려고 작성한 것인지도 모르겠습니다.(중요하지 않음)
//
      buzzer(2093.2,1); // 2093.2Hz, 1회
      buzzer(2093.2,1);
      buzzer(1568  ,1); // 1568  Hz, 1회
      buzzer(1568  ,1);
      buzzer(1760  ,1); // 1760  Hz, 1회
      buzzer(1975.6,1); // 1975.6Hz, 1회
      buzzer(2093.2,1); // 2093.2Hz, 1회
      buzzer(1760  ,1); // 1760  Hz, 1회
      buzzer(1568  ,1); // 1568  Hz, 1회
주파수의 역수는 주기입니다.
어떤음은 2번 출력하고 어떤음은 1번 출력하고 있습니다.
예를들면 위에 2음은 2번씩 출력해서 4분음표이고, 아래는 1번씩 출력해서 8분음표다..라는 식인거죠
그런데
주파수가 높은음은 조금 빨리 끝나고, 주파수가 낮은 음은 조금 길어집니다.
(주기가 차이나므로)
정밀하지 않은 간단한 연습용 예제입니다.

 

// DateTime : 2018-05-31 오후 10:27:09
// by Ok-Hyun Park
//
#include <avr/io.h>
#define F_CPU 16000000UL
#define __DELAY_BACKWARD_COMPATIBLE__
#include <util/delay.h>
//
void buzzer(int hz,int count){
  int i;
  double ms;
  ms=1000.0/hz// 주파수를 주기로 변경(ms단위)
  ms=ms/2;      // HIGH, LOW 시간으로 나누기 위해서 1/2
  for(i=0;i<count;i++){
    PORTB=0x10_delay_ms(ms); //HIGH
    PORTB=0x00_delay_ms(ms); //LOW
  }
}
//
int main(){
  int i;
  DDRB=0x10// 부저핀 출력으로 설정 pinMode와 같음
  while(1){
    for(i=0;i<20;i++){
      buzzer(2093,2); // 2093.2Hz, 2회
      buzzer(1568,2); // 1568  Hz, 2회
      buzzer(1760,1); // 1760  Hz, 1회
      buzzer(1976,1); // 1975.6Hz, 1회
      buzzer(2093,1); // 2093.2Hz, 1회
      buzzer(1760,1); // 1760  Hz, 1회
      buzzer(1568,1); // 1568  Hz, 1회
    }
    _delay_ms(2000);
  }
}



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

댓글 0

조회수 9,860

등록된 댓글이 없습니다.

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
답변 답변글 답변 : 아두이노 시리얼 통신 질문 master 18-07-13 8549
질문 자동차 PID제어 질문 master 18-07-13 7843
질문 아두이노 외부전압 질문 master 18-07-13 9159
질문 아두이노 코드 질문입니다 zxxuxvmau 18-07-12 8315
답변 답변글 답변 : 아두이노 코드 질문입니다 master 18-07-12 8405
질문 아두이노 키트 질문드립니다.댓글[4] 밥솥 18-07-12 16800
질문 모터 제어 질문 뽕보 18-07-11 7916
답변 답변글 답변 : 모터 제어 질문 master 18-07-11 7786
답변 답변글 답변 : 답변 : 모터 제어 질문댓글[1] 뽕보 18-07-11 9855
질문 아두이노와 라즈베리파이 중 어떤 것을 하는것이 좋을까요? master 18-07-11 7999
질문 pic16f877a 외부 인터럽트 질문 master 18-07-11 7755
질문 아두이노 코딩 합치기 질문 master 18-07-11 10159
질문 아두이노 코딩 질문입니다댓글[1] 비공개 18-07-10 8619
질문 스탭모터 제어 뽕보 18-07-10 7848
답변 답변글 답변 : 스탭모터 제어댓글[2] master 18-07-10 11133
질문 아두이노 컴파일 오류 질문 master 18-07-10 8676
질문 for문에서 i++와 ++i의 차이 질문 master 18-07-10 8908
질문 동화 bhs-800/s 자외선살균소독기 램프가없어서 알수가 없어요 master 18-07-10 9810
질문 아두이노 블루투스 모터제어 질문 master 18-07-10 8957
질문 아두이노 LED 쉬프트 코드 질문 master 18-07-10 9486
질문 리눅스 두가지질문입니다댓글[1] 찐찐형 18-07-09 10575
질문 아두이노 메가보드 스텝모터 6개 연결, usb 유선 연결, 스마트폰 앱으로 스텝모터 구동 질문 master 18-07-09 12017
질문 피에조 센서 질문 master 18-07-09 9160
질문 ATmega 128코드비전 스위치 질문 master 18-07-09 10997
질문 아두이노 delay말고 count 변수나 다른방법을 사용해서 반복하게 할 수 있나요? master 18-07-09 12291
질문 아두이노 센서 질문 master 18-07-09 8996
질문 아두이노 네오픽셀 2개 동시 구동 질문 master 18-07-09 10651
질문 UART 통신 질문합니다댓글[3] 비공개 18-07-09 14631
질문 아두이노 조명 체크 네오픽셀 구동 질문 master 18-07-08 9343
질문 아두이노 펄스의 개수를 세는 코드 질문 master 18-07-08 11187
게시물 검색

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
모바일버전으로보기