아트메가질문입니다.
페이지 정보
작성자 DDRB22 작성일18-12-14 00:36 조회3,516회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-07 오후 12:06:08
// by Ok-Hyun Park
//
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
//
// 솔솔솔라솔라라미미솔
//unsigned char s[10]={0x9E,0x9E,0x9E,0x8D,0x9E,0x8D,0x8D,0xBC,0xBC,0x9E};
unsigned char s0[3]={0x9E,0x9E,0x9E};
unsigned char s1[2]={0x8D,0x9E,};
unsigned char s2[5]={0x8D,0x8D,0xBC,0xBC,0x9E};
//
//int t[10]={255,255,255,511,1023,255,255,255,255,1023};
int t0[3]={250,250,250};
int t1[2]={500,1000};
int t2[5]={250,250,250,250,1000};
//
int i=0,n,sign; float f;
//
void rand(){
n=TCNT2; // 0~255
sign=ADCL&1;
f=(float)n/255.0;
if((sign==1)&&(f<0.7))f=0.7; // 시간을 줄일 때에는 너무 짧지 않도록 제한합니다.
}
//
int calc_delay(int d){
n=f*d;
if(sign)n=d-n;
else n=d+n;
return n;
}
//
int main(void){
int i=0,n,sign; float f;
DDRB=0x10; // PB4(OC0)
TCCR0=0b00011111;
ADMUX=0x40; ADCSRA=0xE1;
TCCR2=1;
while(1){
rand();
for(i=0;i<3;i++){ OCR0=s[i]; n=rand(t[i]); _delay_ms(n); }
//-------------------------------------
rand();
for(i=0;i<2;i++){ OCR0=s[i]; n=rand(t[i]); _delay_ms(n); }
//-------------------------------------
rand();
for(i=0;i<5;i++){ OCR0=s[i]; n=rand(t[i]); _delay_ms(n); }
//-------------------------------------
_delay_ms(5000);
}
}
//
이런식으로 무궁화꽃이피었습니다.
음계는 나오는데 무궁화 //꽃이 //피었습니다.3부분으로 나눠서 랜덤한속도로 재생하거나
각자의 재생속도가 3가지경우로 제한하여 재생시키려고하는데
스위치함수를써서 케이스를 3가지로나눈다음 각자 무궁화 딜레이 꽃이 딜레이 피었습니다
이런식으로 코드를짜야할까요?
무궁화꽃이피었습니다 가 나오는동안
움직이면 탈락 소리가나오는동안 움직여서 술래한테까지 가는 게임을구상중입니다.
--> 위내용이 답변받은내용인데 cal_delay부분은 만들어 놓으시기만하고 아예안쓰셨고 또한 이함수의 동작을 설명해주시면 감사하겠습니다..
그리고 rand함수에서 sign은 무엇을 나타내는 건지 모르겠습니다. sign=ADCL&1; 이부분이 무슨의미인가요
그리고 메인함수에서 범위가 for문이 3개있는데
for(i=0;i<3;i++){ OCR0=s[i]; n=rand(t[i]); _delay_ms(n); }
//-------------------------------------
rand();
for(i=0;i<2;i++){ OCR0=s[i]; n=rand(t[i]); _delay_ms(n); }
//-------------------------------------
rand();
for(i=0;i<5;i++){ OCR0=s[i]; n=rand(t[i]); _delay_ms(n); }
3개의 범위가 겹치지않나요 예를들어 i가 2이면 첫번째도실행 두번째도실행 세번째도 실행이 되버려서요
댓글 : 0
조회수 : 3,516
등록된 댓글이 없습니다.