Migration Arduino Uno vers Arduino Leonardo

Cet article traite de la migration de l’application CPL décrite dans un article précédant “Application domotique avec Arduino et CPL ” accessible ici vers une plateforme Arduino Leonardo.

La carte Arduino Leonardo (présentation ICI) est la première carte Arduino à utiliser une “vrai” liaison USB :
The Leonardo differs from all preceding boards in that the ATmega32u4 has built-in USB communication, eliminating the need for a secondary processor. This allows the Leonardo to appear to a connected computer as a mouse and keyboard, in addition to a virtual (CDC) serial / COM port. It also has other implications for the behavior of the board; these are detailed on the getting started page.

Un des premiers changements est de changer la liaison série par défaut de l Arduino Uno vers la liaison série non USB de l’Arduino Leonardo (car la liaison série par défaut de l’Arduino Uno est l’USB). La librairie Xbee doit donc être modifie (merci a http://arduino.cc/forum/index.php/topic,111354.0.html) en remplaçant la ligne:

_serial = &Serial;

par :

#if defined(USBCON)
   _serial = &Serial1;
#else
   _serial = &Serial;
#endif

Il faut aussi modifier la création de l’objet X10 pour ne pas utiliser une interruption “custom” car elles ne fonctionnent pas sur l’Arduino Leonardo voir http://vort.org/tag/bugs/ et http://code.google.com/p/arduino/issues/detail?id=714

On va donc utilise une interruption standard sur le pin 2 grâce au code suivant :

X10ex x10ex = X10ex(
  1, // Zero Cross Interrupt Number (2 = "Custom" Pin Change Interrupt)
  2, // Zero Cross Interrupt Pin (Pin 4-7 can be used with interrupt 2)
  9, // Power Line Transmit Pin 
  10, // Power Line Receive Pin
  true, // Enable this to see echo of what is transmitted on the power line
  powerLineEvent, // Event triggered when power line message is received
  1, // Number of phases (1 = No Phase Repeat/Coupling)
  50 // The power line AC frequency (e.g. 50Hz in Europe, 60Hz in North America)
);

au lieu de

X10ex x10ex = X10ex(
  2, // Zero Cross Interrupt Number (2 = "Custom" Pin Change Interrupt)
  4, // Zero Cross Interrupt Pin (Pin 4-7 can be used with interrupt 2)
  5, // Power Line Transmit Pin 
  6, // Power Line Receive Pin
  true, // Enable this to see echo of what is transmitted on the power line
  powerLineEvent, // Event triggered when power line message is received
  1, // Number of phases (1 = No Phase Repeat/Coupling)
  50 // The power line AC frequency (e.g. 50Hz in Europe, 60Hz in North America)
);

Après ça… tout fonctionne 😉

J’upload ici le REPO complet fonctionnel : ED2