Hola a todos, estoy intentando mandar varios datos por puerto serie desde matlab hasta arduino para luego guardarlos en varias variables que controlan diferentes servos. Es decir, envio [180,230,50] y lo quiero guardar en una variable distinta cada valor.
Este post está muuuuy relacionado con este otro, vamos, es lo mismo jeje Enviar 3 datos por serial a arduino desconcatenar y activar 3 pwm [Solucionado] - Software - Arduino Forum. De hecho, he intentado ponerme en contacto con la persona que lo planteó pero no he obtenido respuesta.
El envio de una sola variable desde Matlab para el control de un servo me funciona perfectamente. Y, siguiendo la información que aparece en el post de arriba, con Serial.parseInt(); sólo consigo que funcione si los datos se los introduzco directamente desde el monitor de la IDE de arduino.
El código de Matlab es el de ese hilo:
close all;clc;
com='COM4';
%Inicializo el puerto serial que utilizaré
delete(instrfind({'Port'},{com}));
puerto_serial=serial(com);
puerto_serial.BaudRate=9600;
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');
%Abro el puerto serial
fopen(puerto_serial);
pause(0.2);
dato=[180 230 50]
%unicodestr = native2unicode(i); % Convierte el entreo i (0 a 255) a codigo ASCII
fwrite(puerto_serial,dato,'uint8'); % se envia un dato de tipo entero sin signo de 8 bits,
% pause(2);
fclose(puerto_serial);
delete(puerto_serial)
clear puerto_serial
disp('STOP')
El de arduino, muy simple, sólo para ver que funciona:
int red, green, blue;
void setup(){
Serial.begin(9600);
}
void loop(){
while (Serial.available() > 0) {
// look for the next valid integer in the incoming serial stream:
red = Serial.parseInt();
// do it again:
green = Serial.parseInt();
// do it again:
blue = Serial.parseInt();
}
delay(2000);
Serial.print(red, HEX);
Serial.print(green, HEX);
Serial.println(blue, HEX);
}
El problema debe estar en cómo envía Matlab los datos, pero por más que busco y pruebo, no consigo llegar a ninguna solución... Espero que alguien pueda ayudarme jeje
Muchas gracias de antemano.