Skip to content

Lab00

Solução From Zero to Hero!!

Exercicio 1

Exercise

"Hello, World!" no Monitor Serial

Familiarize-se com o Arduino IDE e o Monitor Serial, escrevendo um programa simples que imprime "Hello, World!" no Monitor Serial.

void setup() {
  // Inicia a comunicação serial com o monitor em 9600 bps
  Serial.begin(9600);
}

void loop() {

  Serial.println("Hello, World!");
  delay(1000); // Aguarda 1 segundo
}

Progress

Continuar...

Exercicio 2

Exercise

Variáveis e Operações Matemáticas

Crie um programa que recebe dois números inteiros do Monitor Serial, realiza operações matemáticas básicas (adição, subtração, multiplicação e divisão) e exibe os resultados no Monitor Serial.

int num1, num2;

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

void loop() {
    Serial.println("Digite o primeiro número:");
    while (Serial.available() == 0) {} // Aguarda o primeiro número
    num1 = Serial.parseInt();

    Serial.println("Digite o segundo número:");
    while (Serial.available() == 0) {} // Aguarda o segundo número
    num2 = Serial.parseInt();

    Serial.print("Soma: ");
    Serial.println(num1 + num2);

    Serial.print("Subtração: ");
    Serial.println(num1 - num2);

    Serial.print("Multiplicação: ");
    Serial.println(num1 * num2);

    if (num2 != 0) {
      Serial.print("Divisão: ");
      Serial.println(num1 / num2);
    } else {
      Serial.println("Divisão por zero não permitida.");
    }
    delay(1000); // Aguarda 1 segundo
}

Progress

Continuar...

Exercicio 3

Exercise

Estruturas de Controle: if, else e switch-case

Escreva um programa que receba um número inteiro do Monitor Serial e, usando estruturas de controle, verifique se o número é par ou ímpar, positivo ou negativo e imprima o resultado no Monitor Serial.

void setup() {
    Serial.begin(9600);
    Serial.println("Digite um número inteiro:");
}

void loop() {

    if (Serial.available() > 0) {
        int num = Serial.parseInt();

        if (num % 2 == 0) {
            Serial.println("O número é par.");
        } else {
            Serial.println("O número é ímpar.");
        }

        if (num > 0) {
            Serial.println("O número é positivo.");
        } else if (num < 0) {
            Serial.println("O número é negativo.");
        } else {
            Serial.println("O número é zero.");
        }
        Serial.println("Digite um número inteiro:");  
    }
}

Progress

Continuar...

Exercicio 4

Exercise

Estruturas de Repetição: for e while

Desenvolva um programa que imprima no Monitor Serial os primeiros N números da sequência de Fibonacci, onde N é um número inteiro fornecido pelo usuário através do Monitor Serial.

int n;

void setup() {
  Serial.begin(9600);
  Serial.println("Digite o valor de N:");
}

void loop() {
  if (Serial.available() > 0) {
    n = Serial.parseInt();
    int a = 0, b = 1, c;

    Serial.print("Sequência de Fibonacci: ");
    Serial.print(a);
    Serial.print(", ");
    Serial.print(b);

    for (int i = 2; i < n; i++) {
      c = a + b;
      Serial.print(", ");
      Serial.print(c);
      a = b;
      b = c;
    }
    Serial.println();
    Serial.println("Digite o valor de N:");
  }
}

Progress

Continuar...

Exercicio 5

Exercise

Funções

Crie um programa que utiliza funções para converter temperaturas entre graus Celsius e Fahrenheit. O usuário deve inserir a temperatura e a escala desejada (C ou F) no Monitor Serial, e o programa deve retornar a temperatura convertida.

float converteFahrenheit(float celsius) {
  return celsius * 9.0 / 5.0 + 32;
}

float converteCelsius(float fahrenheit) {
    float valor = (fahrenheit - 32) * 5.0 / 9.0;
  return valor;
}

void setup() {
  Serial.begin(9600);
  Serial.println("Digite a temperatura e a escala (C ou F):");
}

void loop() {
  if (Serial.available() > 0) {
    float temp = Serial.parseFloat();
    char scale = Serial.read();

    if (scale == 'C' || scale == 'c') {
      Serial.print("Temperatura em Fahrenheit: ");
      Serial.println(converteFahrenheit(temp));
    } else if (scale == 'F' || scale == 'f') {
      Serial.print("Temperatura em Celsius: ");
      Serial.println(converteCelsius(temp));
    } else {
      Serial.println("Escala inválida.");
    }
  }
}

Progress

Continuar...

Exercicio 6

Exercise

Vetores e manipulação de dados

