ReadBuffers(address,depth1,depth2) depth1 depth2 value always 0

General discussion of using Roboclaw motor controllers
Post Reply
gannicus
Posts: 28
Joined: Sat Aug 06, 2016 4:33 am
ReadBuffers(address,depth1,depth2) depth1 depth2 value always 0

Post by gannicus »

Hi,

I'm having trouble with Arduino sample PacketSerialEncoderSpeedDistance, the depth1 and depth2 values are always 0, but I can see the motor actually finished the command and stopped spinning.

If I connect the controller to ion studio via USB I can see the encoder and speed reading, what did I miss?
Image
Thanks.

Code: Select all

#include <SoftwareSerial.h>
#include "RoboClaw.h"

//See limitations of Arduino SoftwareSerial
SoftwareSerial serial(10, 11);
RoboClaw roboclaw(&serial, 10000);

#define address 0x80

//Velocity PID coefficients
#define Kp 1.0
#define Ki 0.5
#define Kd 0.25
#define qpps 538000

void setup() {
  //Open Serial and roboclaw serial ports
  Serial.begin(57600);
  roboclaw.begin(38400);

  //Set PID Coefficients
  roboclaw.SetM1VelocityPID(address, Kd, Kp, Ki, qpps);
  roboclaw.SetM2VelocityPID(address, Kd, Kp, Ki, qpps);
}

void displayspeed(void)
{
  uint8_t status1, status2, status3, status4;
  bool valid1, valid2, valid3, valid4;

  int32_t enc1 = roboclaw.ReadEncM1(address, &status1, &valid1);
  int32_t enc2 = roboclaw.ReadEncM2(address, &status2, &valid2);
  int32_t speed1 = roboclaw.ReadSpeedM1(address, &status3, &valid3);
  int32_t speed2 = roboclaw.ReadSpeedM2(address, &status4, &valid4);

  Serial.print("Encoder1:");
  if (valid1) {
    Serial.print(enc1, DEC);
    Serial.print(" ");
    Serial.print(status1, HEX);
    Serial.print(" ");
  }
  else {
    Serial.print("failed ");
  }
  Serial.print("Encoder2:");
  if (valid2) {
    Serial.print(enc2, DEC);
    Serial.print(" ");
    Serial.print(status2, HEX);
    Serial.print(" ");
  }
  else {
    Serial.print("failed ");
  }
  Serial.print("Speed1:");
  if (valid3) {
    Serial.print(speed1, DEC);
    Serial.print(" ");
  }
  else {
    Serial.print("failed ");
  }
  Serial.print("Speed2:");
  if (valid4) {
    Serial.print(speed2, DEC);
    Serial.print(" ");
  }
  else {
    Serial.print("failed ");
  }
  Serial.println();
}

void loop() {
  uint8_t depth1,depth2;
  
  roboclaw.SpeedDistanceM1(address,50000,236500,1);
  roboclaw.SpeedDistanceM2(address,50000,236500,1);
  do{
    displayspeed();
    roboclaw.ReadBuffers(address,depth1,depth2);
    Serial.println(depth1,HEX);
  }while(depth1!=0x80 && depth2!=0x80);	//Loop until distance command has completed
  
  delay(1000);
}
here is the output
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
Encoder1:failed Encoder2:failed Speed1:failed Speed2:failed
0
User avatar
Basicmicro Support
Posts: 1594
Joined: Thu Feb 26, 2015 9:45 pm
Re: ReadBuffers(address,depth1,depth2) depth1 depth2 value always 0

Post by Basicmicro Support »

WHat you have is no data being read back. You see the "failed Encoder" printouts. That means the readenc commands are not working which means your ReadBuffers command is probably also not working. You should check the return value from the ReadBuffers command. If will return false if that command is also not working. I would suspect your baudrate settings are wrong or you have wired the pins from the Arduino to the Roboclaw wrong.
gannicus
Posts: 28
Joined: Sat Aug 06, 2016 4:33 am
Re: ReadBuffers(address,depth1,depth2) depth1 depth2 value always 0

Post by gannicus »

Thanks for your reply, ReadBuffers command returns false. Baudrate settings I'm using for the controller is 38400, roboclaw.begin(38400); the pin connection from Arduino to controller is : tx to s1, rx to s2. I only connected s1 and s2 to Arduino, do I need to connect 5v and ground from Arduino to controller LB IN?

-------------------
Ok I connected Arduino 5v and ground to Controller LB IN the command seems working now. Is that correct to connect Arduino 5v and ground to Controller LB IN ?

Thanks.
User avatar
Basicmicro Support
Posts: 1594
Joined: Thu Feb 26, 2015 9:45 pm
Re: ReadBuffers(address,depth1,depth2) depth1 depth2 value always 0

Post by Basicmicro Support »

You need S1, S2 and GND. You do NOAT need LB+ to 5v ever. If you want to power the Arduino from the Roboclaw you do need 5v from Roboclaw to 5v on the Arduino. You also need main power to the Roboclaw.

Note LB+ requires 6v minimum if you also want to provide a seperate logic power input(otherwise logic power will come from the main battery terminals).

Post Reply