Lendo uma String com Arduino via Serial

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 :)

Comments

  1. By Joao Reis

    Responder

  2. By Edielson

    Responder

  3. By Henrique

    Responder

  4. By claudio

    Responder

  5. By Rafael

    Responder

  6. Responder

  7. By A Almeida

    Responder

    • Responder

      • By A Almeida

        Responder

  8. By Ramalho Wanderson Nogueira Souza

    Responder

  9. By Regis Araújo Abdalla

    Responder

  10. By Carlos

    Responder

  11. By Júlio Cordeiro

    Responder

  12. By Gabriel Furtado

    Responder

Deixe uma resposta para Carlos Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *