Problème de compilation avec la carte Arduino Nano Every

Bonjour,

J’ai comme projet de faire une souris télécommandée et autonome pour mon chat.
J’ai acheté une Arduino Nano Every oficielle et je n’arrive pas à compiler le code.

J’ai des messages d’erreur pointent vers la librairie “IRremote.h” de sheriff qui me sert pour télécommander la souris.
Voici les messages d’erreur (le début seulement) :

Arduino : 1.8.12 (Linux), Carte : "Arduino Nano Every, None (ATMEGA4809)"

In file included from /home/electrocat/Arduino/libraries/IRremote/IRremoteInt.h:111:0,
                 from /home/electrocat/Arduino/libraries/IRremote/IRremote.h:24,
                 from /home/electrocat/Arduino/libraries/IRremote/IRremote.cpp:23:
/home/electrocat/Arduino/libraries/IRremote/IRremote.cpp: In function 'void TIMER2_COMPA_vect()':
/home/electrocat/Arduino/libraries/IRremote/boarddefs.h:95:32: error: no match for 'operator|=' (operand types are 'PORT_t {aka PORT_struct}' and 'int')
 # define BLINKLED_ON()  (PORTB |= B00100000)
/home/electrocat/Arduino/libraries/IRremote/IRremote.cpp:193:10: note: in expansion of macro 'BLINKLED_ON'
     else BLINKLED_ON() ;   // if no user defined LED pin, turn default LED pin for the hardware on
          ^~~~~~~~~~~
/home/electrocat/Arduino/libraries/IRremote/boarddefs.h:96:33: error: no match for 'operator&=' (operand types are 'PORT_t {aka PORT_struct}' and 'int')
 # define BLINKLED_OFF()  (PORTB &= B11011111)
/home/electrocat/Arduino/libraries/IRremote/IRremote.cpp:195:10: note: in expansion of macro 'BLINKLED_OFF'
     else BLINKLED_OFF() ;   // if no user defined LED pin, turn default LED pin for the hardware on
          ^~~~~~~~~~~~
In file included from /home/electrocat/Arduino/libraries/IRremote/IRremoteInt.h:111:0,
                 from /home/electrocat/Arduino/libraries/IRremote/IRremote.h:24,
                 from /home/electrocat/Arduino/libraries/IRremote/irRecv.cpp:1:
/home/electrocat/Arduino/libraries/IRremote/irRecv.cpp: In member function 'void IRrecv::enableIRIn()':
/home/electrocat/Arduino/libraries/IRremote/boarddefs.h:234:3: error: 'TCCR2A' was not declared in this scope
   TCCR2A = _BV(WGM21); \
   ^
/home/electrocat/Arduino/libraries/IRremote/irRecv.cpp:127:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
  TIMER_CONFIG_NORMAL();

  ^~~~~~~~~~~~~~~~~~~
/home/electrocat/Arduino/libraries/IRremote/boarddefs.h:234:3: note: suggested alternative: 'TCB2'
   TCCR2A = _BV(WGM21); \
   ^
/home/electrocat/Arduino/libraries/IRremote/irRecv.cpp:127:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
  TIMER_CONFIG_NORMAL();

Alors que sur une Arduino Uno je n’ai aucune erreur, mais j’ai besoin d’une carte plus petite. :confused:
J’ai déjà essayé avec différent programmeurs (compilateurs) mais rien ne change.

Et voici mon code (Les parties qui utilisent le recepteur IR seulement :

#include <IRremote.h>

const char DIN_RECEPTEUR_INFRAROUGE = 2;

IRrecv MonRecepteurInfraRouge(DIN_RECEPTEUR_INFRAROUGE);

decode_results MessageRecu;

void loop() {
if (mode == "Tele") { // Si il faut passer en mode télécommandé                                                                  //
  vitesse_plus_mt_droit = 0;                                    //
  vitesse_moins_mt_droit = 0;                             //
  vitesse_plus_mt_gauche = 0;                                   //
  vitesse_moins_mt_gauche = 0;  
  mode = prog_IR();
  }
  else if (mode == "Auto") { // Si il faut passer en autonome
    mode = prog_US();
  }
  else if (mode == "Stop") { // Si il faut passer en stop
    Serial.println ("STOP !!!");
    analogWrite(plus_mt_droit, 0);
    analogWrite(moins_mt_droit, 0);
    analogWrite(plus_mt_gauche, 0);
    analogWrite(moins_mt_gauche, 0);
  }
  if (MonRecepteurInfraRouge.decode(&MessageRecu)) {
    if (MessageRecu.value == 0xFFB04F) { // #
      mode ="Tele";
    }
    if (MessageRecu.value == 0xFF6897) { // *
      mode = "Auto";
    }
    MonRecepteurInfraRouge.resume();
  }  
}

Merci d’avance pour vos réponses.

Electrocat

je pense que cette librairie ne supporte pas la Nano Every qui n'est pas une Nano "de base", elle utilise un ATMega4809.

Supported Boards

Arduino Uno / Mega / Leonardo / Duemilanove / Diecimila / LilyPad / Mini / Fio / Nano etc. Teensy 1.0 / 1.0++ / 2.0 / 2++ / 3.0 / 3.1 / Teensy-LC; Credits: @PaulStoffregen (Teensy Team) Sanguino ATmega8, 48, 88, 168, 328 ATmega8535, 16, 32, 164, 324, 644, 1284, ATmega64, 128 ATtiny 84 / 85 ESP32 (receive only) ESP8266 is supported in a fork based on an old codebase that isn't as recent, but it works reasonably well given that perfectly timed sub millisecond interrupts are different on that chip. See https://github.com/markszabo/IRremoteESP8266 Sparkfun Pro Micro

passez sur une Nano standard....

+1

Mieux vaut oublier pour l'instant les soi-disant "Nouvelles Nano" si l'on compte utiliser des librairies 'pointues' comme celle-ci, des librairies taillées sur mesure pour un ou plusieurs microcontrolleurs bien définis.

Ces "Nouvelles Nano" ne bénéficient pas encore de l'adaptation ou de portage de librairies à l'échelle ou cela été fait pour ESP8266 et ESP32

Rebonjour J-M-L et al1fch,

Merci pour vos réponses même si je suis un peu dégoutté car j'ai fait achat pour rien... :'(

Je vais donc acheter une Nano "de base".

Oui ils ont été très légers dans la doc parce qu’ils disent

An Improved Arduino Nano If you used Arduino Nano in your projects in the past, the Nano Every is a pin-equivalent substitute. Your code will still work, and you will NOT need to re-wire those motors you planned in your original design. The main differences are: a better processor, and a micro-USB connector.

Écrivez leur en disant que vous voulez la retourner pour publicité mensongère... on sait jamais, mais j’ai des doutes...

bon en pratique c’est plus un mensonge par omission, il faut s’attendre en effet à ce que les librairies non officielles présentent des différences ou incompatibilités, surtout dès qu’on utilise des resources matérielles comme les timers. Leur engagement est plutôt de fournir les bibliothèques de base....

Enfin rien ne vous empêche de vous pencher sur la spec du nouveau processeur et de proposer une version de la bibliothèque IR c’est ça aussi l’open source....

Une nano classique c'est toujours 20€ depuis 10 ans chez arduino mais ailleurs c'est seulement 2€. Et c'est eactement la même chose.

Juste si tu es sous Windows il faudra charge un pilote (driver) pour le ch340G. Si tu es sous linux il n'y a rien à faire : linux se débrouille tout seul.

je suis un peu dégoutté car j'ai fait achat pour rien... :'(

Non , juste un achat prématuré.... ces cartes sont intéressantes mais il faut les considérer comme 'pas finies'.... Un jour ou l'autre elles seront plus largement exploitables et leurs avantages seront constatables.

Bonjour à vous tous,

En fait j'avais déjà acheté une nano chinoise mais je n'arrivait plus à téléverser le code (messages d'erreur avrdude not in sync PS : si vous vous avez des idées pour résoudre le problème, elles sont las bienvenues !) et j'avais déjà cherché sur le forum de l'aide mais rien ne changeait, doc j'ai voulu acheté une nano officielle et finalement j'ai pris une nano every car son prix était beaucoup plus bas.

En tout cas maintenant je me renseignerai plus avant d'acheter !

@J-M-L Je vais leur écrire pour leur dire de revoir la doc !

Merci à tous !

Electrocat

une nano chinoise

si vous êtes sous windows, il faut installer un driver pour le CH340 afin qu'elle soit reconnue. vous aviez regardé le post qui est tout en haut du forum "ARDUINO : problèmes de téléversement" ?

Bonjour J-M-L,

Oui j'ai déjà regardé et je suis sous Ubuntu.

Electrocat

et pas ISP, pas moyen de lui remettre un bootloader propre?

Electrocat: Bonjour J-M-L, Oui j'ai déjà regardé et je suis sous Ubuntu. Electrocat

Sous Linux il n'y a rien à faire cela doit fonctionner.

mais je n'arrivait plus à téléverser le code

Cela signifie qu'avant "la panne" tu y arrivais ?

Bonjour,

Je viens de re-rechercher et après un sacré bout de temps je suis tombé sur ce topic, et le message #20 à résolu mon problème avec la nano chinoise.

@68tjs : Oui, avant j’arrivai à téléverser le code.

Sinon les Arduinos Nano every me serviront bien à quelque chose ! ;)

En tout cas, merci quand-même pour votre aide. :D

Electrocat

OK , merci pour le retour mais il faut peut être préciser que là tu parles de la carte Nano 'chinoise' ( cf message #7) pas de la carte Nano Every du titre du fil de discussion.

Une lecture 'en diagonale' pourrait laisser penser que les Nano Every 'dernier cri' ont un vieux bootloader !!

Electrocat: Je viens de re-rechercher et après un sacré bout de temps je suis tombé sur ce topic, et le message #20 à résolu mon problème.

ce n'est quand même pas satisfaisant.. maintenant que vous savez que votre carte est fonctionnelle, installez un bootloader "moderne" dessus... ça vous simplifiera la vie !

il y a pas mal de tutos en ligne, voici le premier que j'ai trouvé ou encore un autre ici

Bonsoir,

@al1fch : J'ai modifié mon post et merci pour l'information ! ;)

@J-M-L : Merci pour les tutos, je le ferai demain ! :D

Bonne soirée à tout les deux !

Electrocat

Bonjour J-M-L,

J'ai essayé les deux tutos plusieurs fois et ça ne change rien. :( Mais bon, ça marche quand même avec la technique du reset !

Electrocat

Vous avez réussi à remettre le nouveau boot loader ?

Rebonjour J-M-L,

Oui, enfin apparemment, il me met "Gravure de la séquence d’initialisation terminée." mais j'ai les mêmes messages d'erreur avrdude not in sync quand j'essai de téléverser le code blink alors que je fais exactement comme dans les tutos.

Electrocat

OK... pas glop...