Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Cartes à micro-contrôleurs > Les cartes Arduino > Changements avec Arduino 1.0

Changements avec Arduino 1.0

lundi 12 décembre 2011, par Julien H.

L’officialisation de la version 1.0 de l’environnement logiciel Arduino marque une étape importante, un an après l’apparition de la carte Arduino Uno.

Nous avions suivi les échanges concernant certains choix et certains changements annoncés. Reconnaissons tout d’abord le travail énorme effectué par la communauté qui - rappelons le encore une fois - est atypique et multi-formes.

Sur le fond

La version de WinAVR ne change pas (2008), ce qui était un sujet d’inquiétude pour ceux qui connaissent les dernières versions (2010) et ont déjà eu des problèmes de compilation avec les avr-gcc trop récents.

Sous Windows, les préférences sont enregistrées dans un fichier distinct du répertoire d’installation, ce qui fait que les préférences de votre version précédente (pour moi, la 0021) sont récupérées, notamment le chemin vers le sketchbook : attention donc si vous voulez mettre à jour vos projets, il faudra prévoir deux répertoires dans votre sketchbook.

De toute façon, vos projets seront enregistrés avec la nouvelle extension officielle ".ino" qui permet de se distinguer du format ".pde" hérité de l’environnement Processing (ce qui n’était pas pratique pour ceux qui utilisent les deux comme c’est souvent le cas, en tout cas à Pobot) : vous serez donc prévenu par le logiciel au moment de l’enregistrement, qui vous proposera de désactiver ce fonctionnement. Si vous acceptez, votre fichier .pde sera supprimé et un fichier .ino sera créé. Cela promet de beaux logs Subversion pour ceux qui utilisent un outil de gestion de configuration logicielle.

Sur la forme

La taille ne change pas, le logiciel prend toujours moins de 250 Mo de place sur le disque dur en version Windows. Il s’installe toujours aussi facilement. Il peut donc coexister avec une ancienne version.

L’interface ne change pas trop. Le bleu pervenche est encore plus présent, l’ensemble est plus sobre. Les boutons de la barre d’outils sont plus évidents, avec la vérification et l’upload en évidence, et la liaison série à l’écart.

Les cartes officielles sont toutes là, dans le même menu, y compris les toutes premières, ce qui est très positif. On peut toujours rajouter les siennes (notamment pour DuinOS, voir nos articles).

Innovation très appréciée, le nom de la carte et le nom du port sont visibles en bas de fenêtre. Quand on organise un atelier et qu’on passe d’un poste à l’autre pour aider les nouveaux, une bonne partie du temps est passée à aller vérifier quelle carte et quel port sont sélectionnés !

Sur les librairies

On avait évoqué très tôt le risque de voir apparaitre une nouvelle bibliothèque pour les chaines de caractères. "String" est bien là, mais il est encore trop tôt pour dire ce qui pose problème.



Liste des changements

Dans la note de livraison, on retrouve l’intégralité des changements apportés à cette version 1.0 :

Sur l’interface

C’est la partie la plus visible :

  • L’extension .ino à la place de .pde
  • Les icônes plus simples et le moniteur série à droite
  • On peut utiliser la touche "shift" du clavier avec le bouton upload pour utiliser un programmateur au lieu du bootloader
  • Moins de blabla lors du téléchargement d’un programme dans la carte
  • Nouvelle image de démarrage et nouvelles couleurs
  • Le nom en bas à droite de la carte sélectionnée et du port série
  • Une barre de progression pendant la compilation et le téléchargement (pas vu à la première utilisation pourtant)

Sur la bibliothèque de liaison série

  • L’envoi sur la liaison série est asynchrone, en utilisant un buffer
  • Changement de sens de la fonction "flush" de la liaison série (euh... très impactant pour nous)
  • Différenciation entre "print" et "write" pour les octets ("byte"). Le premier est un affichage utilisateur, le second un envoi de donnée brute
  • Le traitement des chaines de caractères avec la liaison série ("find", "fund until")

Autres bibliothèques

  • la liaison série logicielle (SoftwareSerial) est modifiée (multiples instances)
  • enregistrement dans la mémoire programme plutôt que données pour les chaines de caractères
  • nouvelle implémentation pour les chaines de caractères
  • ajout des DHCP et des DNS (communication réseau)
  • modification des envois UDP (communication réseau)
  • modification de la bibliothèque I2C avec read au lieu de receive et write au lieu de send (voir ci-dessous)
  • ouverture de plusieurs fichiers avec la bibliothèque des cartes mémoires SD (par Lady Ada !)

Concernant les cartes supportées

  • ajout de l’Arduino Mini avec un ATmega328
  • ajout des pilotes et du firmware pour les dernières versions d’Arduino Uno, Mega et Mega ADK Androïd

Divers

  • le changement de nom de "WProgram.h", voir problèmes ci-dessous
  • les fonctions "write", "print" et "println" renvoient un nombre de caractères
  • nouvelles classes abstraites pour les appels réseaux Client, Server, et UDP
  • la définition des pattes change d’emplacement
  • des macros pour accéder aux pattes I2C
  • nouvelle version d’avrdude

Erreurs rencontrées

Voici la première :

C:\POBOT\LOGICIELS\arduino-1.0\hardware\tools\avr\bin\avr-ar: WInterrupts.c.o: No such file or directory

Mystère, une seconde compilation n’a pas reproduit l’erreur.

Voici la seconde :

In file included from Articulation.cpp:1:
/Articulation.h:5:22: error: WProgram.h: No such file or directory

Celle-ci est plus importante : WProgram.h a été remplacé par Arduino.h, il faut donc mettre à jour tous vos programmes. Il faut écrire un code qui teste la version pour être compatible avec plusieurs environnements :


#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

Voici la troisième :
As of Arduino 1.0, the Wire.send() function was renamed to Wire.write() for consistency with other libraries.

Dans ce cas c’est très simple, puisque Arduino a l’amabilité de nous expliquer la cause et la solution. Mais ce n’est pas si simple, car la bibliothèque I2C (TwoWire ou Wire) hérite de Print, et il y a donc ambiguité lorsqu’on écrit :
Wire.write(0x09);

Il faut alors écrire :
Wire.write((byte)0x09);

Voici un problème rencontré par Luc avec la bibliothèque CLCD, sans aucun doute imputable à la version 1.0 :

In file included from TestCLCD.cpp:7:
C:\arduino-1.0\libraries\CLCD/CLCD.h:35: error: conflicting return type specified for 'virtual void CLCD::write(uint8_t)'
C:\arduino-1.0\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'

Le problème apparait avec pas mal de bibliothèque (WiFly shield par exemple), il faut désormais retourner une taille.

Encore un problème :

print(var,BYTE); n’est plus possible car non supporté. Il faut écrire write(var);.

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.