Control de brazo de un i-sobot, con potenciometros

hola, estoy haciendo un programa para controlar el brazo de un robot i-sobot, el brazo tiene tres motores, uso tres potenciómetros para indicar el angulo, la comunicación que usa el robot es un protocolo que consta de un byte de inicio, 5 bytes de ángulo, uno de checksum y uno de cierre, para el caso del brazo solo se usan 3 bytes de ángulo y los demás se quedan con un valor de 128, hice el programa y puedo controlar la posición de 2 articulaciones, cualquiera de las tres, pero solo 2, el problema es cuando intento agregar el tercer potenciómetro el robot se congela y no se mueve, no se si es por como envio los datos al robot, o es otro problema. :frowning:

#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3

SoftwareSerial mySerial(rxPin, txPin);

int J[5];
int cks = 0;
void joints();
byte data[8];

void setup()
{
  Serial.begin(9600);
  mySerial.begin(2400);
  
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
}

void loop()
{
  
  J[0] = 128 + map(analogRead(A0), 0, 1023, -128, 92);
  J[1] = 128 + map(analogRead(A1), 0, 1023, -128, 92);
  J[2] = 128 + map(analogRead(A2), 0, 1023, -128, 92);

joints(J[0], J[1], J[2], 128, 128, 0, 0);
}

void joints(int D1, int D2, int D3, int D4, int D5, int s0, int s1) {
  
  if (s0 == 0 && s1 == 0) {D4 = 128; D5 = 128;}
  if (s0 == 0 && s1 == 1) {D5 = 128;}

  cks = (260 + D1 + D2 + D3 + D4 + D5) % 255;
  data[0]=5;
  data[1]=D1;
  data[2]=D2;
  data[3]=D3;
  data[4]=D4;
  data[5]=D5;
  data[6]=cks;
  data[7]=255;
  
  mySerial.write(data,8);

}

Me parece que la secuencia de datos no es la correcta (コラム: タカラトミー「Omnibot 17μ i-SOBOT」分解・解析レポート)

A parecer la trama es así

Encabezado (255) - 1 byte
Bytes de datos (5) - 1 byte
Ang servo1 - 1 byte
Ang servo2 - 1 byte
Ang servo3 - 1 byte
Ang servo4 - 1 byte
Ang servo5 - 1 byte
CheckSum - 1 byte

Prueba, no pierdes más que unos minutos.

muchas gracias, si funciono, era la secuencia de datos, llevaba toda la semana con el problema. :slight_smile:

1 Like