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

Ir para baixo
Thiaguin
Thiaguin
Mensagens : 201
Data de inscrição : 03/03/2020

Exercício 4.04 Empty Exercício 4.04

Qua Ago 04, 2021 6:10 pm
/*
* CURSO DE ROBOTICA 2020
*
* Exercicio: 4.4
* Tema: Organizar numeros
* Atividade: Carregar 5 numeros randomicos num vetor e organiza-los
* Descrição: usar a função random para gerar numeros entre 1 e 99, guardá-los num vetor de 10 posições, depois rodar o algoritmo para organizá-los
* Hardware: Montar o display
* Comandos: lcd.print(); for(); if(); random(1,99);
* Dica1: String é uma variável que armazena um conjunto de diversos valores do mesmo tipo
* Dica2: Declaração do vetor int nome_vetor[tamanho]; tipo dos dados, no caso int. Nome do vetor identifica a variável. Entre conchetes vai o tamanho do vetor
* Dica3: A cada 300ms realiza um ciclo de organização dos numeros para poder acompanhar a evolução do processo
* Dica4: A estratégia usada será a o algoritmo de ordenação por troca, descrito no livro "C completo e total", pag 502, mesmo que o bubble https://pt.wikipedia.org/wiki/Algorit...
* Dica5: Inserir um temporizador no processo para acompanhar as trocas
* Dica6: Testar primeiro elemento se é maior que o segundo, se for inverte os dois de lugar
* Dica7: Para mostrar as 10 posições use as duas linhas do display, colocando 5 valores na primeira linha e 5 na segunda linha
* Dica8: Usar uma tecla para controlar o inicio do proximo ciclo
* Dica9: Quando chegar ao final acender um led indicando o fim do algoritmo
* PLANO DE IMPLANTAÇÃO:
* 01 - Usar um botão para start e o tempo de pressionado usar na função randomSeed() para garantir a aleatoriedade
* 02 - Gerar os números Aleatórios e guardar nas posições do vetor
* 03 - Mostrar on numeros no display, colocar os 5 primeiros na primeira linha separados por " " espaço e os outros 5 na segunda linha
* 04 - Iniciar as comparações da posição 0 com a 1
* 05 - Caso o número na posição 0 seja maior que na 1, fazer a inversão usando uma variável temporária, senão testar a posição 1
* 06 - Caso uma posição anterior tenha um número maior que a posição subsequente, reiniciar o contador
* 07 - A cada inversão realizada mostrar o vetor no display e temporizar para ficar perseptível a evolução do algoritmo
* 08 - Caso o contador atinja o último valor do vetor a ordenação estará concluida, então sinalizar no led
*/


/*SINALIZAÇÂO DOS LEDS
 * Quando acesos:
 * Led vermelho : Espera a tecla ser pressionada.  
 * Led amarelo : Em progresso.
 * Led verde : Resultado final (esse led ficará aceso por apenas 5 segundos).
 */

//DEFINICOES INICIAIS
#include //Carregada a biblioteca com as funções do display
#define ledvermelho 4 //Definido que o pino 4 irá se chamar ledvermelho
#define ledamarelo 5 //Definido que o pino 4 irá se chamar ledamarelo
#define ledverde 6 //Definido que o pino 4 irá se chamar ledverde
#define tecla 3//Definido que o pino 3 irá se chamar tecla

//DECLARAcAO DE VARIAVEIS GLOBAIS
LiquidCrystal lcd(12,11,10,9,8,7);//Os pinos serão ligados nessa sequência ao display
byte vetorRandom[10];//Vetor utilizado tem 10 posições
byte count;//Variável de incremento
byte i;//Variável de incremento
byte ajuda;//Variável para auxiliar na ordenação
 
//INICIALIZAÇÃO DO HARDWARE
void setup() {
lcd.begin(16,2);//Display inicializado, o display usado possui 16 colunas e 2 linhas
pinMode(ledvermelho,OUTPUT);//Configurado o pino 4 como saída
pinMode(ledamarelo,OUTPUT);//Configurado o pino 5 como saída
pinMode(ledverde,OUTPUT);//Configurado o pino 6 como saída
pinMode(tecla,INPUT_PULLUP);//Configurado o pino 3 como entrada usando um resistor de pullup
}

//FUNÇÕES COMPLEMENTARES
void mostraDisplay(){
lcd.clear();//Limpa o display  
for(i=0; i<=4; i++){//Incrementador das posições do vetor
 lcd.print(vetorRandom[i]);
 lcd.print(" ");
}
lcd.setCursor(0,1);//O cursor irá para o início da segunda linha do display
for(i=5; i<=9; i++){//Incrementador das posições do vetor
 lcd.print(vetorRandom[i]);
 lcd.print(" ");
}
delay(500);
}

//PROGRAMA PRINCIPAL
void loop() {
while(digitalRead(tecla)){//Enquanto a tecla estiver depressionada, irá rodar o bloco abaixo
 randomSeed(millis());//Randomização dos valores
 digitalWrite(ledvermelho,HIGH);//O led vermelho irá acender
 digitalWrite(ledamarelo,LOW);//O led amarelo irá apagar
 digitalWrite(ledverde,LOW);//O led verde irá apagar
}
digitalWrite(ledamarelo,HIGH);//O led amarelo irá acender
digitalWrite(ledvermelho,LOW);//O led vermelho irá apagar
digitalWrite(ledverde,LOW);//O led verde irá apagar

//CARREGA VETOR COM NÙMEROS RANDÔMICOS
for(count=0; count<10; count++){//Incrementador das posições do vetor
 vetorRandom[count] = random(0,99);//Os valores das posições serão randômicos
 mostraDisplay();//Irá mostrar os valores do vetor no display
}
//ORDENAÇÂO
for(count=0; count<9; count++){//Incrementador das posições do vetor
 if(vetorRandom[count] > vetorRandom[count+1]){//Se o valor da posição selecionada for maior que o próximo, roda o bloco abaixo
  ajuda = vetorRandom[count];//A variável ajuda passará a ter o valor da posição selecionada
  vetorRandom[count] = vetorRandom[count+1];//O valor da posição selecionada passará a ser o valor da próxima posição
  vetorRandom[count+1] = ajuda; //O valor da próxima posição passará a ser o valor da variável ajuda
  count = -1;//O valor da variável de incremento passará a ser -1, para q todo o vetor esteja com suas posições ordenadas de maneira crescente
  mostraDisplay();//Irá mostrar os valores do vetor no display
 }
}
digitalWrite(ledverde,HIGH);//O led verde irá acender
digitalWrite(ledvermelho,LOW);//O led vermelho irá apagar
digitalWrite(ledamarelo,LOW);//O led amarelo irá apagar
delay(5000);
}
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5715
Data de inscrição : 11/02/2019
Idade : 53
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Exercício 4.04 Empty Re: Exercício 4.04

Qua Ago 25, 2021 12:46 am
Muito bom Thiago, nota 10.0
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos