Arduino Leornardo qui ne se reset pas

Bonjour j'aimerais vous demandez votre aide car je ne trouve rien et je suis vraiment a cours de possibiliter... Je suis entrain de créer une "boite a boutons" pour mon pc et j'utilise un leonardo (ou pro micro je ne sais pas trop c'est aliexpress) et je n'arrive pas a reset ma carte car, j'ai mis un code mais il ne marche pas et surtout il n'apparait plus en tant que port COM mais comme périphérique (non reconnu en plus de ça) donc Arduino IDE ne le voit plus et du coup je voulais le reset (pas de bouton donc par RST et GND) pour le rentrer en boot loader sauf que sur l'ide 2.x il m'affiche une erreur :

Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.

Programmer supports the following devices:
Device code: 0x44

Donc j'ai vu qu'il fallait passer sur une version avant 2.x donc je suis en 1.8.x et j'ai tenté d'effacer l'ancien code avec EEPROM clear ou je ne sais pas quoi mais même si la carte la téléverser il ne se passe toujours rien et il le détecte toujours en périphérique non reconnu.
Merci d'avance !

Sorry for the English. The fact that it's in red is confusing but it's not an error.

Yeah I saw this but I don't understand why this don't work, i would need to erase the old code i think but I didn't found anything about it, and the RST just make it in bootloader but it doesn't erase the code inside it !

Il suffit de programmer un autre code.
Par exemple

  • tu crées un nouveau projet dans l'IDE.
  • tu compiles se projet vide
  • tu le téléverses

L'ancien code est remplacé.

EEPROM clear efface l'EEPROM pas la mémoire flash qui contient le code.

Essayez de télécharger un croquis innocent comme

void setup()
{
Serial.begin(115200);
while (!Serial)
;
Serial.println("Bonjour");
}

void loop()
{
Serial.println(millis());
delay(1000);
}

Cela fonctionne-t-il comme prévu ? Pouvez-vous le télécharger plusieurs fois sans utiliser l'astuce de réinitialisation ?

Si votre carte disparaît après avoir chargé votre code, votre code a un bug qui affecte la détection de votre carte.

Vous devrez publier votre code afin que d'autres puissent essayer de trouver d'éventuelles erreurs.

Donc j'ai testé de ne "rien" mettre dans le code et aussi le code "Bonjour" que vous m'avez donné mais rien ne change (je rappelle que la seule manière d'importé mon code et de passer par le "bootloader" en faisont un pont entre RST et GND) Pour l'instant j'aimerais juste pouvoir le remttre COMPLETEMENT a zéro, est ce que c'est possible d'une autre maniere que d'importé un code car ca ne marche pas (sauf si vous savez comme je fais pour l'importer de cete manière).

Le code devait ressembler a peu près a ça (c'est du ChatGPT donc j'ai tellement de version de ce code que je ne serai pas dire le qu'elle exactement) :

const int colonnePins[3] = {2, 3, 4};
const int lignePins[4] = {5, 6, 7, 8};

void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++) {
pinMode(colonnePins[i], OUTPUT);
digitalWrite(colonnePins[i], HIGH);
}
for (int i = 0; i < 4; i++) {
pinMode(lignePins[i], INPUT_PULLUP);
}
}

void loop() {
for (int col = 0; col < 3; col++) {
digitalWrite(colonnePins[col], LOW);
for (int ligne = 0; ligne < 4; ligne++) {
if (digitalRead(lignePins[ligne]) == LOW) {
int keyIndex = col + ligne * 3;
Serial.println(keyIndex); // Envoyer un chiffre unique (par exemple "0", "1", "2", ...)
delay(200); // Anti-rebond pour éviter la répétition
}
}
digitalWrite(colonnePins[col], HIGH);
}
}

Si vous devez utiliser l'astuce de réinitialisation à chaque fois (même avec des croquis innocents), la seule raison à laquelle je peux penser est que votre carte n'est pas ce que vous pensez qu'elle est.

Pouvez-vous publier un lien (URL) vers ce que vous avez acheté ?

Le Pro Micro est disponible en deux versions : une 5 V/16 MHz et une 3,3 V/8 MHz. Si vous programmez la carte comme une Leonardo ou une Micro, elle appliquera les paramètres du croquis téléchargé qui sont applicables à la version 5 V/16 MHz. Si votre version est une version 3,3 V/8 MHz, les « timings » sont désactivés et la carte ne réagira pas lorsque le PC l'interrogera.

Veuillez confirmer la carte que vous avez sélectionnée dans l'IDE.


Remarque :

  1. À l'avenir, veuillez publier le code en utilisant des balises de code.
    ```cpp
    votre code ici
    ```
    résultera en
votre code ici
  1. À l'avenir, lorsqu'on vous demandera de publier des messages d'erreur, veuillez utiliser des balises de code.
    ```text
    vos erreurs ici
    ```
    entraînera
vos erreurs ici

pas de soucis voici le lien :
https://fr.aliexpress.com/item/1005006645661865.html?spm=a2g0o.order_list.order_list_main.5.189d5e5btbiod0&gatewayAdapt=glo2fra

Et merci pour ces conseil je me demendais comment faire un truc plus propre bah maintenant je sais merci !

Vous n'avez pas répondu à la question "Veuillez confirmer la carte que vous avez sélectionnée dans l'IDE".

Notes à l'avance

  1. J'utilise une version anglaise de l'IDE.
  2. Instructions pour l'IDE 2.x ; les instructions pour l'IDE 1.8.x sont similaires.
  3. J'utilise Google Translate car mon français est presque inexistant. Je peux commander une bière à Paris, mais c'est à peu près tout :slight_smile:

Le produit dans le lien indique qu'il s'agit d'une version 5V/16MHz. Ce n'est peut-être pas le cas.

Je vous suggère de procéder comme suit.

  1. Dans l'IDE sous file/preferences (fichier/préférences?), ajoutez l'URL de carte supplémentaire suivante : https://raw.githubusercontent.com/sparkfun/Arduino_Boards/main/IDE_Board_Manager/package_sparkfun_index.json

  1. À l'aide de tools/board/boards manager dans l'IDE, ajoutez les cartes SparkFun AVR.

  1. Dans l'IDE sous tools/board (outils/carte?), sélectionnez le SparkFun Pro Micro parmi les cartes SparkFun AVR.

  1. Dans l'IDE sous *tools/processor (outils/processeur?), sélectionnez le ATmega32U4 (3,3 V, 8 MHz).

  1. Effectuez un téléchargement d'un croquis innocent ; la première fois, vous aurez besoin de l'astuce de réinitialisation.

  2. Effectuez à nouveau un téléchargement ; cela devrait maintenant fonctionner sans problème.


Faites-moi savoir si cela fonctionne ou non.

Désolé pour le temps d'attente j'était en déplacement...

Alors je pense que ça a marché en partie car il est maintenant affiché en permanence par contre le simple "Blink" ne fonctionne pas mais je suppose que c'est juste que soit il y en pas ou alors pas le même nom mais du coup j'aurais savoir ce que vous pensiez de ce code que m'as passé ChatGPT pour voir si vous voyez déjà de gros problème... :slight_smile:

#include <Keyboard.h>  // Inclure la bibliothèque HID pour émuler un clavier

const int colonnePins[3] = {2, 3, 4};  // Broches des colonnes
const int lignePins[4] = {5, 6, 7, 8}; // Broches des lignes

void setup() {
  // Configurer les colonnes en sorties, initialisées à HIGH
  for (int i = 0; i < 3; i++) {
    pinMode(colonnePins[i], OUTPUT);
    digitalWrite(colonnePins[i], HIGH);
  }
  
  // Configurer les lignes en entrées avec résistances pull-up
  for (int i = 0; i < 4; i++) {
    pinMode(lignePins[i], INPUT_PULLUP);
  }
  
  // Initialiser la bibliothèque Keyboard
  Keyboard.begin();
}

void loop() {
  // Balayer les colonnes
  for (int col = 0; col < 3; col++) {
    digitalWrite(colonnePins[col], LOW);  // Activer la colonne courante
    for (int ligne = 0; ligne < 4; ligne++) {
      // Si un bouton est pressé dans la matrice
      if (digitalRead(lignePins[ligne]) == LOW) {
        int keyIndex = col + ligne * 3;  // Calculer l'index de la touche
        envoyerTouche(keyIndex);  // Envoyer la touche correspondante
        delay(200); // Anti-rebond
        while (digitalRead(lignePins[ligne]) == LOW);  // Attendre que le bouton soit relâché
      }
    }
    digitalWrite(colonnePins[col], HIGH);  // Désactiver la colonne courante
  }
}

void envoyerTouche(int keyIndex) {
  // Envoyer une touche en fonction de l'index de la touche
  switch (keyIndex) {
    case 0:
      Keyboard.press('a');
      break;
    case 1:
      Keyboard.press('b');
      break;
    case 2:
      Keyboard.press('c');
      break;
    case 3:
      Keyboard.press('d');
      break;
    case 4:
      Keyboard.press('e');
      break;
    case 5:
      Keyboard.press('f');
      break;
    case 6:
      Keyboard.press('g');
      break;
    case 7:
      Keyboard.press('h');
      break;
    case 8:
      Keyboard.press('i');
      break;
    case 9:
      Keyboard.press('j');
      break;
    case 10:
      Keyboard.press('k');
      break;
    case 11:
      Keyboard.press('l');
      break;
  }
  
  // Relâcher la touche
  Keyboard.releaseAll();
}

Donc c'est une boite a bouton de 3 colonnes et 4 lignes, et souder en matrice que j'aimerais pouvoir le configurer comme si j'avais branché un pc de 12 boutons. Pour qu'après si possible avoir plusieurs config que je pourrai alterner entre (bureautique/Simu DCS/Jeux/...) pour pouvoir avoir beaucoup plus de possibilité.

Bon du coup j'ai tenté le tout pour le tout ai je l'ai téléverser et... il marche !
Mais j'aurai aimé savoir un truc, quand je faisait des recherches pour la créer j'ai trouvé une info comme quoi il existait des touches de fonction (F1/F2/F3...) qui allait plus loin que F12, et je pense que ça serait parfait pour mon utilisation car pas besoin de gérer des erreurs de raccourcis qui poserait problème avec ceux qui pourrais déjà exister...

Pas de problème

Parce que tu utilises maintenant l'option 3.3V, 8MHz ?

La Pro Micro n'a pas de LED sur la broche 13 comme les autres cartes.

Jetez un oeil sur https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/all#example-1-blinkies pour voir comment vous pouvez utiliser la LED Tx et Rx pour le clignotement.

Il faudrait peut-être ajouter un petit délai (par exemple delay(10)) avant de relâcher avec releaseAll().


Si ton problème d'origine a été résolu, je te propose de démarrer un nouveau sujet sur les éventuelles questions de programmation.

Tu peux marquer ce sujet comme résolu en cliquant sur la case à cocher sous la réponse la plus utile afin que les autres sachent qu'il est résolu.

Bon du coup avec ChatGPT j'ai réussi a le faire marché comme je voulais, donc merci a tous !

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.