I added an Arduino to control a Roomba 615 (similar to iRobot Create 2). The Arduino is communicating with Roomba through the Mini-DIN connector with the Open Interface.

While Roomba is docked and in Passive mode, I would like to know when the battery is fully charged in order to know when Roomba is ready to clean/travel. I am currently watching the Charging State (ID 21 in Open Interface, p.28).

  1. Could you explain to me the meaning of each state?
  2. Which state corresponds to « the battery is fully charged »?

The 6 states are:

  • 0 Not charging
  • 1 Reconditioning Charging
  • 2 Full Charging
  • 3 Trickle Charging
  • 4 Waiting
  • 5 Charging Fault Condition

3 Answers 3


maybe you want to look at Packet ID 25 also on page 28 of the documentation provided.

Battery Charge Packet ID: 25 Data Bytes: 2, unsigned

The current charge of Roomba’s battery in milliamp-hours (mAh). The charge value decreases as the battery is depleted during running and increases when the battery is charged.

Range: 0 – 65535 mAh

I guess if you request this packet and make a comparison for the value you can set a threshold to consider that the battery is fully charged, and the robot should be ready to go.

I would not set this comparison to be equal to 65535, as this value might not be attained as the battery starts to wear. Maybe it will be reasonable to compare if this value is equal or above 58981 (which is roughly 90% of the maximum value).


When the charger detects that the battery is "fully charged", it switches to "Trickle Charging" to maintain the battery at "fully charged".

  • $\begingroup$ Thanks. 1. Do you know when the charger is in the state waiting? 2. Is it possible to be in state "Not charging" with a battery fully charged? $\endgroup$
    – epflouis
    Commented Jul 29, 2019 at 19:11
  • $\begingroup$ IDK exactly. Waiting may be "Starting up or updating software (please wait)", and possibly "Sometimes it can take up to one minute for the robot to wake up if it has been deeply discharged." I suggest that your bot keep a "charging_status_log" with time status changed and the new value. Post back when you know exactly when waiting status is posted. (My bot also announces these changes with TTS so I can know at the time.. again my bot is not an icreate/iroomba.) $\endgroup$ Commented Jul 31, 2019 at 0:09
  • 0 Not charging -- The robot is not on the dock
  • 1 Reconditioning Charging -- This is a slow trickle meant for a battery that has been left uncharged for so long that its voltage has become extremely low.
  • 2 Full Charging -- Normal charging
  • 3 Trickle Charging -- A top-up mode that keeps a fully charged battery fully charged.
  • 4 Waiting -- Generally this is when the battery's temperature is too high to apply current. For example, after a full charge, the battery is pretty hot, so we wait a little for it to cool off before trickling. Very hot environments (eg, Arizona in the summer) can also trigger this state.
  • 5 Charging Fault Condition -- Any problems with charging will land you here

For the purpose of waiting for Roomba to be ready to start a new mission, I would look for Trickle charging.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.