Projecto Robótica – Arduino + Temperature Sensor LM335A – Leitura, Gravação de Dados e Estatísticas V_1.01
Posted by admin on 11 de Junho de 2012 | Filed under Línguagens de Programação, Programação, Projectos, Robótica
Hoje decidi melhorar e aprimorar um pouco a aplicação que efectuava o tratamento dos dados recolhidos guardados no ficheiro txt, de modo a tornar a aplicação um pouco mais complexa e com mais funcionalidades:

O código criado é o seguinte:
#include <stdio .h> #include <stdlib .h> #define N 100 float temperatura[N]; int num_linhas = 0, i; void lerficheiro() { FILE *entrada; entrada=fopen("log.txt","r"); if(entrada==NULL) { printf("Erro na abertura do ficheiro de entrada\n"); system("pause"); } else { while(fscanf(entrada, "Temperatura = %f\n", & temperatura[i]) != EOF) { printf("Temperatura = %f \n", temperatura[i]); num_linhas = num_linhas + 1; i++; } printf("\n\n"); //printf("Numero de Linhas = %d\n", num_linhas); } } int main() { int escolha; printf("\t\t\t\t***MENU***"); printf("\n\n"); printf("1 - Ler Ficheiro de Dados:\n"); printf("2 - Calcular a Média das Temperaturas:\n"); printf("3 - Verificar Temperatura Maxima:\n"); printf("4 - Verificar Temperatura Minima:\n"); printf("5 - SAIR\n"); printf("\n"); printf("Opcao:"); scanf("%d", &escolha); switch(escolha) { case 1: { printf("\n\n1- Escolheu Ler o Ficheiro de Dados:\n\n"); lerficheiro(); break; } case 2: { printf("\n\n2 - Escolheu Calcular a Media das Temperaturas:\n\n"); lerficheiro(); float soma_temp = 0, temp_media = 0; int j; for(j = 0; j < num_linhas; j++) { soma_temp = soma_temp + temperatura[j]; temp_media = soma_temp / num_linhas; } printf("Media = %f", temp_media); break; } case 3: { float temp_max = 0; int j; lerficheiro(); printf("\n\n3 - Verificar Temperatura Maxima:\n\n"); for(j = 0; j < num_linhas; j++) { if (temperatura[j] > temp_max) { temp_max = temperatura[j]; } } printf("Temperatura Maxima = %f", temp_max); break; } case 4: { float temp_min; int j; lerficheiro(); printf("\n\n3 - Verificar Temperatura Minima:\n\n"); for(j = 0; j < num_linhas; j++) { temp_min = temperatura[0]; if (temperatura[j] < temp_min) { temp_min = temperatura[j]; } } printf("Temperatura Minima = %f", temp_min); break; } case 5: { printf("Escolheu SAIR:"); exit(0); } }while(escolha != 5); } |
Calculo da Média das Temperaturas:

Verificação da Temperatura Máxima:

Verificação da Temperatura Mínima :

O código que criei ainda está um pouco desorganizado pois ainda não me encaixo muito bem com a passagem de parâmetros para as funções. Tenho a plena consciência que a minha aplicação ainda pode ser muito melhorada, mas caso alguém tenha dicas ou ideias dos melhoramentos que fosso efectuar estarei disposto a ouvir e implementar.
Share



Julho 13th, 2012 at 12:34 pm
Olá,
sugiro algumas optimizações e reduções no código. Vê o código abaixo 😉
Atenção ao cálculo da média. O algoritmo estava a calcular a média em todas as iterações.
Quando se calcula um máximo ou mínimo podemos obter o primeiro valor do array e começar a iteração pelo segundo elemento do array (j = 1).
case 2:
{
printf(“\n\n2 – Escolheu Calcular a Media das Temperaturas:\n\n”);
lerficheiro();
float soma_temp = 0, temp_media = 0;
for(int j = 0; j < num_linhas; j++)
{
soma_temp += temperatura[j];
}
temp_media = soma_temp / num_linhas;
printf("Media = %f", temp_media);
break;
}
case 3:
{
float temp_max;
lerficheiro();
printf("\n\n3 – Verificar Temperatura Maxima:\n\n");
temp_max = temperatura[0];
for(int j = 1; j temp_max)
{
temp_max = temperatura[j];
}
}
printf(“Temperatura Maxima = %f”, temp_max);
break;
}
case 4:
{
float temp_min;
lerficheiro();
printf(“\n\n3 – Verificar Temperatura Minima:\n\n”);
temp_min = temperatura[0];
for(int j = 1; j < num_linhas; j++)
{
if (temperatura[j] < temp_min)
{
temp_min = temperatura[j];
}
}
printf("Temperatura Minima = %f", temp_min);
break;
}