질문게시판 > 답변 : (초보)아두이노 질문있습니다.

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

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


BASIC4MCU | 질문게시판 | 답변 : (초보)아두이노 질문있습니다.

페이지 정보

작성자 master 작성일2018-12-20 10:36 조회4,051회 댓글0건

본문

	

 

angle[37]  ={  0,  5101520253035404550556065707580859095,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180};
//
mySv[0][37]={  0,  1,  2,  3,  4,  5,  6,  7,  8,  9101112131415161718192021222324252627282930313233343536};
mySv[1][37]={ 37383940414243444546474849505152535455565758596061626364656667686970717273};
mySv[2][37]={ 7475767778798081828384858687888990919293949596979899,100,101,102,103,104,105,106,107,108,109,110};
mySv[3][37]={111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147};
mySv[4][37]={148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184};
mySv[5][37]={185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221};

 

180도를 5로 나누면 0~36까지 37개의 각도가 나옵니다.

1바이트 시리얼 데이터로 6개의 각도를 구분해서 전송할 수 있습니다.

0~36은 서보1

37~73은 서보2 식인거죠

 

//

아래 소스에서도 0~36으로 데이터를 다루며

서보모터에 write 할 때에 5를 곱해서 출력합니다.

 

// DateTime : 2018-12-20 오전 10:39:36
// by Ok-Hyun Park
//
#include <Servo.h>
Servo mySv[6];
mySvPin[]={4,5,6,7,8,9};
//
int min_angle[]={11,11,11,11,11,11}; // 55도
int max_angle[]={25,25,25,25,25,25}; // 125도
//
int angle[] ={18,18,18,18,18,18}; // 90도
int target[]={18,18,18,18,18,18}; // 90도
//
void setup(){
  Serial.begin(9600);
  //
  for(int i=0;i<6;i++)mySv[i].attach(mySvPin[i]);
  for(int i=0;i<6;i++)mySv[i].write(angle[i]*5);
}
//
void loop(){
  if(Serial.available()>0){
    byte r=Serial.read();
    if     (r37){ target[0]=r;     } // mySv[0]
    else if(r74){ target[1]=r37; } // mySv[1]
    else if(r<111){ target[2]=r74; } // mySv[2]
    else if(r<148){ target[3]=r-111; } // mySv[3]
    else if(r<185){ target[4]=r-148; } // mySv[4]
    else if(r<222){ target[5]=r-185; } // mySv[5]
  }
  //
  if(angle[0]>target[0]){ angle[0]--; mySv[0].write(angle[0]*5); } if(angle[0]<target[0]){ angle[0]++; mySv[0].write(angle[0]*5); }  
  if(angle[1]>target[1]){ angle[1]--; mySv[1].write(angle[1]*5); } if(angle[1]<target[1]){ angle[1]++; mySv[1].write(angle[1]*5); }
  if(angle[2]>target[2]){ angle[2]--; mySv[2].write(angle[2]*5); } if(angle[2]<target[2]){ angle[2]++; mySv[2].write(angle[2]*5); }
  if(angle[3]>target[3]){ angle[3]--; mySv[3].write(angle[3]*5); } if(angle[3]<target[3]){ angle[3]++; mySv[3].write(angle[3]*5); }
  if(angle[4]>target[4]){ angle[4]--; mySv[4].write(angle[4]*5); } if(angle[4]<target[4]){ angle[4]++; mySv[4].write(angle[4]*5); }
  if(angle[5]>target[5]){ angle[5]--; mySv[5].write(angle[5]*5); } if(angle[5]<target[5]){ angle[5]++; mySv[5].write(angle[5]*5); }
  //
  delay(10)
}

 

PC또는 블루투스에서 아두이노로 시리얼 전송 할 때에는

각도를 5로 나누고

서보1이면 그 값을 그대로 전송하고

서보6이면 그 값에 185를 더해서 전송하면 됩니다.

 //----------------------------------------------------------------------

 

 

 

 

 

시리얼모니터에서 테스트 할 때에는 정수값을 임의로 입력할 방법이 없으므로

2바이트로 데이터를 전송 해보겠습니다.

각도부터 보내고 모터선택코드를 전송합니다.

 

Table of ASCII Characters

binary
MSN 
0000
0001
0010
0011
0100
0101
0110
0111
LSN 
hex
0
1
2
3
4
5
6
7
0000
0
NUL
 