Desenvolva um programa que recebe uma sequência de N números inteiros pelo Monitor Serial, armazena em um vetor, e calcula a média, o maior e o menor número. Imprima os resultados no Monitor Serial.

#define TAMANHO_MAXIMO 100  // Defina um tamanho máximo para o vetor

int vetor[TAMANHO_MAXIMO];  // Vetor de tamanho fixo

void setup() {
  Serial.begin(9600);
  Serial.println("Digite o numero de elementos no vetor:");
}

void lerElementos(int vetor[], int tamanho) {
  for (int i = 0; i < tamanho; i++) {
    Serial.print("Digite o numero ");
    Serial.print(i + 1);
    Serial.print(": ");

    while (Serial.available() == 0) {} // Aguarda input
    vetor[i] = Serial.parseInt();
    Serial.println(vetor[i]);
  }
}

float calcularMedia(int vetor[], int tamanho) {
  int soma = 0;
  for (int i = 0; i < tamanho; i++) {
    soma += vetor[i];
  }
  float media = (float)soma / tamanho;
  return media;
}

int encontrarMaior(int vetor[], int tamanho) {
  int maior = vetor[0];
  for (int i = 1; i < tamanho; i++) {
    if (vetor[i] > maior) {
      maior = vetor[i];
    }
  }
  return maior;
}

int encontrarMenor(int vetor[], int tamanho) {
  int menor = vetor[0];
  for (int i = 1; i < tamanho; i++) {
    if (vetor[i] < menor) {
      menor = vetor[i];
    }
  }
  return menor;
}

void loop() {
  if (Serial.available() > 0) {
    int n = Serial.parseInt();

    if (n > TAMANHO_MAXIMO) {
      Serial.print("Numero de elementos escolhido excede o tamanho máximo permitido de ");
      Serial.println(TAMANHO_MAXIMO);
      n = TAMANHO_MAXIMO;
    }

    Serial.print("Numero de elementos: ");
    Serial.println(n);

    lerElementos(vetor, n);


    float media = calcularMedia(vetor, n);
    int maior = encontrarMaior(vetor, n);
    int menor = encontrarMenor(vetor, n);

    Serial.print("Media: ");
    Serial.println(media);

    Serial.print("Maior numero: ");
    Serial.println(maior);

    Serial.print("Menor numero: ");
    Serial.println(menor);

    Serial.println("Digite o numero de elementos no vetor:");

  }
}

Progress

Continuar...

Exercicio 7

Exercise

Manipulação de Strings

Escreva um programa que receba uma string do Monitor Serial e determine o número de palavras, o número de vogais e o número de consoantes na string. Imprima os resultados no Monitor Serial.

Tip

Esse exércicio não funcionou no tinkercad, mas no wokwi deu certo.

#define TAMANHO_MAXIMO 100;  // Defina um tamanho máximo para o vetor

void setup() {
  Serial.begin(9600);
  Serial.println("Digite uma string:");
}
// O `\0` é o caractere nulo que indica o fim da string
// || é o operador lógico OU e && é o operador lógico E

#define TAMANHO_MAXIMO 100

void setup() {
  Serial.begin(9600);
  Serial.println("Digite uma string:");
}

void loop() {

  if (Serial.available() > 0) {
    char palavras[TAMANHO_MAXIMO]; // Array para armazenar a string com um tamanho máximo de 100 caracteres

    lerString(palavras, TAMANHO_MAXIMO);

    int numPalavras = contarPalavras(palavras);
    int numVogais = contarVogais(palavras);
    int numConsoantes = contarConsoantes(palavras);

    // Imprime os resultados no Monitor Serial
    Serial.print("Número de palavras: ");
    Serial.println(numPalavras);
    Serial.print("Número de vogais: ");
    Serial.println(numVogais);
    Serial.print("Número de consoantes: ");
    Serial.println(numConsoantes);

    // Aguarda nova entrada do usuário
    Serial.println("Digite outra string:");
  }
}

// Função que lê uma string da Serial e armazena em um array de caracteres
void lerString(char buffer[], int maxLength) {
  int index = 0;

  while (true) {
    if (Serial.available() > 0) {   // Verifica se há dados disponíveis na porta serial
      char receivedChar = Serial.read(); // Lê o caractere recebido

      if (receivedChar == '\n') {  // Verifica se o caractere é uma nova linha (Enter)
        buffer[index] = '\0';    // Termina a string com um caractere nulo
        Serial.print("Você digitou: ");
        Serial.println(buffer);  // Imprime a string recebida
        break;  // Sai do loop
      } else {
        buffer[index] = receivedChar; // Armazena o caractere no array
        index++;  // Incrementa o índice

        if (index >= maxLength - 1) {  // Limita o tamanho da string para evitar estouro de memória
          Serial.println("String muito longa!");
          buffer[index] = '\0';  // Termina a string com um caractere nulo
          break;  // Sai do loop
        }
      }
    }
  }
}

