Paso 12: Enviar el mensaje de Serial
Ahora que tenemos el ComboBox con los puertos serie disponibles será el siguiente paso para obtener nuestro programa hablando con el Tinyduino agregar una función que envía un mensaje de la serie a lo TinyDuino y actualiza las velocidades de dos motores. Nuestro protocolo serial es expandible pero por ahora sólo incluirá tres bytes. El primero de ellos es un paquete de información sobre el tipo de mensaje que estamos enviando.
Primero lo primero, define una función vacía llamada "UpdateMotors()" e incluyen un byte constante llamado "messageType" como esta:
void UpdateMotors() { //message type constant const byte messageType = 2; //read the sliders //motor 1 byte motorOneSpeed = (byte)tbMotorOne.Value; //motor 2 byte motorTwoSpeed = (byte)tbMotorTwo.Value; }
Cuando define como este visual studio convertirá al número int 2 implícitamente a un byte.
A continuación leeremos los valores de los deslizadores y asignar a sus variables byte:
void UpdateMotors() { //message type constant const byte messageType = 2; //read the sliders //motor 1 byte motorOneSpeed = (byte)tbMotorOne.Value; //motor 2 byte motorTwoSpeed = (byte)tbMotorTwo.Value; //create and fill a array of bytes as our message byte[] serialMessage = {messageType, motorOneSpeed, motorTwoSpeed}; //send Message serial.Write(serialMessage, 0, serialMessage.Length); }
Cuando define como esta sin embargo Visual Studio requiere un reparto entre el valor de retorno de tbMotor.Value y un byte.
Ahora con los tres bytes creados llenar una matriz de bytes como un buffer para enviar nuestro mensaje y por supuesto, enviar el mensaje en sí:
private void OnComChange(object sender, EventArgs e) { if (serial != null && serial.IsOpen) { serial.Close(); } Port port = (Port)cbComPortChooser.SelectedItem; serial = new SerialPort(port.Name); serial.BaudRate = 9600; if (!serial.IsOpen) { serial.Open(); } }
Aviso de serie. Write(); toma tres argumentos: el mensaje en sí como una matriz de bytes y un int que representa el primer byte a enviar un segundo int como el tamaño de todo el mensaje.