00
DLE
16  
10
SP
32  
20
0
48  
30
@
64  
40
P
80  
50
`
96  
60
p
112  
70
0001
1
SOH
 
01
XON  
(DC1)
17  
11
!
33  
21
1
49  
31
A
65  
41
Q
81  
51
a
97  
61
q
113  
71
0010
2
STX
 
02
DC2
18  
12
"
34  
22
2
50  
32
B
66  
42
R
82  
52
b
98  
62
r
114  
72
0011
3
ETX
 
03
XOFF (DC2)
19  
13
#
35  
23
3
51  
33
C
67  
43
S
83  
53
c
99  
63
s
115  
73
0100
4
EOT
 
04
DC4
20  
14
$
36  
24
4
52  
34
D
68  
44
T
84  
54
d
100  
64
t
116  
74
0101
5
ENQ
 
05
NAK
21  
15
%
37  
25
5
53  
35
E
69  
45
U
85  
55
e
101  
65
u
117  
75
0110
6
ACK
 
06
SYN
22  
16
&
38 
26
6
54  
36
F
70  
46
V
86  
56
f
102  
66
v
118  
76
0111
7
BEL
 
07
ETB
23  
17
'
39  
27
7
55  
37
G
71  
47
W
87  
57
g
103  
67
w
119  
77
1000
8
BS
 
08
CAN
24  
18
(
40  
28
8
56  
38
H
72  
48
X
88  
58
h
104  
68
x
120  
78
1001
9
HT
 
09
EM
25  
19
)
41  
29
9
57  
39
I
73  
49
Y
89  
59
i
105  
69
y
121  
79
1010
A
LF
10  
0A
SUB
26  
1A
*
42  
2A
:
58  
3A
J
74  
4A
Z
90  
5A
j
106  
6A
z
122  
7A
1011
B
VT
11  
0B
ESC
27  
1B
+
43  
2B
;
59  
3B
K
75  
4B
[
91  
5B
k
107  
6B
{
123  
7B
1100
C
FF
12  
0C
FS
28  
1C
,
44  
2C
<
60  
3C
L
76  
4C
\
92  
5C
l
108  
6C
|
124  
7C
1101
D
CR
13  
0D
GS
29  
1D
-
45  
2D
=
61  
3D
M
77  
4D
]
93  
5D
m
109  
6D
}
125  
7D
1110
E
SO
14  
0E
RS
30  
1E
.
46  
2E
>
62  
3E
N
78  
4E
^
94 
5E
n
110  
6E
~
126  
7E
1111
F
SI
15  
0F
US
31  
1F
/
47  
2F
?
63  
3F
O
79  
4F
_
95  
5F
o
111  
6F
DEL
127  
7F

 

angle[37]  ={  0,  5101520253035404550556065707580859095,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180};
angle[37]  ={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k'};

 

대문자 'A'~'Z' 26문자 와 소문자 'a'~'k' 11개로 37개의 문자를 각도로 사용하면 이렇게 되겠죠

 

 

// DateTime : 2018-12-20 오후 1:05:58
// by Ok-Hyun Park
//
#include <Servo.h>
Servo mySv[6];
mySvPin[]={4,5,6,7,8,9};
//
int min_angle[]={11,11,11,11,11,11}; // 55도
int max_angle[]={25,25,25,25,25,25}; // 125도
//
int angle[] ={18,18,18,18,18,18}; // 90도
int target[]={18,18,18,18,18,18}; // 90도
//
byte r_angle;
//
void setup(){
  Serial.begin(9600);
  //
  for(int i=0;i<6;i++)mySv[i].attach(mySvPin[i]);
  for(int i=0;i<6;i++)mySv[i].write(angle[i]*5);
}
//
void loop(){
  if(Serial.available()>0){
    byte r=Serial.read();
    if     ((r>='A')&&(r<='Z')){ r_angle=r-'A';         }
    else if((r>='a')&&(r<='k')){ r_angle=r-'a'+26;      }
    else if((r>='1')&&(r<='6')){ target[r-'1']=r_angle; } // target[] 저장
  }
  //
  if(angle[0]>target[0]){ angle[0]--; mySv[0].write(angle[0]*5); } if(angle[0]<target[0]){ angle[0]++; mySv[0].write(angle[0]*5); }  
  if(angle[1]>target[1]){ angle[1]--; mySv[1].write(angle[1]*5); } if(angle[1]<target[1]){ angle[1]++; mySv[1].write(angle[1]*5); }
  if(angle[2]>target[2]){ angle[2]--; mySv[2].write(angle[2]*5); } if(angle[2]<target[2]){ angle[2]++; mySv[2].write(angle[2]*5); }
  if(angle[3]>target[3]){ angle[3]--; mySv[3].write(angle[3]*5); } if(angle[3]<target[3]){ angle[3]++; mySv[3].write(angle[3]*5); }
  if(angle[4]>target[4]){ angle[4]--; mySv[4].write(angle[4]*5); } if(angle[4]<target[4]){ angle[4]++; mySv[4].write(angle[4]*5); }
  if(angle[5]>target[5]){ angle[5]--; mySv[5].write(angle[5]*5); } if(angle[5]<target[5]){ angle[5]++; mySv[5].write(angle[5]*5); }
  //
  delay(10)
}

 

각도부터 전송하고나서 서보모터 선택코드를 전송합니다.

예를들면 

1번 서보 90도는 "S1"

2번 서보 90도는 "S2"

6번 서보 90도는 "S6"

3번 서보 10도는 "C3"

4번 서보 110도는 "W4"

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

댓글 0

조회수 4,051

등록된 댓글이 없습니다.

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 10776
공지 사이트 이용 안내댓글[25] master 17-10-29 30623
질문 Atmega IO핀 출력 상태 질문이요..댓글[3] 새글 chelsea 13:32 15
답변 답변글 답변 : Atmega IO핀 출력 상태 질문이요.. 새글 master 14:34 10
질문 아두이노 센서 쉴드 v5.0 과 음성인식 모듈(V2)통신댓글[6] 이미지새글첨부파일 AutoSun 22-07-05 25
질문 초음파 센서를 사용한 dc모터 제어에 관해 질문 있습니다. 새글첨부파일 뉴비에오 22-07-04 24
답변 답변글 답변 : 초음파 센서를 사용한 dc모터 제어에 관해 질문 있습니다.댓글[2] 새글 master 22-07-05 26
질문 아두이노 Sensor Shield 5.0 시리얼 통신 질문댓글[2] AutoSun 22-07-04 44
질문 Atmega 코드 좀 봐주세요.댓글[1] 첨부파일 chelsea 22-07-04 42
질문 아두이노 while문 탈출 질문 yhj2644 22-07-01 98
답변 답변글 답변 : 아두이노 while문 탈출 질문댓글[8] master 22-07-01 122
질문 ESP32-C3 리튬폴리머 ADC 전압 체크 관련 문의 (2)댓글[3] 이미지 cansad 22-06-30 96
질문 ESP32-C3 리튬폴리머 ADC 전압 체크 관련 문의댓글[3] cansad 22-06-30 141
질문 빵판없이 디스플레이 넣을 수 있을까요?댓글[2] 이미지첨부파일 오소로롯 22-06-29 104
질문 라즈베리파이4 신형 선택문제댓글[1] maximum 22-06-26 170
질문 음전압 ADC댓글[2] 412904 22-06-26 171
질문 아두이노 센서값 출력 질문입니다!댓글[1] 아궁2 22-06-24 197
질문 ATmega128, ATmega28 RS232통신 이미지첨부파일 Moon4201 22-06-24 219
답변 답변글 답변 : ATmega128, ATmega28 RS232통신댓글[1] master 22-06-25 208
질문 서보모터, 온습도센서 코드 질문댓글[2] 첨부파일 kshdlfaldfh 22-06-22 162
답변 답변글 답변 : 서보모터, 온습도센서 코드 질문댓글[15] master 22-06-22 426
질문 steppermulti5 질문 응애 22-06-21 128
답변 답변글 답변 : steppermulti5 질문댓글[1] master 22-06-22 108
질문 atmega128 avr usart 질문 snoflak 22-06-21 178
답변 답변글 답변 : atmega128 avr usart 질문댓글[5] master 22-06-21 339
질문 사용자 정의 함수 변환 하는 방법댓글[2] 이미지첨부파일 da0800 22-06-21 144
질문 atmega128댓글[1] 이미지 양의노래 22-06-20 203
질문 아두이노 동시동작 재질문댓글[9] 이미지첨부파일 죠르디 22-06-20 345
질문 초음파센서로 dc모터 제어하기댓글[1] 첨부파일 난쟁2 22-06-20 212
질문 아두이노 동시동작댓글[7] 죠르디 22-06-19 218
게시물 검색

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