Need Help Controlling ESC with Arduino

I got an Esc bought from hobbyking.

Here is the

I want to control it with arduino to drive brushless motor. [ch304] read some topics that say i can drive it with servo library but i couldnt make it work somehow. It has a set key feature also. can you help me on making start code. Do i have to press to set button to arm ESC?sorry im a bit new to this ESC thing. any help would be appreciated…

The below from the manual looks to be what you should attempt to do. I'd have the arduino send 90 deg or 1500us signal to the ESC, connect the battery pack to the ESC, and then listen for the beeps. You probably need to follow the manual to set up the throttle range prior to the normal startup.

Normal Startup Procedure Move throttle stick to the neutral position [ch8594] Switch on the transmitter [ch8594] Connect battery pack to ESC [ch8594] System detects the neutral throttle signal, makes a long “beep-” sound [ch8594] System detects battery voltage and makes several short “beep-” sounds, which denotes the number of battery cells [ch8594] when self-test is finished [ch8594] “ F 1 2 3 ” tone should be emitted [ch8594] ready for start. Setting Throttle Range (Throttle range should be setup when a new transmitter is being used)

i got that startup part. used the servo library and armed the ESC with sending minimum pulse value at startup for 2 second. i heard the

“ F 1 2 3 ” sound. But after that i dont know how to set throttle range, what paramaters i will use in code, can you guide me on this please?

Per the below from the manual, you would send the ESC a high servo position value (using degree or microsecond positions) when the "top point of forward" is required, and a low servo position value when the "top point of backward" is required.

Setting Throttle Range (Throttle range should be setup when a new transmitter is being used)

QUIK series ( “ SET ” KEY is used ) Switch off the ESC [ch8594] Switch on the transmitter [ch8594] Press and hold the “ SET ” KEY [ch8594] Switch on the ESC [ch8594] Push the throttle stick to the top point of forward within two seconds [ch8594] Wait for one second [ch8594] System detects the Max throttle signal, and makes two “beep-” sounds, which denotes that Max throttle has been confirmed and saved [ch8594] Pull the throttle stick to the top point of backward [ch8594] System detects the Min throttle signal, makes two “beep-” sounds, which denotes that Min throttle has been confirmed and saved [ch8594] Release the “ SET ” KEY [ch8594] Setting is finished.

zoomkat thanks for your help i saw that on manual.but I want to control it with arduino and trying to write code for it.people say i can do it with servo library but how im going to make initial setting to ESC from arduino IDE. if u can help me on this i will appreciate.

Below is some servo test code. You should be able to use the serial monitor to send a high servo position like 2000 when needed, and then a low value like 1000 when needed. You will need to do the testing with the ESC, as I only have servos and no ESC to test.

// zoomkat 11-27-10 serial servo test
// type servo position 0 to 180 in serial monitor
// for writeMicroseconds, use a value like 1500
// for IDE 0019 and later
// Powering a servo from the arduino usually DOES NOT WORK.

String readstring; //string to be captured from serial port
#include <Servo.h> 
Servo myservo;  // create servo object to control a servo 

void setup() {
  myservo.attach(7);  //the pin for the servo control 
  Serial.println("servo-test-21"); // so I can keep track of what is loaded

void loop() {

  while (Serial.available()) {
    if (Serial.available() >0) {
      char c =;  //gets one byte from serial buffer
      readstring += c; //makes readstring from the single bytes

  if (readstring.length() >0) {
    Serial.println(readstring);  //so you can see the captured string 
    char carray[readstring.length() + 1]; //determine size of the array
    readstring.toCharArray(carray, sizeof(carray)); //put readStringinto an array
    int n = atoi(carray); //convert the array into an Integer 
    myservo.writeMicroseconds(n); // for microseconds
    //myservo.write(n); //for degees 0-180