Résolu Erreur de serial1

  • Auteur de la discussion gaston83
  • Date de début
G

gaston83

Compagnon
Bonjour à tous,
Voici un sketch que je téléverse depuis plusieurs jours dans ma Leonardo afin de communiquer avec un HC-O5 et avec la commande AT, je modifie ce que je veux.
Je viens à l'instant de modifier l'UART avec AT+UART=38400,0,0 et c'est parfait...

Depuis voici ce que l'IDE me renvoie ... ? Avez-vous une idée ?

1586507486898.png



Tout pour moi, dans mes manip dans l'onglet Outils, j' ai malencontreusement mis une UNO à la place de la Leonardo... et ça ne peut pas fonctionner. Il n'existe pas de Serial1 sur l'UNO

Vala,vala....:smt021
 
Dernière édition:
J

jpbbricole

Compagnon
Bonjour Gaston
Tout pour moi, dans mes manip dans l'onglet Outils, j' ai malencontreusement mis une UNO à la place de la Leonardo...
Le confinement a quand même certains effets secondaires :-D

Cordialement (Soyez prudents!)
jpbbricole
 
G

gaston83

Compagnon
Bonjour à tous,

Je voudrais aller sur le Forum Arduino. Malgré mon email et mot de passe ça ne fonctionne pas. J'ai demandé une réinitialisation il ya trois jours et aucun retour. Est-ce normal ? ou le serveur a pété...
 
J

JMe87

Apprenti
Bonjour Gaston,
a l’instant (19h10), cela fonctionne parfaitement
Jacques
 
J

jpbbricole

Compagnon
Bonsoir Gaston

