Retour sur le compteur CPU/RAM

Welcome back mes chers lecteurs !

Cet article sera consacré aux problèmes que j’ai pu rencontrer lors de la réalisation de ce petit gadget ainsi qu’aux améliorations que j’ai apportées au code et des potentielles futur améliorations que je vais réaliser.

La réinstallation de mon système d’exploitation ainsi que la réinstallation du logiciel Arduino ne m’a pas aidé pour me remettre dans ce petit projet.

  1. Reconnaissance du matériel
  2. Installation de a librairie NeoPixel d’Adafruit
  3. Légère modification du code
  4. Évolutions

1) Reconnaissance du matériel

Souvenez vous, j’utilise pour ce compteur un micro-contrôleur Arduino Nano non officiel, sachez que les plans/matériels Arduino sont sous licence libre, permettant à n’importe quel constructeur de créer et vendre son produit. Rendant certaines cartes micro-contrôleur assez capricieuse, je vous recommande donc les produits officiels (reconnu par défaut par l’OS) ou les produits recommandés par la communauté.

Bien que le logiciel propose de sélectionner dans l’onglet « Outils » puis « Type de carte » le modèle « Ardunino Nano » il se peut cependant que votre système d’exploitation capricieux (pour mon cas à ce jour WIN8) ne reconnaisse pas votre carte micro-contrôleur !

Solution : Dans le gestionnaire des périphériques, votre micro-contrôleur est reconnu comme « FT232 USB ART ». Il faut télécharger et installer manuellement le driver permettant à votre OS de reconnaitre et d’ainsi communiquer avec votre Arduino Nano. Le driver est téléchargeable à cette adresse : http://www.ftdichip.com/Drivers/VCP.htm l’idéal étant de le récupérer sous format .zip afin d’aller y récupérer deux fichiers .inf (disponible également sur mon Dropbox).

La vidéo suivante explique parfaitement comment installer et associer les deux fichiers .inf au périphérique.

Magique, vous pouvez maintenant transférer votre programme et communiquer avec votre carte !

1) Installation de la librairie NeoPixel d’Adafruit

Bien, vous pouvez transmettre le code, mais il faut tout d’abord que celui-ci compile via la petite icône de vérification du programme, si vous vous êtes contenté de copier coller mon code, celui-ci ne devrait pas passer la vérification. Heureusement, l’informatique est bien foutu et vous obtiendrez un message d’erreur assez clair.

Celui-ci vous signale tout simplement que vous n’avez pas la librairie d’installée. Quoi une librairie ? Et oui pour gagner du temps et ne pas réinventer la roue, on peut utiliser des librairies, celle-ci nous permettent de gagner du temps en utilisant des fonctionnalités déjà écrites.

12665-02_1024x1024

Ainsi le barregraphe circulaire « NeoPixel Ring – 24 x » conçu par Adafruit dispose de sa librairie, utilisable par tout les produits de la gamme NeoPixel.

Votre programme va donc chercher le fichier .h dans votre dossier arduino des librairies, mais donc votre cas elle n’est surement pas installé ! vous la trouverez sur le site Github officiel d’Adafruit.

Pour l’installation rien de plus simple, rendez dans le répertoire …\Documents\Arduino\libraries et collez y le dossier décompressez téléchargé puis renommez le en « Adafruit_NeoPixel ».

Redémarrez votre logiciel Arduino et op ! Le code passe la vérification ! Vous trouverez également dans « Fichier > Exemples » des programmes présentant les fonctionnalités de la libraire installée.

3) Légère modification du code

Après plus de deux mois sans avoir touché à mon gadget je copie colle donc mon code, je réinstalle ma librairie, j’envoie le code sur mon Arduino nano. Je lance ensuite mon programme python (après avoir changer pour le bon port com) puis les leds s’allument ! …. mais pas comme il faut, tout est vert, pas de leds bleu, il y a un problème.

Que faire ? Et bien réactiver les messages commentés de type Serial.print() . Ses derniers nous servent de mode debug en quelque sorte pour voir ce qui s’y passe.

Je décide tout d’abord de faire du refactoring sur mes conditions de type if :


if(mode == 3)
    mode = 0;

Normalement, quand un if n’est suivi qu’une seule instruction, on peut se passer de parenthèses, si le code est bien indenté il n’y pas de soucis, mais des fois, on revient sur un if, on rajoute une ligne, on oublie de remettre les parenthèse et du coup ça capote tout, car la deuxième ligne n’est plus dans le if et sera donc appelée dans tous les cas !

j’opte pour quelque chose de clair :


if(mode == 3){
    mode = 0;
}

Puis je fais de même pour mes switch case, je rajoute des parenthèses ouvrantes et fermantes à chacune de mes conditions et je rajoute un break

avant :


switch(segment){
      case 0: // LEFT
        printLeftSegment(trunkedLed);
      ...

et maintenant :


switch(segment){
      case 0: // LEFT
      {
        printLeftSegment(trunkedLed);
        break;
      }
      ...

De cette manière les parenthèse indiquent bien le rôle de début et fin du case et ce n’est plus l’indentation qui gère cela. Le break permet, après être rentré dans une condition, de sortir du switch sans aller vérifier les autres états.

Et là encore, la magie opère et mon gadget reprend une vie normal. Est-ce la nouvelle version du logiciel Arduino qui est moins tolérante sur les parenthèses ? Possible, cela mérite de se renseigner mais le plus important est d’avoir de bonne pratique de codage, pour éviter au maximum les erreurs comme celle-ci.

J’ai donc mis à jour le code Arduino sur mon compte Github ! ENJOY

4) Évolutions

Je me pose des questions concernant les évolutions qui pourrait être effectuées sur ce gadget. Récupérer les informations comme l’utilisation processeur et ram était chose facile en python, mais des données comme l’utilisation GPU (carte graphique) est plus compliquée car chaque constructeur (AMD/Nvidia) ont leurs spécificités.

Un autre de mes projets consistait à afficher l’heure, via une représentation assez « exotique ». Je pourrais intégrer l’affichage de l’heure comme un troisième mode.

D’autre idées m’ont traversées l’esprit, afficher le nombre de tweets vous étant destiné ou encore le nombre de mails reçus. J’ai également un petit afficheur LCD que je pourrais intégré en complément au barregraphe. Bref pleins d’idées, il n’y a plus qu’à organiser et réaliser !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *