Hola,
soy nuevo en este foro, (y en los trapicheos con mi nuevo Arduino Uno...), tengo conocimiento de lenguaje de programación y de electrónica, sin embargo me quedé bloqueado con un problema tonto ya al principio de mis experimentos.
Me explico: estoy intentando controlar dos motores paso a paso para que me muevan una plataforma en un plano bidimensional (X,Y).
Hasta aquí ningún problema, ya tengo la electrónica de control, y durante la pruebas, conseguí controlar los dos motores con dos potenciómetros sin problema.
Ahora querría controlar la posición enviando desde puerto serial las coordenadas en formato (XXX,YYY) para que los dos motores llegaran a la coordenada enviada, y aquí empieza mi problema: creo 2 buffers para las coordenadas, cada uno de 3 Bytes pero al intentar llenarlos me repite el ciclo y pierde los datos... Mejor os pongo el código de prueba:
#include <stdlib.h>
char X_buffer[3];
char Y_buffer[3];
int received;
int i=0;
int j=0;
int X_pos=0;
int Y_pos=0;
void setup()
{
Serial.begin(9600);
received = 0;
X_buffer[received] = '\0';
Y_buffer[received] = '\0';
Serial.println("setup");
}
void loop()
{
if (Serial.available())
{
delay(100);
// Get x cord
for(i=0; i<3; i++)
{
X_buffer[i] = Serial.read();
Serial.print("El caracter ");
Serial.print(i+1);
Serial.print(" de X es ");
Serial.println(X_buffer[i]);
}
X_pos = atoi(X_buffer);
Serial.print("X_buffer =");
Serial.println(X_buffer);
Serial.print("X_pos =");
Serial.println(X_pos,DEC);
// Get y cord
for(j=0; j<3; j++)
{
Y_buffer[j] = Serial.read();
Serial.print("El caracter ");
Serial.print(j+1);
Serial.print(" de Y es ");
Serial.println(Y_buffer[j]);
}
Y_pos = atoi(Y_buffer);
Serial.print("Y_buffer =");
Serial.println(Y_buffer);
Serial.print("Y_pos =");
Serial.println(Y_pos,DEC);
Serial.println("fin");
}
//Serial.print("X_buffer =");
//Serial.println(X_buffer);
//Serial.print("X_pos =");
//Serial.println(X_pos,DEC);
received = 0;
//Serial.println("Espero 1000");
delay(1000);
}
y este es el resultado de insertar 123456 como coordenadas (equivaldría a (123,456)) desde el Serial Monitor:
setup
El caracter 1 de X es 1
El caracter 2 de X es 2
El caracter 3 de X es 3
X_buffer =123
X_pos =123
El caracter 1 de Y es 4
El caracter 2 de Y es 5
El caracter 3 de Y es 6
Y_buffer =456
Y_pos =456
fin
El caracter 1 de X es
El caracter 2 de X es ÿ
El caracter 3 de X es ÿ
X_buffer =
ÿÿ456
X_pos =0
El caracter 1 de Y es ÿ
El caracter 2 de Y es ÿ
El caracter 3 de Y es ÿ
Y_buffer =ÿÿÿ
Y_pos =0
fin
Como podéis ver, la primera parte funciona de maravilla!! Lo que no entiendo (y lo que no consigo solucionar), es porqué sigue después del primer fin... Parece que se me cuele algo por el medio...
Seguro que es una chorrada, pero espero que alguien me pueda echar un cable.
Un saludo