En cours Erreur de serial1

  • Auteur de la discussion gaston83
  • Date de début
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #1
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:
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 266
Corsier-sur-Vevey (Vaud)
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
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 266
Corsier-sur-Vevey (Vaud)
Salut Gaston
Tu l'as dit.... mais je sais plus si on se Vou-voyez ou Tu-toyez.
Je n'ai aucun problème avec ça, sur les forums, le tutoiement est le plus courant.

Cordialement
jpbbricole
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #5
Je n'ai aucun problème avec ça, sur les forums, le tutoiement est le plus courant.
Ok, ça roule...

et puisque je te tiens... as-tu suivi mes péripéties avec le HC-05 ?
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 266
Corsier-sur-Vevey (Vaud)
Bonsoir Gaston
et puisque je te tiens... as-tu suivi mes péripéties avec le HC-05 ?
Oui, plus ou moins, mais je n'ai jamais utilisé de HC-05...
J'en ai en commande.

Cordialement
jpbbricole
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #7
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
Nouveau
5 Avr 2015
47
Bonjour Gaston,
a l’instant (19h10), cela fonctionne parfaitement
Jacques
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 266
Corsier-sur-Vevey (Vaud)
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
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #10
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
15 Oct 2009
2 283
indre et loire
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
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #12
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.
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 266
Corsier-sur-Vevey (Vaud)
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
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #14
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:
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 266
Corsier-sur-Vevey (Vaud)
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
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #17
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:
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #19
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
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #21
gaston83
gaston83
Compagnon
17 Fev 2016
1 540
FR-71520
  • Auteur de la discussion
  • #22
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 ...
 
Haut