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.
#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);
}