Blagues du Nouvel An du projet Arduino Mega Server

image

Le développement du projet Arduino Mega Server bat son plein et dans le processus de travail, il y a des obstacles inattendus qui doivent être héroïquement surmontés. Je vais vous parler de certains d’entre eux aujourd’hui, et cela vous fera peut-être gagner un peu de votre temps et de vos nerfs.

La première plaisanterie: et la vieille femme est un bûcheron ou voir la racine!


Je me prépare à publier la version 0.14 du système pour Arduino Due et adapterai cette version pour fonctionner avec Power Monitor. Pour ceux qui ne connaissent pas, Power Monitor est un système logiciel et matériel de surveillance de l'alimentation électrique, qui vous permet de contrôler le niveau de la tension secteur et la consommation d'énergie sur 14 canaux et a un contrôle intégré de la fréquence du courant secteur et même un oscilloscope réseau, qui montre la forme directement sur la page Web courant et tension en temps réel.

image

J'ai assemblé le circuit, vérifié tout, l'ai exécuté - cela ne fonctionne pas. Eh bien, ça arrive, c'est habituel. Je commence à vérifier le code - tout est en ordre, vérifier le matériel - tout va bien, vérifier les connexions - tout est également en ordre. Dans une profonde réflexion, je m'assois sur une chaise et commence à réfléchir à l'endroit où il pourrait y avoir une erreur. Après mûre réflexion, j'arrive à la conclusion que tout est fait correctement. Pourquoi ça ne marche pas? Il n'y a pas de miracles, donc je vérifie tout une deuxième fois.
image

Code, matériel, connexions. Tout semble correct. Je pense encore beaucoup. Je vais à nouveau pelleter le code, avec une dépendance - le résultat est zéro. Étant donné que toutes les méthodes ambulatoires ont été épuisées, je transfère le patient au service chirurgical et prends un testeur et un fer à souder. Le patient me jette un regard prudent, mais il est sans voix et ne peut rien me dire. Après quelques manipulations, il s'avère que le Power Monitor n'est pas du tout alimenté! Comment ça? Les conducteurs d'alimentation sont clairement visibles, mais pas d'alimentation!

Et puis il me vient à l'esprit que, il s'avère, il existe des cartes de prototypage telles
image
que je les rencontrais habituellement et auxquelles j'étais habitué et les considéraient comme les seules possibles, mais il y en a (trouvez dix différences, comme on dit)
image
et c'est exactement le tableau que j'ai rencontré cette fois. Cela semble une bagatelle et pour acquis seulement lorsque vous le savez déjà et que vous ne le savez pas, vous pouvez vous casser la tête jusqu'à ce que vous compreniez pourquoi votre appareil ne fonctionne pas.

Il y a encore un point psychologique - si vous considérez le pneu intact, vous ne faites pas attention à la passe dans le marquage (vous ne savez jamais ce que le fabricant voulait dessiner). Ce genre de blagues se produit parfois lors du développement - voyez, comme on dit, à la racine!

Drôle de seconde: bonjour de notre équipe bien-aimée arduino.cc


Comme je l'ai dit, le développement bat son plein et AMS est déjà devenu un projet assez volumineux et, bien sûr, il est impossible de se passer de directives de compilation conditionnelle très utiles dans le projet. Il s'agit d'un puissant outil de gestion de code, d'autant plus que l'Arduino Mega Server a une structure modulaire et des directives de compilation conditionnelle activent et désactivent divers modules du système.

#define
#ifdef
#endif

Ceci est fait de sorte que vous puissiez désactiver les modules dont vous n'avez pas besoin et économiser la mémoire précieuse du microcontrôleur. Et je ne me suis pas rencontré dans ma pratique (dans différents langages de programmation) pour que les directives de compilation conditionnelle ne fonctionnent pas ou soient «buggées». C'est absurde! Jusqu'à récemment, je pensais que c'était impossible, mais les développeurs (drôles) de l'environnement de programmation Arduino ne nous laissent pas nous ennuyer, mais d'abord.

Donc, nous essayons de désactiver le module dont nous n'avons pas besoin, dans ce cas, le module pour travailler avec MajorDoMo (et jusqu'à présent, cela a fonctionné comme prévu).

//#define MAJORDOMO_FEATURE

En théorie, tout entre les directives

#ifdef MAJORDOMO_FEATURE

...

#endif

devrait être désactivé de la compilation. Mais ça y était!


#ifdef MAJORDOMO_FEATURE

char majorMegaObject[] = "ncMega01";
char majorCommObject[] = "comm_mega01";

// MajorDoMo net settings
byte MAJOR_IP[] = {192, 168, 2, 8};
int MAJOR_PORT = 80;

// <--------------------------------------     

// EthernetClient object
EthernetClient mclient;

// <--------------------------------------     ! ,   ,   !

void majordomoInit() {
  initStart("MajorDoMo");
  timeStamp();
  Serial.print("Connect to MajorDoMo... ");
  if (mclient.connect(MAJOR_IP, MAJOR_PORT)) {
    Serial.println("OK");
    //mclient.println("GET /search?q=arduino HTTP/1.0");
    mclient.println();
  } else {
      Serial.println("failed");
    }
  delay(200);
  mclient.stop();
  modulMajor = MODUL_ENABLE;
  initDone();
}


Comme vous pouvez le voir, la compilation conditionnelle ne fonctionne tout simplement pas (c'est mauvais, mais elle n'est pas encore allée nulle part), mais elle fonctionne "comme Dieu le met dans votre âme", c'est-à-dire là où elle veut - elle compile, où elle ne veut pas - elle ne compile pas! Et c'est très mauvais, car de tels "pépins" imprévisibles sont très difficiles à détecter et peuvent entraîner des conséquences complètement imprévisibles.

À propos, cet article concerne la version 1.6.5 d'Arduino IDE. Mais, apparemment, la version de l'environnement de développement n'a pas vraiment d'importance, ils sont tous assez bogués. Ce que j'ai appris récemment, jusqu'à ce que je compile de petits croquis et de petits projets, tout était en ordre.

La troisième blague: encore une fois, notre bien-aimé arduino.cc et un bug complètement fantastique


Je ne décrirai pas ici longtemps, à mon avis, un bug hors du commun dans le compilateur de l'environnement Arduino, mais je donnerai immédiatement le code pour que vous puissiez vous-même apprécier ce miracle.

Déclarez une variable:

long errorsHttpSend = 0;

Dans la boucle, nous imprimons:

Serial.println(errorsHttpSend);

Résultat:

808333615

Renommez en ajoutant 2:

long errorsHttpSend2 = 0;

Dans la boucle, nous imprimons:

Serial.println(errorsHttpSend2);

Résultat:

0 

La question se pose: comment conduire le développement dans un tel système? Ici, vous pouvez également mentionner le travail totalement inadéquat des différentes versions de l'IDE Arduino. Le code qui fonctionne très bien dans une version de l'environnement refuse de compiler dans une autre. Un environnement compile le projet, un autre "ne voit pas" l'une des bibliothèques. Après avoir réinstallé l'environnement de développement, la même version 1.6.5 (qui a compilé avant la réinstallation) cesse de compiler le projet.

Gardez donc à l'esprit ce que vous devez gérer lorsque vous travaillez avec Arduino. Il n'y a qu'un seul point positif: avec un tel système, vous deviendrez involontairement un gourou de la programmation et un maître de l'administration système.

Permettez-moi d'exprimer le souhait de ma nouvelle année à l'équipe de développement Arduino: vous êtes notre cher! Nous vous souhaitons une bonne année et vous souhaitons de libérer un environnement de développement fonctionnant normalement dans la nouvelle année!

Bonne année!


Mes amis! Je vous félicite pour la prochaine 2016 et j'espère que les informations contenues dans cet article vous aideront à gagner du temps et des nerfs au cours de la nouvelle année! Et un développement réussi!

PS

Malgré toutes les machinations des ennemis, dans un avenir proche, une nouvelle version d' Arduino Mega Server sera publiée à 0,14 pour Arduino Mega et Arduino Due avec de nombreuses nouvelles fonctionnalités.

Addition . Une chaîne Youtube est ouverte et voici une vidéo promo du Arduino Mega Server, qui montre comment travailler avec un vrai système.

Source: https://habr.com/ru/post/fr388623/


All Articles