Comme tu n'as pas reçu de réponse sur l'autre forum (forum que j'ai quitté voire fui!...), fais moi un résumé de ton problème afin que je puisse me "brancher" dessus et essayer de t'aider.

Cordialement
jpbbricole
 
G

gaston83

Compagnon
Bonsoir jpbbricole,

Merci pour ton aide....je vais essayer de faire court.

Avec ton aide du 13 mars 2019 ... et celui de speed37 et le concours du confinement, j'ai fini le code pour mon clavier déporté qui simule ni plu ni moins le clavier du Pc . Je reprends certaines commandes pour Mach3.

J'ai eu des soucis de comprenette avec le Bluetooth mais je suis arrivé à un résultat.

Je fonctionne avec une leonardo - avantage deux ports série, un en USB et l'autre natif que l'on tripote avec Serial1. Je n'utilise donc pas la biblio SoftwareSerial.

Mon montage:

Arduino Leonardo avec un HC-05 ( paramétré en maître).

Côté PC, un HC-06 (qui lui ne peut être que esclave de part sa conception) relié à une interface TTL => USB

Maintenant, lorsque je mets sous tension la Leonardo et que je branche le côté USB sur le PC, la led du HC-05 (Leonardo) clignote rapidement à la même cadence que la led du HC-O6 (USB) sur le PC.

Au bout de 20 secondes, les deux HC sont connectés. C'est à dire que la led du HC-05 cligontes 2 fois toutes les 5 secondes (qui est son fonctionnement normal une fois connecté) et la led du HC-06 reste allumée continuellement ( qui est aussi son fonctionnement normal une fois connecté).


Donc là, j'ai téléversé le petit code suivant pour un test et sur le PC je lance le moniteur série. Le comptage s'affiche correctement.

Donc le couplage et la connexion se font bien.

int counter = 0;

void setup()
{
Serial1.begin(9600);

while (!Serial1)
{
; // wait for serial port to connect. Needed for Leonardo only
}

}


void loop()
{
if (Serial1.available());

counter++;
Serial1.print("Arduino counter: ");
Serial1.println(counter);
delay(500); // wait half a sec
}


C'est maintenant que ça se corse....

Les commandes que l'on envoie pour Mach3 ont le plus souvent le format suivant: KEY_LEFT_ALT + une touche, KEY_LEFT_SHIFT + une touche etc, etc....

Là au niveau du code je suis paumé... je ne sais pas ce qu'il faut faire.
 
S

speedjf37

Compagnon
Bonjour,

@gaston83
Le Leonardo étant un vrai USB il y a la possibilité d’émuler un clavier USB.

En ajoutant les modules Bluetooth comment garder l’émulation clavier ?

JF
 
G

gaston83

Compagnon
Bonjour,

Le Leonardo étant un vrai USB il y a la possibilité d’émuler un clavier USB.

Oui, ça fonctionne très bien si je relie la leonardo et le PC par un câble USB.

Le but c'est de supprimer le câble est faire la liaison par Bluetooth.

Je viens de faire un autre test rapide. J'ai alimenté (seulement) le HC-05 et pareil pour le HC-06, et au bout de 20 secondes ils se sont couplés et connectés. C'est à dire que les led clignotent comme décrit dans le post précédent.
 
J

jpbbricole

Compagnon
Bonjour Gaston
En ajoutant les modules Bluetooth comment garder l’émulation clavier ?
Je plussoie JF

Je résume:
Tu as un Leonardo qui émule le clavier du PC via une liaison USB. Tu veux remplacer ce câble par une liaison Bluetooth côté Arduino et côté PC avec un convertisseur série USB côté PC?
Là au niveau du code je suis paumé... je ne sais pas ce qu'il faut faire.
A mon avis, ce n'est tout simplement pas possible, tu ne peut simplement pas "transporter" cette émulation par BT et, d'ailleurs, la bibliothèque qui fait cette émulation, "s'adresse" à la liaison USB du Leonardo uniquement et ne peut pas être déviée sur Serial1 du Leonardo. Dans ce type d'émulation, la liaison USB Leonardo PC n'est pas une simple liaison série.
Si tu veux avoir une liaison sans fils, tout en gardant le Leonardo comme émulateur, c'est l'utilisation de télécommande infrarouge ou RF24 ou BT avec le Leonardo comme récepteur.

Cordialement
jpbbricole
 
G

gaston83

Compagnon
Si tu veux avoir une liaison sans fils, tout en gardant le Leonardo comme émulateur, c'est l'utilisation de télécommande infrarouge ou RF24 ou BT avec le Leonardo comme récepteur.

Ok, je crois avoir compris.... que si je place une autre leonardo comme récepteur sur le PC ça peut fonctionner (avec le sketch qui va bien). :rolleyes:
 
J

jpbbricole

Compagnon
Bonjour Gaston
Je présume que ce serait pareil avec des modules Wi Fi...
Ou une ficelle, de même :jesors23:
... que si je place une autre leonardo comme récepteur sur le PC ça peut fonctionner (avec le sketch qui va bien).
Oui, dans ton cas, seul le Leonardo et sa liaison USB au PC peut "transporter" cette émulation du clavier/souris. Je ne sait pas ce que tu utilises comme moyen de commandes au niveau du Leonardo, actuellement, pour imaginer une transmission sans fils.

A+
Cordialement
jpbbricole
 
G

gaston83

Compagnon
Voici une photo du système en état de prototype... sur le bureau.

A gauche, la manivelle (le codeur), au milieu la leonardo et à droite le clavier avec une sérigraphie au crayon pour les fonctions doubles avec un bouton de Ctrl.

Dis-moi ce que tu voudrais d'autre... j'envoie.

IMG_20200413_112445_1[1].jpg


IMG_20200413_112747[1].jpg


IMG_20200413_112445_1[1].jpg


IMG_20200413_112747[1].jpg
 
Dernière édition:
G

gaston83

Compagnon
Le code complet... bon, il y a des lignes qui sont doubles, c'est normal... je me suis fais ch*er avec certaines touches du pavé numériques car quand il n'est pas activé se sont les directions qui le sont. La solution que j'ai trouvé, c'est de doubler les lignes pour ces touches. Après, ça fonctionne ... donc ...

/*--------------------------------------------------------------------------------------- '* jpbbricole 2019 03 13 '* modifié gaston 83 (ajout du bouton Fn sur pin 2) et l'aide de speedf37 avec la sélection des axes mouture du 1 avril 2020 */ #include <Encoder.h> // Gestion bouton rotatif #include <Keypad.h> #include <Keyboard.h> #include <HID.h> //------------------------------------- Codeur rotatif #define codRotApin 3 // Pin du port A #define codRotBpin 4 // Pin du port B #define X A0 // Sélection Axe #define Y A1 #define Z A2 const int AXEX = A0; const int AXEY = A1; const int AXEZ = A2; int changeAxe; int changeAxe1; Encoder codRot(codRotApin, codRotBpin); int codRotIncrement = 0; // Direction de l'encodeur +1 ou -1 int compteur = 0; void setup() { pinMode (2, INPUT_PULLUP); // CTRL bouton pour la manivelle pinMode (3, INPUT_PULLUP); // avance X gauche clavier déporté pinMode (4, INPUT_PULLUP); // avance X droite clavier déporté pinMode (AXEX, INPUT_PULLUP); pinMode (AXEY, INPUT_PULLUP); pinMode (AXEZ, INPUT_PULLUP); pinMode (A3, INPUT_PULLUP); // Sélection de l'axe pinMode (A4, INPUT_PULLUP); pinMode (A5, INPUT_PULLUP); Keyboard.begin(); } const byte ROWS = 5; //cinq lignes const byte COLS = 4; //quatre colonnes //char ctrlKey = ('-'); char keys[ROWS][COLS] = { {'I', 'U', '#', '*'}, {'1', '2', '3', 'H'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'L', '0', 'R', 'E'} }; byte rowPins[ROWS] = {5, 6, 7, 8, 9}; //connect to the row pinouts of the keypad byte colPins[COLS] = {13, 12, 11, 10}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void loop() { char key = keypad.getKey(); switch (key) { { case'E': // Entrée if (digitalRead(2) == LOW) { Keyboard.write('F'); // Réglage Avance en Manuel } else { Keyboard.press (KEY_RETURN); // Entrée //Keyboard.release (KEY_RETURN); Keyboard.releaseAll(); } break; case'1': if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé { Keyboard.press (KEY_LEFT_ALT); // Visu Automatique ALT-1 delay(100); Keyboard.press (49); Keyboard.release (49); Keyboard.releaseAll(); } Keyboard.write(219); Keyboard.press (225); Keyboard.releaseAll (); Keyboard.write(219); Keyboard.press (225); Keyboard.releaseAll (); break; case'2': if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé { Keyboard.press (KEY_LEFT_ALT); // Visu Manuel ALT-2 delay(100); Keyboard.press (50); Keyboard.release (50); Keyboard.releaseAll(); } { Keyboard.write(226); // écrit le ciffre 2 Keyboard.releaseAll (); } break; case '3': { while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé { { Keyboard.write(KEY_LEFT_SHIFT); // remontée du Z delay(20); Keyboard.write(211); Keyboard.releaseAll(); } } } { Keyboard.write (211); // PgUp Keyboard.write (227); // écrit le chiffre 3 Keyboard.releaseAll(); } break; case '4': if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé { Keyboard.write ('X'); // écrit X dans le bandeau manuel Keyboard.release ('X'); delay (400); } else { Keyboard.write(228); // écrit le chiffre 4 Keyboard.releaseAll(); } break; case '5': if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé { Keyboard.write ('Y'); // écrit Y dans le bandeau manuel Keyboard.release ('Y'); delay (400); } else { Keyboard.write(219); Keyboard.press (229); // écrit le chiffre 5 Keyboard.releaseAll (); Keyboard.write(219); Keyboard.press (229); // écrit le chiffre 5 Keyboard.releaseAll (); } break; case '6': if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé { Keyboard.write ('W'); // en fait c'est le Z qui est écrit Keyboard.release ('W'); delay (400); } else { Keyboard.press (230); // écrit le chiffre 6 Keyboard.release (230); } break; case '7': if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé { delay(50); Keyboard.press(54); //signe "-" delay(50); Keyboard.release (54); delay (400); } else { Keyboard.press (231); // écrit le chiffre 7 Keyboard.releaseAll (); } break; case '8': if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé { delay(50); Keyboard.press(43); //signe "+" delay(50); Keyboard.release (43); } else { Keyboard.press (232); // écrit le chiffre 8 Keyboard.release (232); } break; case '9': { while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé { { Keyboard.write(KEY_LEFT_SHIFT); // descente du Z delay(20); Keyboard.write(214); Keyboard.releaseAll(); } } } { Keyboard.write(214); // écrit le chiffre 9 Keyboard.press (233); // écrit le chiffre 9 Keyboard.release (233); } break; case 'I': // touche F1 clavier déporté // Tab Affichage panneau de droite if (digitalRead(2) == LOW) { Keyboard.write(KEY_TAB); } else { Keyboard.press (KEY_LEFT_ALT); // Ouverture du menu fichier Gcode et fermeture delay(100); Keyboard.press (102); Keyboard.release (102); Keyboard.releaseAll(); } break; case 'U': // Touche F2 clavier déporté if (digitalRead(2) == LOW) // Arret/Départ cycle en Automatique { Keyboard.press (KEY_LEFT_ALT); delay(100); Keyboard.press (158); Keyboard.release (158); // touche S avec ALT Arret delay(1000); } else // Départ cycle en Automatique { Keyboard.press (KEY_LEFT_ALT); delay(100); Keyboard.press (157); Keyboard.release (157); // touche R avec ALT Départ break; } case '0': // Ctrl O = remise à zéro des axes X et Y if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé { Keyboard.press(KEY_LEFT_CTRL); delay(100); Keyboard.press(79); Keyboard.release(79); Keyboard.releaseAll(); } else { Keyboard.write(219); Keyboard.press (234); // chiffre 0 Keyboard.release (234); Keyboard.write(219); Keyboard.press (234); // chiffre 0 Keyboard.release (234); } break; //************************ Déplacements LEFT-RIGHT et UP-DOWN ************************** case 'L': // "Déplacemnt à Gauche" { while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé { { Keyboard.write(KEY_LEFT_SHIFT); delay(20); Keyboard.write(KEY_LEFT_ARROW); // flèche de Gauche" } } } Keyboard.write(KEY_LEFT_ARROW); break; Keyboard.releaseAll(); case 'R': // "Déplacement à Droite" { while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé { { Keyboard.write(KEY_LEFT_SHIFT); delay(20); Keyboard.write(KEY_RIGHT_ARROW); // "Déplacemnt à Droite" } } } Keyboard.write(KEY_RIGHT_ARROW); break; Keyboard.releaseAll(); case 'B': // "Déplacement Bas" { while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé { { Keyboard.press(KEY_LEFT_SHIFT); delay (50); Keyboard.releaseAll(); } Keyboard.write(KEY_DOWN_ARROW); // "Déplacemnt vers le bas" } } Keyboard.write(KEY_DOWN_ARROW); break; case 'H': // "Déplacement Haut" { while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé { { Keyboard.press(KEY_LEFT_SHIFT); delay (50); Keyboard.releaseAll(); } Keyboard.write(KEY_UP_ARROW); // "Déplacemnt vers le haut" } } Keyboard.write(KEY_UP_ARROW); break; //****************************************************************************************** case '#': // Manuel / Automatique if (digitalRead(2) == LOW) { Keyboard.press (KEY_LEFT_CTRL); // Début cycle Keyboard.press(165); // touche W delay(100); Keyboard.releaseAll(); Keyboard.press (KEY_LEFT_CTRL); Keyboard.press(165); // je répète deux fois la fonction delay(100); // pour qu'elle soit prise en compte Keyboard.releaseAll(); // Pourquoi ??????? } else { Keyboard.press(KEY_LEFT_CTRL); delay(100); Keyboard.press(KEY_LEFT_ALT); delay(100); Keyboard.press('j'); delay(100); Keyboard.releaseAll(); } break; case '*': if (digitalRead(2) == LOW) { Keyboard.press (8); // étoile du clavier déporté pour le Backspace Keyboard.release (8); delay(100); } else { Keyboard.press(KEY_LEFT_ALT); // Réglage du saut 1.00, 0.10, 0.01 delay(100); Keyboard.press('j'); delay(100); Keyboard.releaseAll(); } break; case 'C': // esc du clavier déporté // Passage Continu / Saut { Keyboard.press(KEY_LEFT_CTRL); delay(100); Keyboard.press('j'); delay(100); Keyboard.releaseAll(); } break; } //---------------------------- Choix de l'axe ------------------------------- if (digitalRead(AXEX) == LOW) { changeAxe = KEY_LEFT_ARROW; changeAxe1 = KEY_RIGHT_ARROW; } if (digitalRead(AXEY) == LOW) { changeAxe = KEY_UP_ARROW; changeAxe1 = KEY_DOWN_ARROW; } if (digitalRead(AXEZ) == LOW) { changeAxe = (211); changeAxe1 = (214); } // ----------------------- initialisation codeur ----------------------------- codRotIncrement = codRot.read() / 4; // Divisé par 4 parcequ chaque impulsion ressentie en tournant le bouton // Génère 4 impulsions (https://www.logre.eu/wiki/Codeur_rotatif_incrémental) if (codRotIncrement != 0) // Changement de MS affiché { if (codRotIncrement < 0) { Keyboard.begin(); if (digitalRead(2) == LOW) { { Keyboard.press(KEY_LEFT_CTRL); delay(50); Keyboard.write (changeAxe); delay(50); Keyboard.releaseAll(); } } } if (codRotIncrement > 0) { Keyboard.begin(); if (digitalRead(2) == LOW) { { Keyboard.press(KEY_LEFT_CTRL); delay(50); Keyboard.write (changeAxe1); delay(50); Keyboard.releaseAll(); } } } codRotIncrement = 0; // Remise à Zéro du codeur codRot.write(0); } } } // fin du prog
 
G

gaston83

Compagnon
Bonjour à tous,

Voici l'idée... que j'ai en tête..

Voici l'idée....PNG
 

Fichiers joints

  • RN-HID-User-Guide-v1.0r.pdf
    629 KB · Affichages: 40
G

gaston83

Compagnon
Bonjour à tous,

Le code pour émuler le clavier fonctionne en liaison câble USB. Je vais mettre un second arduino (j'ai un Pro Micro dispo avec une USB native) en réception côté PC avec un autre module Bluetooth.
Je ne vois pas comment faire pour récupérer les commandes du clavier déporté... en terme de programmation. Je dois récupérer des trames, des char, des strings... je ne sais pas.
J'ai besoin d'aide ...
 
N

nico78

Nouveau
Bonjour,

Ce que vous cherchez à faire est tout à fait réalisable en bluetooth, vous n'êtes pas obligé d'envoyer le scancode ou les identifiants des touches du clavier, ni même la combinaison de touche (à partir du clavier déporté), le mieux est d'envoyer directement les lettres, les mêmes que vous traiter dans votre boucle switch case, L R B H etc... et comme vous n'en traitez qu'une à la fois, c'est encore plus simple.
 
G

gaston83

Compagnon
Bonjour,

J'ai essayé avec un HC05, HC06... un mélange un peu de tout , Leonardo, Mega et autres... :hang:

Bon, ça y est... ça fonctionne. J'ai utilisé un ESP32 programmé avec l'Ide Auduino et roule ma poule tout fonctionne... :lol: le top !
 

Sujets similaires

B
Réponses
125
Affichages
10 644
BELGE MARCEL
B
osiver
Réponses
14
Affichages
35 767
osiver
osiver
G
Réponses
10
Affichages
44 533
gaston83
G
Pierrot du 10
Réponses
1
Affichages
23 795
aroy
aroy
thierry74
Réponses
81
Affichages
6 141
Jacquot26
J
M
Réponses
163
Affichages
29 281
lacier
L
T
Réponses
56
Affichages
5 913
MegaHertz
MegaHertz
J
Réponses
104
Affichages
11 388
pierrotprunier
P
K
Réponses
7
Affichages
6 519
MARECHE
M
Haut