Toda placa Arduino possui ao menos uma porta serial.
Esta conexão permite a comunicação do Arduino com um computador ou outro dispositivo utilizando o padrão UART.
No Arduino Uno os pinos utilizados para comunicação serial são o 0 (RX) e 1 (TX).
A comunicação serial UART consiste em enviar dados sequenciais e em uma frequência correta.
Sempre devemos iniciar o envio de dados utilizando um bit de início e um outro bit de fim.
O Monitor Serial é uma ferramenta essencial ao criar projetos com Arduino.
Ele pode ser usado como uma ferramenta de debug, testando conceitos ou para se comunicar diretamente com a placa Arduino.
O Arduino IDE tem a ferramenta de Monitor Serial integrada ao editor.
Quando queremos usar o serial para debug ou exibir informações, podemos usar o Serial.print() ou Serial.println(), sendo que o segundo inclui quebra de linha.
Podemos usar o Serial.write() para enviar dados em formato binário
Para maiores detalhes consulte:
https://docs.arduino.cc/language-reference/en/functions/communication/serial
Simplifica como exibimos dados dinâmicos em uma String.
Para exibir valores inteiros usamos %d.
Para exibir valores float usamos o %f, ou %.4f para especificar as casas decimais.
Para exibir Strings/Textos usamos o %s.
A seguir é demonstrado como utilizar o sprintf para simplificar o código.
void setup() {
Serial.begin(9600);
}
int contador = 1;
float pi = 3.1415;
char placa[] = "Arduino";
void loop() {
// usando o print serial sem o sprintf
Serial.print("Contador: ");
Serial.print(contador);
Serial.print(", texto: ");
Serial.print(placa);
Serial.print(", PI: ");
Serial.println(pi);
// usando o print serial com o sprintf
char buffer[40];
sprintf(buffer, "Contador: %d, texto: %s, PI: %.4f", contador, placa, pi);
Serial.println(buffer);
contador++;
delay(1000);
}
Existem diferentes funções para ler dados via porta serial, que varia de acordo com o tipo de dado esperado, vamos ver algumas delas:
*Caso o valor não possa ser convertido 0 (zero) será retornado
A seguir é demonstrado como obter dados seriais de múltiplos modos.
void setup() {
// inicia a conexão serial
Serial.begin(9600);
}
void loop() {
// verifica se existe dados a serem lidos na porta serial
if (Serial.available() > 0) {
int valor = Serial.read();
//int valor = Serial.parseInt();
//float valor = Serial.parseFloat();
//String valor = Serial.readString();
// imprime o valor recebido
Serial.print("Valor recebido: ");
Serial.println(valor);
}
}
Placas Arduinos possuem os pinos TX e RX para conexão serial.
No Arduino UNO, estes pinos são os pinos 0 (RX) e 1 (TX).
RX significa receptor enquanto que TX significa transmissor.
A conexão deve ser cruzada, conectando RX com TX e TX com RX.
Neste projeto comunicaremos dois Arduinos usando conexão serial (UART).
O Arduino com o papel de transmissor terá um push button conectado a ele, e quando pressionado ele enviará um comando para o Arduino receptor que mudará o status do LED contido na placa.
Para este projeto, faça o upload dos códigos contidos nos diretórios receptor e transmissior um em cada placa Arduino, sendo o transmissor o que contém o push button conectado a ele, conforme circuito abaixo.
Para a criação deste circuito serão necessários os seguintes componentes:
Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.
Certifique-se de utilizar o código correto para o transmissor e receptor.
A seguir temos o schematics do circuito, que detalha suas conexões e fornece detalhes mais específicos do que o circuito da imagem anterior.
Uma vez criado o circuito, use os códigos fontes a seguir no Arduino IDE para fazer o upload deles nas placas Arduino e assim ver o resultado do circuito em funcionamento.
#define BTN_PIN 8
void setup() {
pinMode(BTN_PIN, INPUT_PULLUP);
// inicializa conexão serial, para Arduino UNO R3 use Serial
// consulte https://docs.arduino.cc/language-reference/en/functions/communication/serial para maiores detalhes
Serial1.begin(9600);
}
void loop() {
int valorBtn = digitalRead(BTN_PIN);
delay(300); // debouncing
// caso botão pressionado informa o receptor
if (valorBtn == LOW) {
// para Arduino UNO R3 use Serial
Serial1.write('1');
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
// inicializa conexão serial
Serial.begin(9600);
}
int estadoLed = LOW;
void loop() {
if (Serial.available() > 0) {
// recebe o valor pela porta serial
char valor = Serial.read();
if (valor == '1') {
// inverte o estado do LED
estadoLed = (estadoLed == HIGH) ? LOW : HIGH;
digitalWrite(LED_BUILTIN, estadoLed);
}
}
}