Módulo 2

Linguagem Arduino I – Módulo 2

Neste segundo módulo faremos alguns exercícios com a classe Serial e com as estruturas de controle de fluxo.

Atividades

No curso Introdução à plataforma Arduino já vimos a classe Serial, bem como estruturas de controle de fluxo. O ponto chave deste módulo são as principais estruturas: if e for. Acreditamos que a maior dificuldade em aprender uma linguagem de programação é justamente entender e aplicar estas estruturas. Então, vamos praticar!

Obs. a notação [ENTER] no texto indica pressionar a tecla ENTER.

1 – execute e estude o sketch abaixo

byte byteRecebido;

void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.println("Instrucoes:");
  Serial.println("Pressione uma tecla numerica, caractere");
  Serial.println("ou digite uma frase. Para enviar pressione a tecla [ENTER].");
}

void loop() {
  // verifica se há algum dado
  if (Serial.available() > 0) {
    byteRecebido = Serial.read();
    Serial.println(byteRecebido);
  }
}

2 – desenvolva um sketch (resolvido) que obtenha dois números inteiros e positivos, faça a soma destes dois números e mostre o resultado no monitor serial.

int  operando1 = 0;
int  operando2 = 0;
byte byteRecebido;

void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.println("Instrucoes:");
  Serial.println("Entre com dois numeros quaisquer nesta ordem (exemplo):");
  Serial.println("2 [ENTER] 3 [ENTER]");
  Serial.println("");
}

void loop() {
  // verifica se há algum dado
  if( Serial.available() > 0 ) {
    byteRecebido = Serial.read();
    // aceitar somente caracteres de 1 a 9 (na tabela ASCII: de 49 a 57)
    if( byteRecebido > 48 && byteRecebido < 58 ) {
      Serial.println(byteRecebido);
      if( operando1 == 0 ) {
        operando1 = byteRecebido - 48;
      }
      else {
        if( operando2 == 0 ) {
          operando2 = byteRecebido - 48;
        }
      }
    }
    if( operando1 !=0 && operando2 !=0 ) {
      Serial.print(" = ");
      Serial.println(operando1 + operando2);
      operando1 = 0;
      operando2 = 0;
    }
  }
}

3 – para esta tarefa separe os seguintes componentes:

  • 3 LEDs (1 vermelho, um verde e um amarelo)
  • 3 resistores de 220 ohms (vermelho, vermelho e marrom)
  • 1 protoboard
  • diversos fios jumpers

3.1 – os LEDs devem ser ligados nos pinos digitais 2, 3 e 4, não esquecendo de ligar um resistor para cada LED.

3.2 – execute, estude o sketch abaixo e faça as seguintes alterações:

a) troque os “comandos” 1, 2 e 3 pelos caracteres rg, e y.

obs1. o programa também deverá aceitar os equivalentes maiúsculos destes caracteres.
obs2. estes caracteres representam as cores dos LEDs ( red, green e yellow).

b) nos testes dos caracteres válidos, substitua as estruturas if por switch.

byte byteRecebido;

void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.println("Instrucoes:");
  Serial.println("Digite 1, 2 ou 3.");
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
}

void loop() {
  // verifica se há algum dado
  if( Serial.available() > 0 ) {
    byteRecebido = Serial.read();
    // aceitar somente caracteres numericos 1, 2 e 3
    if( byteRecebido > 48 && byteRecebido < 54 ) {
      if( (byteRecebido - 48) == 1 ) {
        digitalWrite( 2, HIGH );
        delay(1000);
        digitalWrite( 2, LOW);
      }
      if( (byteRecebido - 48) == 2 ) {
        digitalWrite( 3, HIGH );
        delay(1000);
        digitalWrite( 3, LOW);
      }
      if( (byteRecebido - 48) == 3 ) {
        digitalWrite( 4, HIGH );
        delay(1000);
        digitalWrite( 4, LOW);
      }
    }
  }
}