Controlando os pinos do Arduino a partir do monitor serial

Tempo de leitura: 4 minutes

O controle do Arduino foi explorado de várias maneiras, incluindo controle de Bluetooth, controle programático e controle de sensor. Neste tutorial, é apresentado outro método de controle que envolve o controle manual usando a entrada do monitor serial. Isso significa que cada pino pode ser ligado ou desligado usando a entrada humana para o monitor serial. Isso torna o controle simples e versátil, o que é necessário para algumas aplicações.

Noções básicas do Arduino Serial Monitor

Para placas Arduino, o monitor serial pode atuar como uma ferramenta de diagnóstico e verificação para sensores e scripts. O uso mais simples do monitor serial também é uma ótima maneira de verificar se uma determinada placa Arduino está se comunicando corretamente com o computador ao qual está conectada. Abaixo, mostrei o uso mais simples do monitor serial:

void setup() {
  Serial.begin(9600);
  Serial.println("Código de exemplo");
}

void loop() {
}

Ao fazer o upload do código acima e abrir a porta serial, o monitor deve ler:

Código de exemplo

Este é o uso mais simples do monitor serial. Isso não nos diz muito além de uma indicação de que o microcontrolador está se comunicando em série com o computador.

Podemos ver um exemplo mais complexo lendo da porta serial e imprimindo todas as entradas na porta serial. Isso também é mostrado no código abaixo:

void setup() {
  Serial.begin(9600);
}

void loop() {
  while (Serial.available()){
    Serial.println(Serial.read());
  }
}

Um exemplo de saída produzido pelo script acima é fornecido abaixo. A porta serial lê cada caractere de entrada individualmente e o imprime como um inteiro (é por isso que vemos números inteiros diferentes dos números que inserimos).

Em seguida, queremos decodificar as entradas e imprimi-las como caracteres ASCII, em vez de inteiros. Posteriormente, isso nos permitirá controlar os pinos com base nos caracteres de entrada. Abaixo, a entrada pode ser decodificada primeiro lendo a entrada como um “char” e depois imprimindo essa variável “char” exatamente como acima:

void setup() {
  Serial.begin(9600);
}

void loop() {
  while (Serial.available()){
    char in_char = Serial.read();
    Serial.println(in_char);
  }
}

Agora temos as saídas esperadas com base em nossas entradas. Este método simples será a base para controlar nossos pinos Arduino a partir do monitor serial.

Em seguida, precisamos usar um caractere final para notificar o monitor serial que a entrada terminou. O caractere final é o caractere final ‘\n’ ou de nova linha. Também precisamos ASSEGURAR que a janela suspensa no monitor serial seja alterada de ‘Sem linha final’ para ‘Nova linha’. O código que decodifica a entrada e a imprime na porta serial é fornecido abaixo:

String in_chars = "";

void setup() {
  Serial.begin(9600);
}

void loop() {
  char in_char = ' ';
  while (Serial.available()){
    in_char = Serial.read();
    if (int(in_char)!=-1){
      in_chars+=in_char;
    }
  }
  if (in_char=='\n'){
    Serial.print("Text Entered: ");
    Serial.print(in_chars);
    in_chars = "";
  }
}

Um exemplo de impressão do código acima também é fornecido abaixo, demonstrando a capacidade do script de decodificar entradas completas para o monitor serial:

 

Lista de peças para demonstração do Arduino

Um LED RGB será usado para demonstrar os recursos de controle dos métodos de entrada serial. Um LED RGB é uma boa seleção porque nos permite testar três pinos separados do Arduino ao mesmo tempo. A lista de peças para a demonstração subsequente é fornecida abaixo:

  1. Placa Arduino Uno
  2. LED RGB
  3. Mini ProtoBoard
  4. 4 fios de jumper HxH

 

O código usado para controlar os pinos no Arduino usando a porta serial é fornecido abaixo:

int int_array[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
String pin_str = "";

void setup() {
  Serial.begin(9600);
  for (int ii = 2;ii<=sizeof(int_array)/sizeof(int_array[0]);ii++){
    pinMode(ii,OUTPUT);
  }
}

void loop() {
  while (Serial.available()){
    char in_char = Serial.read();
    if (int(in_char)!=-1){
      pin_str+=in_char;
    }
    if (in_char=='\n'){
      int pin_num = pin_str.toInt();
      int_array[pin_num] = !int_array[pin_num];
      digitalWrite(pin_num,int_array[pin_num]);
      Serial.print("Pin # ");
      Serial.print(pin_num);
      if (int_array[pin_num]==0){
        Serial.println(" OFF");
      } else {
        Serial.println(" ON");
      }
      pin_str = "";
    } 
  }
}

O código permite o controle booleano de cada um dos pinos do Arduino a partir dos pinos digitais D0-D13 e até dos pinos analógicos A0-A5. O led RGB pode ser conectado a qualquer um dos pinos do Arduino (exceto que o aterramento DEVE ser conectado ao pino de aterramento do Arduino (GND)). Uma vez que cada um dos pinos RGB é conectado a um pino Arduino, abra a porta serial e digite o número que corresponde ao pino RGB conectado e observe o LED acender! (Verde)

Conclusão

Arduino é uma estrutura poderosa porque permite várias maneiras de controlar dispositivos. Nesse caso, um LED RGB é controlado apenas pela porta serial. Apresentei a comunicação da porta serial pela entrada do usuário e como decodificar as entradas para ler os valores de entrada apropriados no Arduino. A partir disso, fomos capazes de controlar o LED RGB usando entradas simples para transformar cada cor vermelha, azul e verde individualmente. A rotina foi introduzida como uma alternativa a outros métodos de controle de módulos, além do controle programático ou outro método de controle envolvendo um módulo sem fio. Este método é simples, intuitivo e direto.

 

Neste artigo, mostrei como usar um LED RGB com o Monitor Serial do Arduino. Espero que você tenha achado útil e informativo. Se sim, compartilhe com um amigo que também gosta de eletrônica e de fazer coisas!

Eu adoraria saber quais projetos você planeja construir (ou já construiu) com esse LED RGB. Se você tiver alguma dúvida, sugestão ou se achar que falta algo neste tutorial, por favor, deixe um comentário abaixo.