부저 옵션을 넣어서 왼쪽이나 오른쪽 회전할때 부저 소리나게 할려고 소스를 짰습니다
부저 함수를 아래와 같이 만들었습니다
void buzR(void)
{
unsigned char j;
P3_0 = OFF;
for(j=0; j<2; j++) delay(10000);
P3_0 = ON;
for(j=0; j<2; j++) delay(10000);
}
그래서 이놈을 호출해서
else if(E == ON) // 센서가 인식한 방향입니다
{
motor_move(100,250); // 오른쪽 회전( 왼쪽바퀴 속도증가 )
buzR(); //부저 호출
}
이렇게 하니 회전할때 부저가 울릴때마다 멈췄다가 갔다가 하는 겁니다
어떻게 코딩을 해야할지 난감...
흰트를 좀 주세용
딜레이를 썻을때는 소리가 날때마다 멈췄지만
니냥 ON/OFF형식으로 하니 잘 움직이더군요 ㅎㅎ;
아무리 생각해도 딜레이를 써서도 방법이 있을거 같아요
그방법을 아시는 분은 답변을 ...
for(i=0;i>255;i++) 또는 for(i=0;i>time;i++);
{
for(j=0;j>time;j++)
{
}
}
맞나요?? 그럼 딜레이 함수를 호출시 다른 작업은 안될껀데...
허접하지만 저의 생각입니다. ㅋ
부저를 어느 일정시간 동안 소리 내고 싶어하신거 같은데 타이머 인터럽트 부분에서 변수를 하나 지정해서
if 문으로 비교 해서 어느 일정한 시간까지 울리게 하는게 낮지 않을까요??
허접해서 죄송 ㅋㅋ 저두 이제 라인트레이서 만들려구 하는데 많은 도움 부탁드립니다. ㅋ
힌트를 주라하셨으니 힌트만 드립죠
while문에 의한 순차 구문에서는 딜레이가 끝날때까지 다른 작업을 할수가 없지요
다른 작업을 동시에 (시간분할) 하고 싶을때는 타이머 인터럽트 함수 구문에서 처리해주면 되네요!
잘 응용해보시길..ㅋㅋ 의외로 간단함
그럼 LCD부분을 타이머로 짜면 대나용?
부저를 타이머로 짜면 되겠네요^^;
LCD도 타이머로 짜야 할거같아요.. ^^;
LCD랑 모터랑 같이 돌리면 딜레이 때문에 그런지
움직였다가 안움직였다가 하내요..
아참 그리고 제가 P3에 4비트 모드로 해서 D4,D5,D6,D7를 사용하고
P3_0 에는 부저를
P3_1 에는 LED
P3_2 마찬가지 LED를 달았습니다
LCD소스 코딩 부분에서 아마 부저.LED가 겹치는 현상이 있는 듯 합니다..
LCD소스 코딩 부분을 타이머로 짜면 댈까요?
사고의 전환이 필요-_-;;
모터 구동이랑 부저를 타이머로 하시죠^^;;
lcd는 딜레이타임을 맞춰져야 하기때문에 타이머로 하면 더 힘들겠지요..
P3_1 에는 LED
P3_2 마찬가지 LED를 달았습니다
이부분은 비트 제어를 하시기 바랍니다.
포트 전체를 제어하면 다른것에도 영향을 받으니까요..
좀더 테스트를 해봐야겠씁니다
우선 모터를 안돌리고 센서 부저 lcd ,led가 잘되면
모터를 타이머로 돌릴생각입니다...
LCD만 제어해도 부저랑 LED가 계속 켜집니다
LCD 데이터선이 P3에 연결되있고 부저랑 LED도 P3에 연결되서 그런것같습니다
그래서 제가
L_INIT();//LCD 초기 설정
DISPLAY();//msg1, msg2 디스플레이
// 초기설정
P3_0 = 1;
P3_1 = 1;
P3_2 = 1;
이렇게 하면 부저랑 LED가 꺼지더군요
부저랑 LED를 꺼지게 하기 위해서 이렇게 사용하는게 맞는건지 궁금합니다
위에서 말한게
LCD소스를 딜레이로 함수를 이용했기 때문에
모터가 지연시간동안 움직였다 안움직였다 한다는 말씀이죠?
그럼 DC모터를 타이머를 이용해서 하면 괜찮다는 말씀인거 같은데 ...
P3_1 = 1;
이렇게 하면 비트제어가 되니까 맞는거 같은데요
회로를 모르니 모르겠네요
한 포트에 led랑 lcd랑 같이 연결한건가요?
P3_1에 led
P3_2에 led
연결했습니다
그러케 되면 부저도 영향을 받을텐데요~ㅋㅋ