Recientemente tuve que buscar por la Red una solución al siguiente caso práctico:
Proyecto: Robot Scara.
Uso de un mando remoto con arduíno Nano, con conexión por SoftwareSerial de un dispositivo BT HM-19 configurado como master preparado para conectarse a su esclavo situado en el puerto Serial1 de un arduino Mega ligado a un CNC shield V3 del que se alimenta el brazo robótico.
Para la aquisición de conocimiento práctico del funcionamiento de mi robot, antes del uso del software Marlín o Grbl, voy a usar la librería AccelStepper, y estudiar los movimientos de cuatro ejes y un servo. Para ello necesito enviar desde el mando remoto cinco instrucciones siultáneas con solo pulsar un botón de forma que el arduino Mega las reciba y las procese de modo que le llegue la orden requerida a los motores y al servo.
La solución se basa en crear una cadena de Strings separadas por comas (.) que se transmitira desde el control remoto ,mientras que en el otro lado crear un array[] proporcional donde cada elemento se asocie consecutivamente a los elementos de la cadena recibida.
---------- //declaración de variables que vamos a enviar, cada uno representante
de los valores que van a hacer moverse a los motores y al servo ademas de otrainstrucción que se requiera
.......
SoftwareSerial Bt(2,3);
int x,y,z,phi;
int g=45;
int h=0;
String data;
void loop(){
data=
String(x)+","+String(y)+","+String(phi)+","+String(z)+","+String(g)+","+String(h));
if (pulsador){Bt.println(data);delay(100);}
.............
}
//RECEPCION POR PUERTO SERIAL1
int g,x,y,phi, z;
int data[6];
string content = "";
void setup() {
Serial1.begin(115200);
......
void loop() {
if (Serial1.available()) {
content = Serial1.readString(); // Recepción puerto Serial1
// Extract the data from the string and put into separate integer variables (data[] array)
for (int i = 0; i < 7; i++) {
int index = content.indexOf(","); // locate the first ","
data[i] = atol(content.substring(0, index).c_str()); //Extract the number from start to the ","
content = content.substring(index + 1); }//Remove the number from the string
/* // representación de la asignación de variables recibidas con los elementos del array
data[0] - x
data[1] - y
data[2] - phi
data[3] - z
data[4] - g
data[5] - Homing // corresponde al valor de la variable " h" recibida
*/
}
Ejemplo de monitorización de la recepción de una cadena de variables separadas por comas.
Observemos como va disminuyento la información recibida hasta el último elemento por la acción :
…………………. content = content.substring(index + 1); }//Remove the number from the string

Enviar una cadena de caracteres y variables:
Ampliando la visión general en este tema veamos una simulación de gcode con la funcion millis)= como variable.
Creamos la variable String data , agrupando en su interior () los caracteres que se concatenarán con las variables.
unsigned long x;
unsigned long y;
String data;
void setup() {
Serial.begin(115200);
// put your setup code here, to run once:
}
void loop() {
x=millis()/1000;
y=millis()/500;
data=("G91 X"+String(x)+ " "+"Y"+String(y));
Serial.println(data);delay(1000);
}
Bueno el tutorial
Bueno el tutorial
Gracias por tu comentario.