Ajuda para Otimizar Código de uma Estação Meteorológica

Boa tarde, meus Gurus!

Estou montando uma estação meteorológica, que mede chuva, temperatura, umidade, pressão, velocidade e direção do vento.
Estes dados serão enviados via SMS para um número específico, que fará o tratamento dos dados coletados.

O hardware funciona bem isoladamente (cada componente testado separadamente), apoiado em um Arduino UNO R3 (é o que eu tenho disponível).

Mas na hora de juntar o código, o mesmo ficou um monstro.
Parte por que não sou bom programador (sei apenas o básico e estou iniciando no arduino e no C) e parte por que foi um monte de “recorta-copia-cola”.

Estou compartilhando o código aqui para ver se alguém me dá uma orientação de como otimizar este código.

Abraços

SAPS-73

teste.ino (6.59 KB)

Boas
Dando uma vista de olhos rápida diria que fizeste um bom trabalho, está organizado, limpinho e fácil de gerir do meu ponto de vista.
Os comentarios estão excelentes ja que eu não conhecendo o projecto total fiquei a entender só de passar os olhos.
Nao é todos os dias que chegam posts assim com codigo elegante.
Quanto a melhorar alguma coisa assim de repente vejo as Strings, podias fazer isso com arrays de carateres (strings lower case) de modo a optimizar a ram, mas se isso esta a funcionar como está, penso que a beleza e manutenção ganha por tanto deixa estar como esta.
Por todos estes motivos ate mereces um karma Point :grin:
Estás de parabéns afinal es um bom programador ;D ;D
Bons estudos

Faço meu o comentário do Hugo acerca das Strings... se estás agora a aprender C, diria que este é um projecto ideal para aprenderes a lidar com arrays de caracteres e funções associadas.

Uma coisa que a mim salta sempre à vista são variáveis que não estão optimizadas... ou seja, se apenas podes contar até 120 por algum motivo, escusas de usar um int, podes usar um char. Da mesma forma, se o teu número vai ser sempre positivo (como o número de voltas da hélice), não se deve usar uma variável signed, mas sim uma unsigned. Um exemplo disto é a variável contador... em vez de apenas contar até 32000, passando a variável para unsigned int, podes passar a contar até 65000.
Isto não implica que está incorrecto o que fizeste, apenas que é uma boa prática e ajuda a pensar em todos os cenários do sistema.

Outra coisa que podias ter feito, caso não estivesses a enviar SMS's era trocar este pedaço de código:

  smstexto = "9999999;000;"; //Código da Cidade e da Estação
  smstexto += dt;
  smstexto += ";";
  smstexto += hr;
  smstexto += ";";
  smstexto += ch;
  smstexto += ";";
  smstexto += tc;
  smstexto += ";";
  smstexto += ur;
  smstexto += ";";
  smstexto += pa;
  smstexto += ";";
  smstexto += vd;
  smstexto += ";";
  smstexto += vv;
  smstexto.toCharArray(textosms, smstexto.length() + 1);

Por isto:

  dataFile.print(dt);
  dataFile.print(";");
  dataFile.print(hr);
  dataFile.print(";");
  dataFile.print(ch);
  dataFile.print(";");
  dataFile.print(tc);
  dataFile.print(";");
  dataFile.print(ur);
  dataFile.print(";");
  dataFile.print(pa);
  dataFile.print(";");
  dataFile.print(vd);
  dataFile.print(";");
  dataFile.print(vv);

A diferença seria que não precisavas daquela string intermédia... mas como precisas de fazer isso para enviar a SMS, não vale a pena. Fica apenas a sugestão ou, se quiseres usar a sprintf() para te livrares das Strings.

No que toca à organização do código, está excelente!!! Parabéns!!!

Obrigado pelas dicas amigos bubulindo e HugoPT.

Anotei aqui e vou estudar estas possibilidades.

Assim que terminar de montar posto aqui o produto final, no momento estou esperando um painel solar para poder instalar em definitivo, estão tenho um tempinho pra isso...rsss

Vlw