// Função que conta o número de palavras em uma string, considerando que uma palavra é uma sequência de letras minúsculas
int contarPalavras(char input[]) {
  int numPalavras = 0;
  bool novaPalavra = true;
  for (int i = 0; input[i] != '\0'; i++) {
    char c = input[i];
    if (c >= 'a' && c <= 'z') {
      if (novaPalavra) {
        numPalavras++;
        novaPalavra = false;
      }
    } else {
      novaPalavra = true;
    }
  }
  return numPalavras;
}

// Função que conta o número de vogais em uma string 
int contarVogais(char input[]) {
  int numVogais = 0;
  for (int i = 0; input[i] != '\0'; i++) {
    char c = input[i];
    if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
      numVogais++;
    }
  }
  return numVogais;
}

// Função que conta o número de consoantes em uma string
int contarConsoantes(char input[]) {
  int numConsoantes = 0;
  for (int i = 0; input[i] != '\0'; i++) {
    char c = input[i];
    if (c >= 'a' && c <= 'z' && !(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')) {
      numConsoantes++;
    }
  }
  return numConsoantes;
}

Progress

Continuar...

Exercicio 8

Exercise

Ponteiros

Crie um programa que recebe dois números inteiros do Monitor Serial e troque seus valores usando ponteiros. Imprima os valores antes e depois da troca no Monitor Serial.

void troca(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
  }

  int num1, num2;

  void setup() {
    Serial.begin(9600);
    Serial.println("Digite o primeiro número:");
  }

  void loop() {
    if (Serial.available() > 0) {
      num1 = Serial.parseInt();
      Serial.println("Digite o segundo número:");

      while (Serial.available() == 0) {} // Aguarda o segundo número
      num2 = Serial.parseInt();

      Serial.print("Antes da troca: num1 = ");
      Serial.print(num1);
      Serial.print(", num2 = ");
      Serial.println(num2);

      troca(&num1, &num2);

      Serial.print("Depois da troca: num1 = ");
      Serial.print(num1);
      Serial.print(", num2 = ");
      Serial.println(num2);

      while (true); // Pausa o programa após a execução
    }
  }

Progress

Continuar...

Exercicio 9

Exercise

Estruturas (structs) e Tipos Definidos pelo Usuário

Crie um programa que gerencia informações de alunos, como nome, idade e notas. Utilize structs para armazenar as informações e funções para realizar operações, como adicionar um aluno, remover um aluno, calcular a média das notas e exibir as informações dos alunos no Monitor Serial.

Tip

Esse eu fiz com ajuda do gpt, não consegui testar pra saber se está funcionando....

struct Aluno {
    String nome;
    int idade;
    float notas[3];
  };

  Aluno alunos[10];
  int alunoCount = 0;

  void adicionarAluno() {
    if (alunoCount < 10) {
      Serial.println("Digite o nome do aluno:");
      while (Serial.available() == 0) {}
      alunos[alunoCount].nome = Serial.readString();

      Serial.println("Digite a idade do aluno:");
      while (Serial.available() == 0) {}
      alunos[alunoCount].idade = Serial.parseInt();

      for (int i = 0; i < 3; i++) {
        Serial.print("Digite a nota ");
        Serial.print(i + 1);
        Serial.println(":");
        while (Serial.available() == 0) {}
        alunos[alunoCount].notas[i] = Serial.parseFloat();
      }

      alunoCount++;
    } else {
      Serial.println("Número máximo de alunos alcançado.");
    }
  }

  void exibirAlunos() {
    for (int i = 0; i < alunoCount; i++) {
      Serial.print("Nome: ");
      Serial.println(alunos[i].nome);
      Serial.print("Idade: ");
      Serial.println(alunos[i].idade);
      float media = 0;
      for (int j = 0; j < 3; j++) {
        Serial.print("Nota ");
        Serial.print(j + 1);
        Serial.print(": ");
        Serial.println(alunos[i].notas[j]);
        media += alunos[i].notas[j];
      }
      Serial.print("Média: ");
      Serial.println(media / 3);
    }
  }

  void setup() {
    Serial.begin(9600);
    Serial.println("Gerenciamento de alunos:");
    adicionarAluno();
    adicionarAluno();
    exibirAlunos();
  }

  void loop() {}