Pseudo-código para o microcontrolador.
Bom, acabaram-se as provas. Agora teremos novos posts mais rapidamente.
Desta vez, postarei um pseudocódigo para o Genius. Antes, porém, vou tentar explicar o que são microcontroladores.
-Microcontroladores:
Um microcontrolador basicamente é uma caixa preta que têm pinos de entrada e de saída. A beleza do microcontrolador esta em podermos mudar o programa que controla as saídas à partir das entradas.
Cada saída e entrada do microcontrolador deve estar em 0V ou 5V. No nosso projeto, usaremos os 5V das saídas para acender pequenos LEDs que , por sua vez, serão as luzes do Genius. Na entrada, utilizaremos botões que mandarão 0V ou 5V para os pinos de entrada.
Então, resumindo, um microcontrolador recebe os 0s e 1s na entrada, os interpreta e gera dados na saída.
-Por que um pseudo-código?
Como eu disse, o intuito deste projeto é que ele possa ser feito com qualquer tipo de microcontrolador. Se eu disponibilizasse o código completo, quem usa microcontroladores PIC ao invés dos Atmel pode ter dificuldades. No post de montagem disponibilizo o código "em AVR" pronto.
Também vou mostrar apenas um pseudo-código pois o objetivo desse post é analisar o diagrama de blocos do arquivo C e gerar um código à partir deste. Creio que um pseudo-código seria melhor para este fim.
-Chega de enrolação, vamos ao código:
Antes da análise do diagrama devemos fazer as inicializações e declarações de variáveis necessárias:
#include "stdlib.h"
//Inclua outras bibliotecas necessárias para cada tipo de microcontrolador.
#define LEVELMAX 30
int main()
{
int level,i,j,perdeu=0;
int Vetor_de_cores[LEVELMAX];
return 0;
}
Bom, já temos o começo do programa. Agora vamos colocar os devidos loopings e funções de acordo com o diagrama de blocos:
#include "stdlib.h"
//Inclua outras bibliotecas necessárias para cada tipo de microcontrolador.
#define LEVELMAX 30
int main()
{
int level,i,j,k=0;
int Vetor_de_cores[LEVELMAX];
while(1)
{
i=0;
j=0;
k=0;
Inicializa_Vetor(Vetor_de_cores);
while(!perdeu) /*Enquanto o usuário não perdeu o jogo*/
{
for(i=0;i menor do que level; i++)
{
Acende_Luz(Vetor_de_cores[i]);
Aguarda(50);
}
for(j=0;j menor do que level; j++)
{
if(Entrada()!=pow(2,Vetor_de_cores[i])) /*Lógica com binários*/
{
perdeu=1;
break;
}
}
level++;
}
return 0;
}
Como vocês viram não há nada de muito complexo no código. Agora analisemos função por função:
void Inicializa_Vetor(int *vetor[LEVELMAX])
{
for(int i=0; i menor do que LEVELMAX; i++)
{
vetor[i]=rand()%4;
}
}
void Acende_Luz(int luz)
{
Porta_Saida=pow(2,luz); /*Esta potencia deve-se novamente à lógica binária que estamos fazendo, qualquer dúvida comentem!*/
}
void Aguarda(int ms)
{
int tempo=StartTimer();
/*StartTimer seria uma função temporizadora do microcontrolador usado*/
while(tempo
Bom, é isso aí. Qualquer dúvida comentem que o próximo post será sobre dúvidas de vocês. Acho que não há nada de muito complicado aí em cima.
A única explicação que eu queria fazer é sobre a lógica binária:
(Espero que vocês conheçam a numeração binária pois será necessário para entender a lógica.)
O microcontrolador tem N portas de M bits. Cada bit é fisicamente representado por uma perninha do microcontrolador.
Como queremos acender apenas um led, se simplesmente igualássemos a porta de saída ao número do vetor de luzes, teríamos problemas se o número fosse 3, já que:
3 na base 10 = 0011 em binário.
Portanto , quando queremos deixar em 5V apenas o quarto terminal da porta de saída (Os números aleatórios são gerados de 0 a 3, portanto quando sorteamos 3 , desejamos ligar o 4 perninha) devemos igualar a porta de saída à 8 .
8 na base 10 = 1000 na base 2
Então teremos as seguintes saídas para cada número possível sorteado:
Em ordem, temos: Número sorteado, número que vai para saída, número em decimal e número em binário.
Conseguiram entender o que o microcontrolador faz?
É como se ele recebesse um número na entrada, trabalhasse com ele dentro do microcontrolador é devolvesse um número na saída. Porém, quando igualamos a saída à um número decimal, ela sairá na forma de binário.
Qualquer dúvida comentem. Aliás, comentem de qualquer forma, acho que não estou recebendo visitas =[.
[]'s Pitt.
0 Responses to Pseudo-código para o microcontrolador.
Something to say?