Ricerca…


Sintassi

  • Serial.begin(speed) // Apre la porta seriale sulla velocità di trasmissione data
  • Serial.begin(speed, config)
  • Serial[1-3].begin(speed) // solo Arduino Mega! Quando si scrive 1-3 significa che è possibile scegliere tra i numeri da 1 a 3 quando si sceglie la porta seriale.
  • Serial[1-3].begin(speed, config) // Solo Arduino Mega! Quando si scrive 1-3 significa che è possibile scegliere tra i numeri da 1 a 3 quando si sceglie la porta seriale.
  • Serial.peek() // Legge il prossimo byte di input senza rimuoverlo dal buffer
  • Serial.available() // Ottiene il numero di byte nel buffer
  • Serial.print(text) // Scrive il testo nella porta seriale
  • Serial.println(text) // Uguale a Serial.print() ma con una nuova riga finale

Parametri

Parametro Dettagli
Velocità La velocità della porta seriale (in genere 9600)
Testo Il testo da scrivere sulla porta seriale (qualsiasi tipo di dati)
Bit di dati Numero di bit di dati in un pacchetto (da 5 a 8), il valore predefinito è 8
Parità Opzioni di parità per il rilevamento degli errori: nessuno (predefinito), pari, dispari
Stop bit Numero di bit di stop in un pacchetto: uno (predefinito), due

Osservazioni

L'Arduino Mega ha quattro porte seriali tra le quali è possibile scegliere. Sono stati aggiunti nel modo seguente

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

La porta seriale su un Arduino può essere impostata con parametri aggiuntivi. Il parametro config imposta bit di dati, parità e bit di stop. Per esempio:

8 bit di dati, parità pari e 1 bit di stop sarebbero - SERIAL_8E1

6 bit di dati, parità dispari e 2 bit di stop sarebbero - SERIAL_6O2

7 bit di dati, nessuna parità e 1 bit di stop sarebbero - SERIAL_7N1

Semplice lettura e scrittura

Questo esempio è in ascolto di input provenienti dalla connessione seriale, quindi ripete la stessa connessione.

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);
  }
}

Filtro Base64 per dati di input seriali

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
    }
}

Gestione dei comandi su seriale

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 
}

Comunicazione seriale con Python

Se hai un Arduino collegato a un computer o un Raspberry Pi e vuoi inviare dati da Arduino al PC, puoi fare quanto segue:

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);
}

Pitone:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow