Exercício 4.04
2 participantes
- Thiaguin
- Mensagens : 201
Data de inscrição : 03/03/2020
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);
}
* 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);
}
Permissões neste sub-fórum
Não podes responder a tópicos
|
|