Most ESC's are driven using a PWM servo signal
This code is the bare minimum for servo's control
As there is no feed back from Arduino to smartphone, DO1 (Arduino TX) is not used,
so you still can display debug info's on the serial monitor
#define VERSION "\n\nAndro_Pan&Tilt V3.6 - @kas2014\n** servo's demo for V5.x App **"
// Controls two servo motors
// V3.6: Android BT Commander V5.X compatible, no button data management
// V3.0: Android BT Commander V3.X compatible, no button data management
// V2.5 can receive both Byte & Integer data
// V2.0: removed SoftwareSerial
// Android BT Commander settings:
// Options/Options for advanced users/Data Range >>> -100 to +100
// Options/Options for advanced users/Refresh interval >>> 50ms
// Arduino pin #0 to TX BlueTooth module
// BT TX to be disconnected from D0 during sketch upload
#include <Servo.h>
boolean DEBUG = true;
#define pinServo_X 9 // << ServoX pin
#define pinServo_Y 10 // << ServoY pin
#define STX 0x02
#define ETX 0x03
#define MIN_Y 0 //45 // vertical move limitation,
#define MAX_Y 180 // adjust to needs
#define ZERO_Y -1 //60 // vertical zero offset
byte cmd[8] = {0, 0, 0, 0, 0, 0, 0, 0};
Servo myservoX; // create servo objects
Servo myservoY;
void setup() {
Serial.begin(57600);
myservoX.attach(pinServo_X);
myservoY.attach(pinServo_Y);
if(DEBUG) Serial.println(VERSION);
}
void loop() {
if(Serial.available()) { // data received from smartphone
delay(2);
cmd[0] = Serial.read();
if(cmd[0] == STX) {
int i=1;
while(Serial.available()) {
delay(1);
cmd[i] = Serial.read();
if(cmd[i]>127 || i>7) break; // Communication error
if((cmd[i]==ETX) && (i==2 || i==7)) break; // Button or Joystick data
i++;
}
if(i==7) setServoPosition(cmd);
}
}
}
void setServoPosition(byte data[8]) {
int joyX = (data[1]-48)*100 + (data[2]-48)*10 + (data[3]-48); // obtain the Int from the ASCII representation
int joyY = (data[4]-48)*100 + (data[5]-48)*10 + (data[6]-48);
joyX = joyX - 200; // Offset to avoid
joyY = joyY - 200; // transmitting negative numbers
if(joyX<-100 || joyX>100 || joyY<-100 || joyY>100) return; // communication error
joyX = map(joyX, -100, 100, 180, 0); // << adjust to change motor direction
joyY = map(joyY, -100, 100, 0, 180); // <<
joyY+=ZERO_Y;
joyY = constrain(joyY, MIN_Y, MAX_Y);
myservoX.write(joyX);
myservoY.write(joyY);
if(DEBUG) {Serial.print(joyX); Serial.print(", "); Serial.println(joyY);}
}
Don't forget to disconnect BT TX from D0 during sketch upload
** EDIT: code was fixed as per below