motor.ino
2.99 KB
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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
#include <Stepper.h>
// 스텝당 1.8도 회전함. 360/1.8
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 2, 3, 4, 5);
// 블루투스 모듈
#include <SoftwareSerial.h>
#define BT_RX 7
#define BT_TX 8
// RX핀(7번)은 HM10의 TX에 연결
// TX핀(8번)은 HM10의 RX에 연결
SoftwareSerial HM10(BT_RX,BT_TX);
// 동작 수신용
char receivechar;
// at 설정용
char recv_str[100];
void setup()
{
// 1분에 n바퀴 회전
myStepper.setSpeed(60);
Serial.begin(9600);
HM10.begin(9600);
// 블루투스 작동 확인
while(1)
{
if(sendBlueToothCommand("AT") == 0)
{
if(strcmp((char *)recv_str, (char *)"OK") == 0)
{
Serial.println("Bluetooth exists\r\n");
break;
}
}
delay(500);
}
sendBlueToothCommand("AT+NAMEMOTOR"); // 블루투스 장치 이름설정
sendBlueToothCommand("AT+MODE3"); // 블루투스 모드 설정
sendBlueToothCommand("AT+TYPE3");
}
void loop()
{
if(HM10.available())
{
receivechar = HM10.read();
if(receivechar == 'y'){
// 이상태에서는 360도 회전.
// 회전수 조절시 아래 함수 추가
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);
myStepper.step(50);
delay(1500);
}
if(receivechar == 'n'){
// 이상태에서는 -360도 회전.
// stepsPerRevolution = 200일때 1초대기. -> 360도 회전.
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-20);
delay(1500);
}
}
}
// at 설정용 함수
int sendBlueToothCommand(char command[])
{
Serial.print("send: ");
Serial.print(command);
Serial.println("");
#if NLCR
HM10.println(command);
#else
HM10.print(command);
#endif
delay(300);
if(recvMsg(200) != 0) return -1;
Serial.print("recv: ");
Serial.print(recv_str);
Serial.println("");
return 0;
}
int recvMsg(unsigned int timeout)
{
//wait for feedback
unsigned int time = 0;
unsigned char num;
unsigned char i;
//waiting for the first character with time out
i = 0;
while(1)
{
delay(50);
if(HM10.available())
{
recv_str[i] = char(HM10.read());
i++;
break;
}
time++;
if(time > (timeout / 50)) return -1;
}
//read other characters from uart buffer to string
while(HM10.available() && (i < 100))
{
recv_str[i] = char(HM10.read());
i++;
}
#if NLCR
recv_str[i-2] = '\0'; //discard two character \n\r
#else
recv_str[i] = '\0';
#endif
return 0;
}