Buscar..


Sintaxis

  • Serial.begin(speed) // Abre el puerto serie en la velocidad de transmisión dada
  • Serial.begin(speed, config)
  • Serial[1-3].begin(speed) // Arduino Mega solamente! Al escribir 1-3 significa que puede elegir entre los números 1 a 3 al elegir el puerto serie.
  • Serial[1-3].begin(speed, config) // ¡ Arduino Mega solamente! Al escribir 1-3 significa que puede elegir entre los números 1 a 3 al elegir el puerto serie.
  • Serial.peek() // Lee el siguiente byte de entrada sin eliminarlo del búfer
  • Serial.available() // Obtiene el número de bytes en el búfer
  • Serial.print(text) // Escribe texto en el puerto serie
  • Serial.println(text) // Igual que Serial.print() pero con una nueva línea final

Parámetros

Parámetro Detalles
Velocidad La tasa del puerto serie (generalmente 9600)
Texto El texto para escribir en el puerto serie (cualquier tipo de datos)
Bits de datos Número de bits de datos en un paquete (de 5 a 8), el valor predeterminado es 8
Paridad Opciones de paridad para la detección de errores: ninguno (predeterminado), par, impar
Bits de parada Número de bits de parada en un paquete: uno (predeterminado), dos

Observaciones

El Arduino Mega tiene cuatro puertos serie que se pueden elegir. Se accede de la siguiente manera.

  Serial.begin(9600);
  Serial1.begin(38400);
  Serial2.begin(19200);
  Serial3.begin(4800);

El puerto serie en un Arduino se puede configurar con parámetros adicionales. El parámetro config establece bits de datos, paridad y bits de parada. Por ejemplo:

8 bits de datos, paridad par y 1 bit de parada serían - SERIAL_8E1

6 bits de datos, paridad impar y 2 bits de parada serían - SERIAL_6O2

7 bits de datos, sin paridad y 1 bit de parada serían - SERIAL_7N1

Simple leer y escribir

Este ejemplo escucha la entrada que llega a través de la conexión en serie y luego la repite nuevamente en la misma conexión.

byte incomingBytes;

void setup() {                
  Serial.begin(9600); // Opens serial port, sets data rate to 9600 bps.
}

void loop() {
  // Send data only when you receive data.
  if (Serial.available() > 0) {
    // Read the incoming bytes.
    incomingBytes = Serial.read();

    // Echo the data.
    Serial.println(incomingBytes);
  }
}

Filtrado Base64 para datos de entrada serie

String base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

void setup() {

    Serial.begin(9600); // Turn the serial protocol ON
    Serial.println("Start Typing");
}

void loop() {

    if (Serial.available() > 0) { // Check if data has been sent from the user
        char c = Serial.read();   // Gets one byte/Character from serial buffer
        int result = base64.indexOf(c); // Base64 filtering
        if (result>=0)
            Serial.print(c); // Only print Base64 string
    }
}

Manejo de comandos sobre serie

byte incoming;
String inBuffer;

void setup() {
    Serial.begin(9600); // or whatever baud rate you would like
}

void loop(){
    // setup as non-blocking code
    if(Serial.available() > 0) {
        incoming = Serial.read();
        
        if(incoming == '\n') {  // newline, carriage return, both, or custom character
        
            // handle the incoming command
            handle_command();

            // Clear the string for the next command
            inBuffer = "";
        } else{
            // add the character to the buffer
            inBuffer += incoming;
        }
    }

    // since code is non-blocking, execute something else . . . .
}

void handle_command() {
    // expect something like 'pin 3 high'
    String command = inBuffer.substring(0, inBuffer.indexOf(' '));
    String parameters = inBuffer.substring(inBuffer.indexOf(' ') + 1);
    
    if(command.equalsIgnoreCase('pin')){
        // parse the rest of the information
        int pin = parameters.substring("0, parameters.indexOf(' ')).toInt();
        String state = parameters.substring(parameters.indexOf(' ') + 1);

        if(state.equalsIgnoreCase('high')){
            digitalWrite(pin, HIGH);
        }else if(state.equalsIgnoreCase('low)){
            digitalWrite(pin, LOW);
        }else{
            Serial.println("did not compute");
        }
    } // add code for more commands 
}

Comunicación serial con Python

Si tiene un Arduino conectado a una computadora o una Raspberry Pi y desea enviar datos desde el Arduino a la PC, puede hacer lo siguiente:

Arduino:

void setup() {
  // Opens serial port, sets data rate to 9600 bps:
  Serial.begin(9600);
}

void loop() {
  // Sends a line over serial:
  Serial.println("Hello, Python!");
  delay(1000);
}

Pitón:

import serial


ser = serial.Serial('/dev/ttyACM0', 9600)  # Start serial communication
while True:
    data = ser.readline()  # Wait for line from Arduino and read it
    print("Received: '{}'".format(data))  # Print the line to the console


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow