En cours Leonardo bootloader help...

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

jpbbricole

Compagnon
Bonjour Gaston

Un petit récapitulatif:
la Leonardo c'est mise à envoyer le même caractère en continu alors que je n'appui même pas sur le bouton de ma carte prototype.
As-tu mis des résistances de PULL-DOWN sur tes entrées de boutons, c'est la réaction typique à des entrées "en l'air" et influencées par le statique ambiant.
Si tu veux dompter ta Leonardo :smt079, mets les entrées des boutons (2,3,4,5,6) au GND ça doit arrêter l'envoi.
J'ai bien la petite Pro Micro aussi à base de 32U4 mais là, j'ai la pétoche...
Il n'y a pas de raison!
Si tu essaies avec et y compris avec une nouvelle Leonardo, n'oublies pas de mettre le commun des touches au +5V, sans résistances de PULL_UP (elles sont internes avec la commande pinMode(downButton, INPUT_PULLUP); ) . et de charger ce programme.

Bon dimanche
Cordialement
jpbbricole
 
G

gaston83

Compagnon
Bonjour jpbbricole,

Oui, j'ai bien noté les modifications hard. C'est fait.... c'est bon avec la petite carte car elle, est bien reconnue.

Le soucis actuel est que la Leonardo n'est plus reconnue dans le gestionnaire de périphérique donc à priori elle est morte ou alors il y a une procédure spéciale pour ressusciter l'USB de la puce 32U4 mais là... je vois pas comment, comme dirait l'autre à la Télé ....:mrbrelle:
 
G

gaston83

Compagnon
Bon, je passe pour l'instant avec cette carte...

J'ai un autre problème. J'explique...

J'ai aussi une carte Duemilanove que je programme sans soucis avec l'IDE Arduino. Son Bootloader, de temps en temps y fou le camp, c'est pas grave et c'est pas mon inquiétude car je le remets en place avec ProgTool et mon programmateur avrisp MKII.

Par contre il m'est impossible de téléverser ce Bootloader avec l'IDE Arduino avec ce MKII. Voilà ce qu'il me renvoi.... j'ai mis un fichier vide pour le test et même un sketch genre Blink c'est pareil.

Aurais-tu une idée...


message.JPG
 
G

gaston83

Compagnon
Bonsoir jpbbricole,
Tout compte fait.... j'ai passé le week sur cette p*tain de carte de m*rde... :smt021:mad: :grilled: mais c'est bon.... je l'ai sauvé ... :roxxx:

J'ai mis mon Arduino Due en programmateur ISP et j'ai tenté pour la n ième fois ....et j'ai téléversé la séquence d'initialisation. Je pense que c'est le fameux BootLoader... et ça a marché.... ne me demande pas pourquoi mais voilà....

Par contre impossible avec le myAvr MKII en ISP... pfffff là je ne vois pas, parce que lui il fonctionne super bien avec Progtool mais seulement pour Aduino Due a base d'Atmega 328.....:spamafote::god:
 
S

speedjf37

Compagnon
Bonsoir jpbbricole,
Tout compte fait.... j'ai passé le week sur cette p*tain de carte de m*rde... :smt021:mad: :grilled: mais c'est bon.... je l'ai sauvé ... :roxxx:

J'ai mis mon Arduino Due en programmateur ISP et j'ai tenté pour la n ième fois ....et j'ai téléversé la séquence d'initialisation. Je pense que c'est le fameux BootLoader... et ça a marché.... ne me demande pas pourquoi mais voilà....

Par contre impossible avec le myAvr MKII en ISP... pfffff là je ne vois pas, parce que lui il fonctionne super bien avec Progtool mais seulement pour Aduino Due a base d'Atmega 328.....:spamafote::god:

Bonjour,

Les mystères et les compatibilités logicielles et matérielles !

Ce qui compte c'est le résultat (et de noter la procédure qui fonctionne pour une autre fois) !

yapluka valider ce fameux émulateur de clavier USB.

JF
 
G

gaston83

Compagnon
Bonjour jpbbricole,

J'essai de tester ce programme pour codeur rotatif sur mon arduino Due et j'ai l' erreur " #include <Wiring.h>

// --- Programme Arduino ---
// Copyright X. HINAULT - Créé le 09/02/2011
// www.mon-club-elec.fr

// Code sous licence GNU GPL :
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License,
// or any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//

// --- Que fait ce programme ? ---
/* Ce programme permet de tester l'utilisation d'un encodeur rotatif.
Une variable de comptage est incrémentée/décrémentée par la rotation de l'encodeur.
L'appui sur l'axe met à zéro le comptage. */

// --- Fonctionnalités utilisées ---
// Utilise Encodeur Rotatif
// Utilise interruption du Timer 2 à intervalle régulier

// --- Circuit à réaliser ---

// Encodeur rotatif contrôlé par 3 broches :
// > broche SW de l'encodeur sur la broche 5 de la carte Arduino
// > broche PhA de l'encodeur sur la broche 6 de la carte Arduino
// > broche PhB de l'encodeur sur la broche 7 de la carte Arduino

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

#include <RotaryEncoder.h> // Inclusion de la librairie pour encodeur rotatif du module S65
#include <MsTimer2.h>


// --- Déclaration des constantes ---

// --- constantes des broches ---

// --- Déclaration des variables globales ---
int compt=0; // variable de comptage

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---


RotaryEncoder encodeur; // Création d'un objet RotaryEncoder appelé encodeur


//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup() { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission

encodeur.init(); // initialise l'encodeur rotatif sur les broches 5,6,7 qui sont mises en entrée.
// Le rappel au plus interne est également activé (pullup)


// ------- Broches en sortie -------


// ------- Broches en entrée -------


// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------

// initialisation interruption Timer 2
MsTimer2::set(1, InterruptTimer2); // période 1ms
MsTimer2::start(); // active Timer 2


} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal ---

// --- la gestion de l'encodeur se fait dans la routine interruption du Timer2


} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

void InterruptTimer2() { // debut de la fonction d'interruption Timer2

encodeur.service(); // appel de la routine de gestion de l'encodeur

int test=encodeur.step(); // lit une seule fois l'état de step

if (test==1) // si rotation + encodeur
{
compt=compt+1; // incrémente le compteur
Serial.println(compt);

}

else if (test==-1) // si rotation - encodeur
{
compt=compt-1; // décrémente le compteur
Serial.println(compt);

}

else if (encodeur.sw()==SW_PRESSED) // si appui axe encodeur
{
compt=0; // RAZ le compteur
Serial.println(compt);

}
wiring.JPG

}
// --- Fin programme -
 
G

Guy69

Compagnon
bonjour
la question conne: et ce fichier wiring.h (qui est probablement appelé par rotaryEncoder.cpp) tu l'as ou pas?

Cordialement
Guy
 
J

jpbbricole

Compagnon
Salut Gaston

C'est la bibliothèque RotaryEncoder.h qui en a besoin d'une autre.
J'ai pas tout détaillé mais ça me semble une façon bigrement compliquée pour lire un codeur rotatif.
Essaies plutôt la bibliothèque Encoder qui a des exempoles beaucoup plus simples comme l'exemple basic.
Cette bibliothèque est expliquée ici.

Cordialement
jpbbricole
 
S

speedjf37

Compagnon
J

jpbbricole

Compagnon
Salut Gaston

Tu as quoi comme codeur, as-tu un lien.

Cordialement
jpbbricole
 
G

Guy69

Compagnon
Bonjour
voici ce que j'ai
Cordialement
Guy
 

Fichiers joints

  • Wire.zip
    14.9 KB · Affichages: 52
G

Guy69

Compagnon
(suite)
Normalement elle est incluse (Built-in). As tu essayé Sketch/Import Library?
Capture.PNG

Cordialement
Guy
 
G

gaston83

Compagnon
Bonjour à tous,

C'est bon, j'ai fouillé sur mon ordi et j'ai retrouvé le fameux wiring.h sur une ancienne version IDE 0018. Hop...., copier/coller et c'est bon... plus d'erreur et c'est parfait... ça compile et tout et tout...
Je mets les fichiers au cas ou quelqu'un en aurait besoin...
 

Fichiers joints

  • Wiring.rar
    10.8 KB · Affichages: 51
Dernière édition:
G

gaston83

Compagnon
J'ai repris le code que tu m'as envoyé post #26. Je n'ai besoin en fait que de la touche right et left. J'ai donc supprimé le reste.
Mais j'ai un problème... lorsque je tourne le codeur j'ai "rl" qui s'affiche en même temps... je n'ai pas "r" ou"l" tout seul.

