Hardware/Arduino

AX-12 컨트롤과 iOS 단말기와의 블루투스 통신

초인로크 2014. 4. 13. 12:53
반응형

AX-12 모터 제어하면서 제어된 후의 각도값을 블루투스통신을 통해 전송하는 소스.
iOS 단말기 상에서 모터값을 확인 할 수 있다.
아두이노 소스가 다이나믹셀 스타트랑 엔드 타이밍이 안맞으면 잘 안움직이는것 같다.
일단 임시로 아두이노 소스만 올림...


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
#include <DynamixelSerial.h>
#include <SoftwareSerial.h>
 
#define LED13 0x0D
#define BUFFERSIZE 10
int Temperature,Voltage,Position; 
int i, count, ss=0, check_sum = 0, num = 0;
int BT_num, SL_num, val = 0;
int pirstate = LOW, PIR_pin = 5;
char buf[BUFFERSIZE] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};
char textdata[11] = "0123456789";
char b_SOF = 0x01;
char b_EOF = 0x1A;
char Rec, conv[50];
String keep = "";
 
SoftwareSerial BTSerial(4, 5); // 74HC241
 
void setup(){
  
  Serial.begin(9600);
  Dynamixel.begin(1000000,2); 
  BTSerial.begin(57600);
  
  Dynamixel.move(5,512);
  delay(100);
}
 
void loop(){
  
  String val;
  keep = "";
  if (BTSerial.available()>0) {
    digitalWrite(LED13, HIGH);
    while (BTSerial.available())
    {
      Rec = BTSerial.read();
      keep.concat(Rec);
    }
  }
  val = keep;  
  
  if (val == "1") {
    digitalWrite(LED13, HIGH);
    Dynamixel.move(5,200);
  } else if (val == "2") {
    digitalWrite(LED13, HIGH);
    Dynamixel.move(5,300);
  } else if (val == "3") {
    digitalWrite(LED13, HIGH);
    Dynamixel.move(5,400);
  } else if (val == "4") {
    digitalWrite(LED13, HIGH);
    Dynamixel.move(5,500);
  } else if (val == "5") {
    digitalWrite(LED13, HIGH);
    Dynamixel.move(5,600);
  } else if (val == "6") {
    digitalWrite(LED13, HIGH);
    Dynamixel.move(5,700);
  }
  delay(500);
  
  Position = Dynamixel.readPosition(5);
  delay(500);
 
  Dynamixel.end();
 
  BTSerial.print(0x05);//Starting signal
  BTSerial.print(Position);
  BTSerial.print(0xFF);//Ending signal 
  
  digitalWrite(LED13, LOW);
  Dynamixel.begin(1000000,2);
  delay(100);
 
}


반응형