Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ARDUINO] Impossible de compiler sur la carte

Celui qui a la solution est un dieu!

    31 octobre 2014 à 15:35:21

    Bonjour! Voila mon problème, j'ai récemment acquérie une carte arduino MICRO, j'ai voulu tester les fonctions Mouse en créant un programme (sans réfléchir a ce qui allais arriver) qui fait bouger la sourie sans cesse dans tous les sens. Vous l'aurez deviner, maintenant que ma carte Arduino fait bouger la sourie dans tous les sens, impossible de téléverser un nouveau programme sachant que je n'ai plus le contrôle de la sourie!:colere:

    Quelqu'un connais un moyen de supprimer le programme directement sur la carte sans passer par l'ordinateur?? Ou alors d'empécher la carte de prendre le contrôle de la sourie??^^

    Merci beaucoup d'avance parceque j'ai essayer plein de truc mais ca ne fonctionne pas! J'espère que personne me dira "Tampis pour toi, il n'y a rien a faire tu n'a plus qu'a racheter une carte!:diable:

    • Partager sur Facebook
    • Partager sur Twitter
      31 octobre 2014 à 18:15:52

      Ah! Pas mal comme problème, il m'a bien fait rire :)

      Du coup, je t'ai fais un petit programme pour t'aider à gérer la souris.


       Je te préviens, c'est assez bourrin : ce programme désactive littéralement la souris ET le clavier.

      Du coup, une fois lancé, ta souris (que ce soit ta vrai souris ou ta carte arduino) sera complètement désactivée.

      Inutile de t'acharner dessus, temps que mon programme tourne, tu ne pourras rien faire avec le curseur.

      Par contre, il te sera possible de déplacer le curseur à l'aide des touches ZQSD du clavier et de faire un click avec la touche ESPACE.

      Cela devrait donc te permettre d'avoir le contrôle du curseur pour allé cliqué sur le bouton "reprogrammer la carte arduino".

      Une fois que tu as réussi, tu peux appuyer sur la touche "F4" pour couper mon programme et retrouver le contrôle de la souris.


      Bref, je t'invite à ouvrir ton IDE préféré (code block, DEV C++, Visual Studio ... mais pas l'IDE arduino) pour compiler et lancer ce programme C sur ton PC :

      /*
          Utilitaire permettant de bloquer le clavier souris.
      
          Le contrôle de la souris reste possible à l'aide des touches "ZQSD".
          Un click souris peut aussi être simulé avec la touche espace.
      
          La touche F4 permet de stopper cet utilitaire.
      */
      
      
      
      //==================================================
      // Includes
      //==================================================
      
      #include <windows.h>
      #include <stdio.h>
      
      
      
      //==================================================
      // Globals
      //==================================================
      
      HINSTANCE hAppHinstance= NULL;     // Instance de l'application
      HANDLE hThreadHandle = NULL;       // Handle du thread de gestion
      DWORD dwThreadId = 0;              // ID du thread de gestion
      HHOOK hKeyHook = NULL;             // Hook du clavier
      HHOOK hMouseHook = NULL;           // Hook de la souris
      
      
      
      //==================================================
      // KeyEventHook
      //==================================================
      
      __declspec(dllexport) LRESULT CALLBACK KeyEventHook ( int nCode, WPARAM wParam, LPARAM lParam ) {
      
          // État de la propagation de l'event (mettre à 0 pour bloquer l'event)
          int bAllowEvent = 0;    // Event toujours désactivé
      
          // Analyse de l'event si il s'agit d'un appuis sur une touche
          if  ( ( nCode == HC_ACTION ) && ( wParam == WM_KEYDOWN ) ) {
      
              // État du clavier
              KBDLLHOOKSTRUCT kbdllKeyData =  *((KBDLLHOOKSTRUCT*)lParam);
              BYTE cpKeyState[256];
              WORD wKeyData = 0;
      
              // Analyse de l'état du clavier et conversion CODE=>ASCII
              GetKeyboardState(cpKeyState);
              ToAscii(kbdllKeyData.vkCode, kbdllKeyData.scanCode ,cpKeyState, &wKeyData, 0);
      
              // Arrêt du thread si il s'agit de la touche F4
              if ( kbdllKeyData.vkCode == VK_F4 ) {
                  PostThreadMessage(dwThreadId, WM_QUIT, 0, 0);
              }
      
              // Récupération de la position de la souris
              POINT pMousePos;
              GetCursorPos(&pMousePos);
      
              // Mise à jour de la position de la souris si il s'agit des touches "ZQSD"
              switch (wKeyData) {
                  case 'z': pMousePos.y -= 5; SetCursorPos(pMousePos.x, pMousePos.y); break;
                  case 'q': pMousePos.x -= 5; SetCursorPos(pMousePos.x, pMousePos.y); break;
                  case 's': pMousePos.y += 5; SetCursorPos(pMousePos.x, pMousePos.y); break;
                  case 'd': pMousePos.x += 5; SetCursorPos(pMousePos.x, pMousePos.y); break;
                  default : break;
              }
      
              // Simulation d'un click souris si il s'agit de la touche ESPACE
              if ( wKeyData == ' ' ) {
                  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
              }
      
          }
      
          // Propagation de l'event
          if ( bAllowEvent ) {
              return CallNextHookEx(hKeyHook, nCode, wParam, lParam);
          } else {
              return -1;
          }
      
      }
      
      
      
      //==================================================
      // MouseEventHook
      //==================================================
      
      __declspec(dllexport) LRESULT CALLBACK MouseEventHook ( int nCode, WPARAM wParam, LPARAM lParam ) {
      
          // État de la propagation de l'event (mettre à 0 pour bloquer l'event)
          int bAllowEvent = 1;
      
          // Désactivation de l'event si il s'agit d'un déplacement
          if ( ( nCode == HC_ACTION ) && ( wParam == WM_MOUSEMOVE ) ) {
              bAllowEvent = 0;
          }
      
          // Propagation de l'event
          if ( bAllowEvent ) {
              return CallNextHookEx(hKeyHook, nCode, wParam, lParam);
          } else {
              return -1;
          }
      
      }
      
      
      
      //==================================================
      // MainThreadRoutine
      //==================================================
      
      DWORD WINAPI MainThreadRoutine (LPVOID lParam) {
      
          // Récupération de l'instance de l'application
          hAppHinstance = GetModuleHandle(NULL);
      
          // Démarrage des hooks
          if ( hAppHinstance != NULL ) {
              hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyEventHook, hAppHinstance, 0);
              hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)MouseEventHook, hAppHinstance, 0);
          }
      
          // Lancement de la boucle des messages
          if ( ( hKeyHook != NULL ) && ( hMouseHook != NULL ) ) {
              MSG message;
              while ( GetMessage(&message, NULL, 0, 0) ) {
                  TranslateMessage(&message);
                  DispatchMessage(&message);
              }
          }
      
          // Arrêt des hooks
          if ( hKeyHook   != NULL ) { UnhookWindowsHookEx(hKeyHook);   }
          if ( hMouseHook != NULL ) { UnhookWindowsHookEx(hMouseHook); }
      
          // Fin !
          return 0;
      
      }
      
      
      
      //==================================================
      // main
      //==================================================
      
      int main(int argc, char *argv[])
      {
      
          // Création du thread principal
          hThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MainThreadRoutine, NULL, 0, &dwThreadId);
      
          // Attente de l'arrêt du thread
          if (hThreadHandle) {
              WaitForSingleObject(hThreadHandle, INFINITE);
          }
      
          // Fin !
          return 0;
      
      }
      
      
      



      • Partager sur Facebook
      • Partager sur Twitter
        2 novembre 2014 à 14:36:31

        Impressionnant !

        Tu aurais aussi pu exécuter ce batch :

        timeout 10

        avrdude machin truc qui programme ton arduino

        lancer, brancher l'arduino, attendre

        • Partager sur Facebook
        • Partager sur Twitter
          2 novembre 2014 à 15:03:13

          C'est pas faux.

          On aurait surement aussi pu faire ça avec une macro du genre :

          waitMs(10000);

          setCursorPos(x, y);

          mouseClick();

          En ayant pris soin de changer x;y avec la position du bouton "reprogrammer la carte".

          Mais bon, pourquoi faire simple quand on peut faire compliqué ?

          • Partager sur Facebook
          • Partager sur Twitter
            3 novembre 2014 à 13:10:34

            Merci beaucoup c'est génial que quelqu'un ce soit donner tous ce mal pour résoudre mon problème!!! en plus le code fonctionne sur mon PC!! J'ai essayer mais quand je branche l'arduino, la sourie "force" et bouge quand même, moin mais suffisament pour faire beuger l'ordinateur :/ Je vais quand meme esssayer encore et encore et j'espere y arriver :)

            Merci beaucoup quand meme!!

            -
            Edité par pierredc97 3 novembre 2014 à 13:14:47

            • Partager sur Facebook
            • Partager sur Twitter
              3 novembre 2014 à 13:48:07

              Tu as essayé de faire une petit macro pour simuler un clic à un endroit précis au bout d'un certains temps ?

              Ainsi, même si ta souris fait n'importe quoi, c'est la macro qui appuiera sur le bouton "reprogrammer".

              • Partager sur Facebook
              • Partager sur Twitter
                3 novembre 2014 à 16:56:25

                Oui sinon je peut faire en sorte qu'au bout de 60sec(le temps que la carte sois reconnue par le logiciel avant la reprogrammation), le programme que tu ma donner tape le raccourcie clavier Ctrl+u qui remplace sur l'IDE Arduino le click sur le bouton reprogrammer? (je ne sais pas coment faire donc si tu peut me donner un exemple stp :) )
                • Partager sur Facebook
                • Partager sur Twitter
                  3 novembre 2014 à 18:38:48

                  Si y'a un raccourcit clavier, t'as pas besoin de programme ;)

                  1/ Tu lances ton IDE arduino avec le programme de démo inoffensif (celui qui fait clignoter la LED)

                  2/ Tu branches ta carte arduino

                  3/ Tu fais éventuellement un ALT + TAB pour revenir sur ton IDE arduino si une fenêtre est apparut

                  4/ Tu fais un CTRL + U

                  Et voila, c'est fini :)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 novembre 2014 à 13:11:13

                    Malheureusement ce n'est pas aussi simple que cela j'ai deja bien essayer :) J'ai toujours la sourie qui bouge quand je branche la carte quelqu'un a une autre idee?

                    Merci d'avance!

                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 novembre 2014 à 14:55:48

                      Oui, et alors ? Si tu as des raccourcis clavier, tu n'as pas besoin de souris ;)

                      Tu peux donc lancer le transfert à coup de ALT/ATB (pour changer les fenêtres), ALT & ENTER (pour valider une éventuel boite de dialogue qui apparait) et CRLT+U (pour lancer le transfert).

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 novembre 2014 à 18:01:47

                        Petit détail, la sourie bouge tellement rapidement que ca fait beuger l'ordinateur et les fenetre s'ouvre et ce ferme tous aussi rapidement :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 novembre 2014 à 18:52:48

                          Ah ouai, c'est chaud là --'

                          Voici quelques autres pistes à explorer :

                          - essayer de d'identifier et désactiver (ou désinstaller) le driver de souris qu'utilise l'arduino (surement le périphérique "souriçs HID" dans le gestionnaire de périphériques)

                          - voir si il n'est pas possible de reprogrammer la carte arduino en la maintenant en reset

                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 novembre 2014 à 19:03:36

                            Ou est-ce que je pourrais trouver le driver??

                            Non malheureusement ce n'est pas possible de programmer la carte en maintenant le reset :(

                            Merci quand meme!

                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 novembre 2014 à 19:24:44

                              Sous windows Seven : le "gestionnaire de périphériques" se trouve dans la partie "matériel et audio" du "panneau de configuration"

                              Pour y accéder facilement, tu peux ouvrir un dossier (n'importe lequel) et tu taper ceci dans la barre d'adresse : Panneau de configuration\Matériel et audio

                              Après, il te faut chercher les drivers de souris et les désactiver :

                              ATTENTION: essayes de réfléchir à comment tu pourras réactiver le driver avant de le faire (car tu devras tout faire au clavier) !!!

                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 novembre 2014 à 8:18:03

                                d'acc je vais essayer merci!! ;)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                [ARDUINO] Impossible de compiler sur la carte

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown