O Problema
Uma dúvida muito comum quando estamos criando interfaces entre o Arduino e outros dispositivos externos via Serial, é como conseguir receber mais dados do que apenas um byte, exemplo ‘1’ ou ‘0’;
Imagine que você tem 5 LEDs conectados ao Arduino, e deseja ligá-los através de uma interface gráfica no computador, como o Processing. Como controlar separadamente esses 5 LEDs, de uma maneira simples?
A solução
Vamos imaginar que o Processing envie este padrão para trabalhar com um led: LEDX:STATUS. Para ligar o LED 1, o Processing envia esta informação ao Arduino: LED1:1, e para desligá-lo: LED1:0.
Simples de lidar não?
Código fonte
int led = 13; void setup() { pinMode(led, OUTPUT); Serial.begin(9600); } /** * Função que lê uma string da Serial * e retorna-a */ String leStringSerial(){ String conteudo = ""; char caractere; // Enquanto receber algo pela serial while(Serial.available() > 0) { // Lê byte da serial caractere = Serial.read(); // Ignora caractere de quebra de linha if (caractere != '\n'){ // Concatena valores conteudo.concat(caractere); } // Aguarda buffer serial ler próximo caractere delay(10); } Serial.print("Recebi: "); Serial.println(conteudo); return conteudo; } void loop() { // Se receber algo pela serial if (Serial.available() > 0){ // Lê toda string recebida String recebido = leStringSerial(); if (recebido == "LED1:1"){ digitalWrite(led, HIGH); } if (recebido == "LED1:0"){ digitalWrite(led, LOW); } } }
Abra o monitor serial e faça testes escrevendo: LED1:1 e LED1:0 e veja que seu led do pino 13 do Arduino irá ligar e desligar de forma correspondente aos comandos.
Espero ter ajudado :)
legal, bem loco, empolgante
Obrigado Paulo, me ajudou muito!!!
Parabéns pelo trabalho!!
Interessante, parabéns!
parabens, ajudou muito…
Obrigado Paulo ajudou a resolver meu problema.
Obrigado! Ajudou muito!
:)
Olá Paulo,
Estou tentando fazer o IF funcionar para ativar um relé e não funciona. Já coloquei o Serial.print para testar ser o valor recebido está retornando para dentro do loop e sim, porem paraece que o IF nao testa a vairavel. Seria alguma blibioteca que náo estou carregando?
Desde já grato.
Olá, por favor, poste seu código para que eu possa analisar
Paulo, consegui resolver eliminando os espaços em branco quando passo o string!.
Obrigado.
blz muito boa esplicação
Sensacional!! Salvou minha semana!!
OBRIGADO!
DEUS te abeçoe!
Valleu amigao tava procurando me ajudou muito so vc mesmo agora sei com vem meu codio do dht11 nos erial
Valeu amigo, ajudou bastante.
Continue o bom trabalho.
Ola, criei uma função baseada em alguns estudos que fiz, ela consiste em receber a informação digitada na porta serial, converte-la em String e apos isso converter para int… qualquer duvida me manda um e-mail (gabriel.f.salarini@gmail.com), sou técnico em automação industrial, precisar de alguma ajuda estamos ai!!
Segue ai a função
int getNumb() {
String conteudo = “”;
char caractere;
// Enquanto receber algo pela serial
while (Serial.available() > 0) {
// Lê byte da serial
caractere = Serial.read();
// Ignora caractere de quebra de linha
if (caractere != ‘\n’) {
// Concatena valores
conteudo.concat(caractere);
}
// Aguarda buffer serial ler próximo caractere
delay(10);
}
int received_number = conteudo.toInt();
return received_number;
}
Caso queira testar, vou deixar o programa completo para implementação e teste da funcao.. esta logo a baixo
int res;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
res = getNumb();
if (res != 0 ) {
Serial.println(res);
}
}
int getNumb() {
String conteudo = “”;
char caractere;
// Enquanto receber algo pela serial
while (Serial.available() > 0) {
// Lê byte da serial
caractere = Serial.read();
// Ignora caractere de quebra de linha
if (caractere != ‘\n’) {
// Concatena valores
conteudo.concat(caractere);
}
// Aguarda buffer serial ler próximo caractere
delay(10);
}
int received_number = conteudo.toInt();
return received_number;
}
ola
muito bom , me ajudou batsante.Mas e se eu receber um array de strings, por exemplo A B C (sem vírgulas separando ou com vírgulas)??
grato
Marques
Amigo, muito obrigado! , você resolveu um grande problema pra mim!
Obrigado
Ajudou bastante
É sempre muito bom saber que existem pessoas que compartilham o bem.
Muito obrigado, me ajudou muito.
Forte abraço.
Amigo.
Me ajudou bastante numa aplicação aqui.
Estava quebrando a cabeça tentando resolver de uma forma mais complicada.
Muito obrigado e um forte abraço.
Martins
parabéns ótimo conteúdo