#include <Keyboard.h>

// set pin numbers for the five buttons:

const int leftButton = 4;
const int rightButton = 5;

char keyboardInputOld = ' '; // Pour enregistrer la dernière touche pressée
char keyboardInputNew = ' '; // Pour enregistrer la nouvelle touche pressée

void setup() { // initialize the buttons' inputs:

pinMode(leftButton, INPUT_PULLUP);
pinMode(rightButton, INPUT_PULLUP);

Serial.begin(9600);
while (!Serial) {}

Keyboard.begin();
}

void loop() {


// use the pushbuttons to control the keyboard:

if (digitalRead(leftButton) == LOW) {
keyboardInputNew = 'l';
}
if (digitalRead(rightButton) == LOW) {
keyboardInputNew = 'r';
}

if (keyboardInputNew != keyboardInputOld) // Si la touche a changé pour éviter les répétitions
{
Keyboard.write(keyboardInputNew);
keyboardInputOld = keyboardInputNew;
}
}
 
J

jpbbricole

Compagnon
Salut Gaston

Oh là la, tu mélanges un peu tout, tu ne peut pas traiter un codeur rotatif comme des boutons, un codeur ne correspond pas à 2 boutons A et B séparés mais travaillent de concert, regardes ici.
Si tu veux envoyer des ordres clavier avec un codeur, tu dois utiliser la bibliothèque qu je t'ai indiqué plus haut, dans le courant del'après-midi, je pourrais te faire un exemple d'incrément et décrément et envoyer les ordres clavier.

Cordialement
jpbbricole
 
J

jpbbricole

Compagnon
Bonsoir Gaston

J'ai "pondu" un petit bout de programme pour te donner une idée de comment tourner un codeur rotatif et envoyer des simulations clavier au PC. Pour les caractères, en dehors de l'alphabète, ça pause des problèmes de correspondance (mapping) dont je n'ai pas eu le temps de chercher la correspondance. Le bouton poussoir de codeur est aussi câblé. Les adresses de téléchargement des bibliothèques sont dans le programme.
En tournant le bouton dans un sens cela envoie Plus ou Moins et en pressant le BP, BP presse.
Quand tu testes le programme, le mieux est d’avoir le bloc-notes ouvert.
 
Dernière édition:
G

gaston83

Compagnon
Ok, merci... je teste

mais il y a toujours quelque chose qui manque. Maintenant c'est "wprogram.h" ... j'en peux plus....
 
G

gaston83

Compagnon
Bonjour,
C'est la 1.6.11...

c'est bon j'ai installé la version 1.8.8, plus d'erreur de compil... le téléversement se fait bien...
 
Dernière édition:
G

gaston83

Compagnon
Je suis en train de tester....

// Divisé par 4 parce que chaque impulsion ressentie en tournant le bouton
// Génère 4 impulsions (https://www.logre.eu/wiki/Codeur_rotatif_incrémental)

Mon codeur a 12 crans (ressentis en tournant) donc 24 impulsions par tour donc je divise par 2 ? Est-ce bon ?

donc: codRotIncrement = codRot.read()/2;
 
J

jpbbricole

Compagnon
Salut Gaston

J'ai fait des essais avec ta version, ça pose plein de problèmes, trop "vieille", prends la dernière.
J'ai apporté quelques modifications au programme du post #54, recharges-le.
J'ai supprimé les appels avec Serial. ça bloque le programme

Cordialement
jpbbricole
.
 
J

jpbbricole

Compagnon
Salut Gaston
donc: codRotIncrement = codRot.read()/2;
Non, c'est l'affaire de la bibliothèque qui compte, pour chaque impulsion ressentie, 4 changements (états)
1552472134679.png

Voici une représentation d'une impulsion ressentie, il y 4 changements, 2 montants et 2 descendants.

Dans le programme ce n'est pas important, puisqu'il teste tout d'abord !=0 et ensuite >0 ou <0.
Si tu dois compter les impulsions alors, là il faut en tenir compte.

Cordialement
jpbbricole
 

Sujets similaires

osiver
Réponses
14
Affichages
32 952
osiver
osiver
Haut