Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
brunodavidsteiner
brunodavidsteiner
Mensagens : 96
Data de inscrição : 21/05/2022
Escola : Juscelino K. de Oliveira

exercicio 4.6 resolvido Empty exercicio 4.6 resolvido

Sáb Ago 17, 2024 11:02 am
/*
* CURSO DE ROBOTICA 2020
*
* Exercicio: 4.6
* Tema: Texto terminal para display
* Atividade: Utilizando as strings receber o texto do terminal e enviar para o display
* Descrição: Declarar duas strings de 16 bytes, uma para cada linha do display e usar uma terceira de 32 bytes para receber o texto do terminal
* Hardware: Montar o display e a porta serial para as entradas e saídas de dados
* Comandos: Serial.avaiable(); Serial.read(); lcd.print(); if(); while(); for()
* Dica1: string é uma cadeia de caracteres, podemos até mesmo dizer um vetor de caracteres. Trás a linguagem C a capacidade de lidar com frases e palavras.
* Dica2: Quando declaramos string com s minusculo refere-se a uma variável, e quando String está com S maiusculo refere-se a objeto
* Dica3: Declaração da variavel string char nome_vetor[tamanho]{'a','b','c'}; tipo dos dados, sempre char. Nome do vetor identifica a variável. Entre conchetes vai o tamanho do vetor, depois
* Dica4: Lembrando que na linguagem C caractere é colocado entre ' ' (aspas simples), frases podem ser declaradas usando " " (aspas duplas)
* Dica5: Toda string termina com um caractere nulo no final(código ASCII 0), por isso na declaração deve considerar um elemento a mais no tamanho,
* * Resolução do Exercício
* Dica6: Receber o caractere na porta serial e guardar em uma string na posição 0
* Dica7: Testar se esse caractere é alphanumerico, se não for descartar, sinalizar erro e recomeçar a coleta dos dados
* Dica8: A primeira letra deve ser maiúscula, se não for converter para maiusculo, se for número ignorar a conversão.
* Dica9: Para apresentar o texto no display dividir a string recebida em duas strings de 16 caracteres e escrever cada uma em uma linha do terminal
* Dica10: o último caractere recebido pelo terminal deverá ser um \n , indicando nova linha ou enter.
*/

//DEFINICOES INICIAIS
#include  //carrega a biblioteca com as funçoes do dislay

//DECLARAÇAO DE VARIAVEIS GLOBAIS
const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;//variavel para contolar os pinos
LiquidCrystal lcd(3,4,5,6,7,8 );//ligaçoes do display
char linha1[17];//variavel paraa ajustar as linhas
char linha2[17];//variavel paraa ajustar as linhas
char textoRecebido[33];//variavel para o texto rescebido
int posicaoTexto = 0;//variavel para guardar os valores

//INICIALIZAÇAO DO HARDWARE
void setup() {
lcd.begin(16, 2);//programa com 16 colunas e 2 linhas
Serial.begin(9600);//inicia a porta serial com o valor de 9600
lcd.print("Aguardando texto...");//manda esse texto para o display
}
// FUNÇOES COMPLEMENTARES

//PROGRAMA PRINCIPAL
void loop(){
if (Serial.available()) {
char caractere = Serial.read();//ajusta os valores
if (caractere == '\n') {
textoRecebido[posicaoTexto] = '\0';//finaliza a string
processaTexto();//processa o texto recebido
posicaoTexto = 0;//reseta a posição para o próximo texto
} else if (posicaoTexto < 32);//tira do if
if (isAlphaNumeric(caractere)) {
if (isAlpha(caractere) && !isUpperCase(caractere)) {
caractere = toUpperCase(caractere);//ajusta o valor de caractere
}
textoRecebido[posicaoTexto] = caractere;//ajusta a posiçao do texto
posicaoTexto++;//adiciona 1 a posiçao do texto
} else {
if (!isspace(caractere)) {
Serial.print("Caractere inválido: ");//manda esse texto para o display
Serial.println(caractere);//tira um print e pula uma linha
}
}
}
}
bool isAlphaNumeric(char c) {
return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');//encerra a funçao
}
bool isAlpha(char c) {
return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');//encerra a funçao
}
bool isUpperCase(char c) {
return (c >= 'A' && c <= 'Z');//encerra a funçao
}
char toUpperCase(char c) {
if (c >= 'a' && c <= 'z') {
return c - 'a' + 'A';//encerra a funçao
}
return c;//encerra a funçao
}
void processaTexto() {
for (int i = 0; i < 16 && i < posicaoTexto; i++) {
linha1[i] = textoRecebido[i];//ajusta a linha igual ao texto
}
linha1[16] = '\0';//pula uma linha
for (int i = 0; i < 16 && (i + 16) < posicaoTexto; i++) {
linha2[i] = textoRecebido[i + 16];//ajusta a linha igual ao texto que e rescebido.
}
linha2[16] = '\0';//pula uma linha
lcd.clear();//limpa o lcd
lcd.setCursor(0, 0);//posiciona o cursor na linha 0 coluna 0
lcd.print(linha1);//tira um print do codigo
lcd.setCursor(0, 1);//posiciona o cursor na coluna 0 linha 1
lcd.print(linha2);//tira um print do codigo
}
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5788
Data de inscrição : 11/02/2019
Idade : 53
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

exercicio 4.6 resolvido Empty Re: exercicio 4.6 resolvido

Ter Set 17, 2024 11:02 pm
Oi Bruno, o programa não funcionou. No sabado podemos corrigir juntos e vou explicar como depurar programas quando eles ficam maior
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos