Enviar 3 datos por serial a arduino desconcatenar y activar 3 pwm [Solucionado]

Hola a todos, este es mi primer post en este gran foro que me ha servido de mucha ayuda para mis pequeños programas en ardino. El problema que tengo ("Que crei que seria fácil de solucinar") es que desde matlab envio 3 datos en una variable

close all;clc;
com='COM9';
%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')

y que lo pueda recibir en arduino y esos valores asignarlos a 3 pwm que controlaran 3 motores, mi codigo de arduino es el siguiente:

byte dato;
void setup(){
  
  // initialize the serial communications:
  Serial.begin(9600);
  pinMode(13, OUTPUT);      // establece el pin digital como salida
}

void loop()
{
  
     if(dato==1){
      digitalWrite(13, HIGH);   // enciende el LED
      delay(1000);                  // espera por un segundo
      digitalWrite(13, LOW);    // apaga el LED
      delay(1000);
      }else if(dato==2){
      digitalWrite(13, HIGH);   // enciende el LED
      delay(2000);                  // espera por un segundo
      digitalWrite(13, LOW);    // apaga el LED
      delay(2000);
      }else{
      digitalWrite(13, HIGH);   // enciende el LED
      delay(400);                  // espera por un segundo
      digitalWrite(13, LOW);    // apaga el LED
      delay(400);
    }
    
  }


  
  void serialEvent()
  {
  if (Serial.available()) {
    dato=Serial.read();
   // Serial.println(dato);
  }

  }

Solo lo tengo con un solo dato y funciona correctamente, el problema es como recibir los 3 y asignarlos a 3 variables para activar los 3 pwm. Estare muy agradecido al que pueda ayudarme o darme información de como realizarlo. De antemano saludos :slight_smile: :slight_smile: :slight_smile:

:~ :~ :~ :~ Creo que no me eh explicado bien je je je del puerto serial tengo algo algo asi

190,128,80

y este solamente deseo almacenarlo en 3 variables
var1=190;
var2=128;
var3=80;
pero hacer esa desconcatenación es la que no puedo hacer :disappointed_relieved: :disappointed_relieved: =( =(

Seguire Intentando haber si logro pillar la solución. Saludos :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue:

/*
  Reading a serial ASCII-encoded string.
 
 This sketch demonstrates the Serial parseInt() function.
 It looks for an ASCII string of comma-separated values.
 It parses them into ints, and uses those to fade an RGB LED.
 
 Circuit: Common-anode RGB LED wired like so:
 * Red cathode: digital pin 3
 * Green cathode: digital pin 5
 * blue cathode: digital pin 6
 * anode: +5V
 
 created 13 Apr 2012
 by Tom Igoe
 
 This example code is in the public domain.
 */

// pins for the LEDs:
const int redPin = 13;
const int greenPin = 5;
const int bluePin = 6;

void setup() {
  // initialize serial:
  Serial.begin(9600);
  // make the pins outputs:
  pinMode(redPin, OUTPUT); 
  pinMode(greenPin, OUTPUT); 
  pinMode(bluePin, OUTPUT); 

}

void loop() {
  // if there's any serial available, read it:
  while (Serial.available() > 0) {

    // look for the next valid integer in the incoming serial stream:
    int red = Serial.parseInt(); 
    // do it again:
    int green = Serial.parseInt(); 
    // do it again:
    int blue = Serial.parseInt(); 

    // look for the newline. That's the end of your
    // sentence:
    if (Serial.read() == '\n') {
      // constrain the values to 0 - 255 and invert
      // if you're using a common-cathode LED, just use "constrain(color, 0, 255);"
      red = 255 - constrain(red, 0, 255);
      green = 255 - constrain(green, 0, 255);
      blue = 255 - constrain(blue, 0, 255);

      // fade the red, green, and blue legs of the LED: 
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);

      // print the three numbers in one string as hexadecimal:
      Serial.print(red, HEX);
      Serial.print(green, HEX);
      Serial.println(blue, HEX);
    }
  }
}

Encontre este codigo en la pagina de arduino, y es justamente lo que necesito sin embargo no logro que funcione correctamente. Saludos...!!!

Hola. Precisamente estaba escribiendo lo siguiente:
Prueba con Serial.parseInt.:

if (Serial.available()){
var1=Serial.parseInt();
var2=Serial.parseInt();
var3=Serial.parseInt();
}

Si los datos llegan de la forma que dices ("190,128,80"), debería funcionar.

Hola :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: thanks por la info probare y ojala y funcione, de antemano muchas gracias :wink: :wink: :wink: :wink:

Efectivamente amigo noter :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: Creo que me estaba liando un poco por no conocer la mayoria de instrucciones de arduino, de antemano gracias y tema solucionado...!!! Saludos ]:slight_smile: ]:slight_smile: ]:slight_smile: ]:slight_smile: :* :* 8) 8) je je je

De nada, Jonath4n. Edita tu hilo y agrega “[SOLUCIONADO]” en el asunto para que pueda servir de ayuda a otros con el mismo problema.
Saludos.

Jonath4an:
Efectivamente amigo noter :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: Creo que me estaba liando un poco por no conocer la mayoria de instrucciones de arduino, de antemano gracias y tema solucionado...!!! Saludos ]:slight_smile: ]:slight_smile: ]:slight_smile: ]:slight_smile: :* :* 8) 8) je je je

Jonath4an, me podría por favor indicar como logro el funcionamiento..

Se lo agradeceria..

No revivas hilos soucionados o sin solución.
crea un hilo nuevo y haz tu consulta.
Hilo cerrado, lee las normas del foro