BASIC4MCU | 센서 | 초음파센서 | 초음파 센서 거리에 따른 RC서보모터 각도 제어
페이지 정보
작성자 키트 작성일2017-08-23 14:51 조회1,661회 댓글0건본문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
// ==================================================================
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
//
#define Trigger PORTC.0 //초음파 트리거
#define Echo PINC.1 //초음파 에코
//
int range;
//
void TX0_CH(char ch){ while(!(UCSR0A&0x20)); UDR0=ch; } // 송신함수
//
void RC_Motor(int angle){
angle=angle*18+3000;
OCR3AH=angle>>8; OCR3AL=angle&0xFF; //PE3
}
//
void getEcho(void){
Trigger=1; delay_us(10); Trigger=0;
while(!Echo); TCNT1=0; TCCR1B=2;
while(Echo); TCCR1B=0; range=TCNT1;
range=(int)(float)range/116.0); // cm
}
//
void main(void){
DDRC=1;
DDRE=8;
TCCR3A=0x82; TCCR3B=0x1A;
OCR3AH=3000>>8; OCR3AL=3000&0xFF;
ICR3H=39999>>8; ICR3L=39999&0xFF;
while(1){
getEcho();
if(range>180)range=180;
RC_Motor(range-90);
delay_ms(100);
}
}
//=================================================
#include <avr/io.h>
#include <stdio.h>
#define F_CPU 16000000UL // 16 MHz
#include <util/delay.h>
//
#define Trigger_1 PORTC|=1 //초음파 트리거
#define Trigger_0 PORTC&=~1 //초음파 트리거
#define Echo (PINC&2) //초음파 에코
//
int range;
//
void RC_Motor(int angle){
angle=angle*18+3000;
OCR3AH=angle>>8; OCR3AL=angle&0xFF; //PE3
}
//
void getEcho(void){
Trigger_1; _delay_us(10); Trigger_0;
while(!Echo); TCNT1=0; TCCR1B=2;
while(Echo); TCCR1B=0; range=TCNT1;
range=(int)(float)range/116.0); // cm
}
//
int main(void){
DDRC=1;
DDRE=8;
TCCR3A=0x82; TCCR3B=0x1A;
OCR3AH=3000>>8; OCR3AL=3000&0xFF;
ICR3H=39999>>8; ICR3L=39999&0xFF;
while(1){
getEcho();
if(range>180)range=180;
RC_Motor(range-90);
_delay_ms(100);
}
}
|
cs |
댓글 0
조회수 1,661등록된 댓글이 없습니다.