O desenvolvimento do projeto Arduino Mega Server está em pleno andamento e, no processo de trabalho, existem obstáculos inesperados que precisam ser heroicamente superados. Hoje vou falar sobre alguns deles, e talvez isso poupe um pouco do seu tempo e nervosismo.A primeira piada: e a velha é um assaltante ou vê a raiz!
Estou me preparando para lançar a versão 0.14 do sistema para o Arduino Due e adaptarei esta versão para funcionar com o Power Monitor. Para quem não sabe, o Power Monitor é um sistema de software e hardware para monitorar a fonte de alimentação, que permite controlar o nível de tensão da rede e consumo de energia por 14 canais e possui controle interno da frequência da corrente da rede elétrica e até mesmo um osciloscópio de rede, que exibe diretamente corrente e tensão em tempo real.
Montei o circuito, verifiquei tudo, executei - ele não funciona. Bem, acontece, é usual. Começo a verificar o código - tudo está em ordem, verificando o hardware - tudo está bem, verificando as conexões - tudo também está em ordem. Pensando profundamente, sento-me em uma cadeira e começo a pensar sobre onde pode haver um erro. Após muita reflexão, chego à conclusão de que tudo é feito corretamente. Por que isso não funciona? Não há milagres, então eu verifico tudo uma segunda vez.
Código, hardware, conexões. Tudo parece estar correto. Eu penso muito de novo. Vou escavar o código novamente, com dependência - o resultado é zero. Como todos os métodos ambulatoriais foram esgotados, transfiro o paciente para o departamento cirúrgico e tiro um testador e um ferro de solda. O paciente olha cautelosamente para mim, mas ele está sem palavras e não pode me dizer nada. Após algumas manipulações, verifica-se que o Power Monitor não está ligado! Como assim? Os condutores da fonte de alimentação são claramente visíveis, mas não há energia!E então me ocorre que, ao que parece, existem placas de prototipagem
como as que costumo encontrar e às quais eu estava acostumado e as consideravam as únicas possíveis, mas existem (encontre dez diferenças, como dizem)
e este é exatamente o quadro que me deparei neste momento. Parece um pouco e garantido apenas quando você já sabe e, quando não sabe, pode quebrar toda a cabeça até descobrir por que o dispositivo não está funcionando.Ainda há um ponto psicológico - se você considera o pneu intacto, não presta atenção ao passe na marcação (você nunca sabe o que o fabricante queria desenhar). Às vezes, esse tipo de piada acontece no desenvolvimento - veja, como dizem, até a raiz!Segundo engraçado: olá do nosso amado time arduino.cc
Como eu disse, o desenvolvimento está em pleno andamento e o AMS já se tornou um projeto bastante volumoso e, é claro, é impossível fazer isso sem diretrizes de compilação condicional muito úteis no projeto. Essa é uma poderosa ferramenta de gerenciamento de código, especialmente porque o Mega Server do Arduino possui uma estrutura modular e as diretivas de compilação condicional habilitam e desabilitam vários módulos do sistema.#define
#ifdef
#endif
Isso é feito para que você possa desativar os módulos desnecessários e economizar memória valiosa do microcontrolador. E eu não conheci na minha prática (em diferentes linguagens de programação) para que as diretivas de compilação condicional não funcionem ou sejam "buggy". Isso é um absurdo! Até recentemente, eu pensava que era impossível, mas os desenvolvedores (engraçados) do ambiente de programação do Arduino não nos deixam entediar, mas primeiro as primeiras coisas.Portanto, estamos tentando desativar o módulo que não precisamos, neste caso, o módulo para trabalhar com o MajorDoMo (e até agora isso funcionou como esperado).
Em teoria, tudo entre diretivas#ifdef MAJORDOMO_FEATURE
...
#endif
deve ser desativado da compilação. Mas lá estava!
#ifdef MAJORDOMO_FEATURE
char majorMegaObject[] = "ncMega01";
char majorCommObject[] = "comm_mega01";
byte MAJOR_IP[] = {192, 168, 2, 8};
int MAJOR_PORT = 80;
EthernetClient mclient;
void majordomoInit() {
initStart("MajorDoMo");
timeStamp();
Serial.print("Connect to MajorDoMo... ");
if (mclient.connect(MAJOR_IP, MAJOR_PORT)) {
Serial.println("OK");
mclient.println();
} else {
Serial.println("failed");
}
delay(200);
mclient.stop();
modulMajor = MODUL_ENABLE;
initDone();
}
…
Como você pode ver, a compilação condicional não funciona (é ruim, mas ainda não foi), mas funciona "como Deus coloca em sua alma", ou seja, onde ela quer - ela compila, onde ela não quer - ela não funciona E isso é muito ruim, porque essas "falhas" imprevisíveis são muito difíceis de detectar e podem levar a conseqüências completamente imprevisíveis.A propósito, este artigo é sobre o Arduino IDE versão 1.6.5. Mas, aparentemente, a versão do ambiente de desenvolvimento realmente não importa, todos eles são bastante problemáticos. O que aprendi apenas recentemente, até compilar pequenos esboços e pequenos projetos, estava tudo em ordem.A terceira piada: novamente, nosso amado arduino.cc e um bug completamente fantástico
Não vou descrever aqui por um longo tempo, na minha opinião, um bug fora do comum no compilador do ambiente do Arduino, mas darei imediatamente o código para que você possa apreciar esse milagre.Declare uma variável:long errorsHttpSend = 0;
No loop, imprimimos:Serial.println(errorsHttpSend);
Resultado:808333615
Renomeie adicionando 2:long errorsHttpSend2 = 0;
No loop, imprimimos:Serial.println(errorsHttpSend2);
Resultado:0
Surge a pergunta: como o desenvolvimento pode ser conduzido em um sistema assim? Aqui você também pode mencionar o trabalho completamente inadequado de várias versões do IDE do Arduino. Código que funciona muito bem em uma versão do ambiente se recusa a compilar em outra. Um ambiente compila o projeto, outro "não vê" uma das bibliotecas. Após a reinstalação do ambiente de desenvolvimento, a mesma versão 1.6.5 (que foi compilada antes da reinstalação) deixa de compilar o projeto.Portanto, lembre-se do que você deve lidar ao trabalhar com o Arduino. Há apenas um ponto positivo: com esse sistema, você se tornará involuntariamente um guru da programação e um mestre em administração de sistemas.Deixe-me expressar o desejo de Ano Novo para a equipe de desenvolvimento do Arduino: você é nosso querido! Desejamos a você um feliz ano novo e desejamos que você libere um ambiente de desenvolvimento que funcione normalmente no ano novo!Feliz Ano Novo!
Amigos! Quero parabenizá-lo pelo próximo 2016 e espero que as informações deste artigo ajudem você a economizar tempo e nervosismo no novo ano! E desenvolvimento bem sucedido!PSApesar de todas as maquinações dos inimigos, em um futuro próximo uma nova versão do Arduino Mega Server será lançada em 0,14 para o Arduino Mega e o Arduino Due com muitos novos recursos.Adição . Um canal do Youtube está aberto e aqui está um vídeo promocional do Arduino Mega Server, que demonstra como trabalhar com um sistema real.