En cours Réglage vitesse moteur p.a.p avec minuterie

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

gaston83

Compagnon
Bonjour à tous,

Je désirerais faire tourner et régler la vitesse d'un moteur p.a.p mais en même temps régler le temps de fonctionnement. J'ai déjà récupérer sur le net un programme pour Arduino Duemilanove (télécharger et fonctionnel). Je règle la vitesse de rotation. Jusque là, tout va bien...

Reste maintenant la partie minuterie. J'ai aussi récupérer le programme qui va bien.

Question: Est-ce qu'il est possible de faire un deux en un. C'est à dire fusionner les deux programmes pour faire tourner tout ça dans mon Atmega 328P ?

Premier code



Deuxième code:


 
P

psemel

Ouvrier
bonjour,
fusionner c'est possible:
mettre avant le set up toutes les lignes,
dans le set up mettre les lignes des deux programmes dans la partie SETUP
et dans la partie LOOP mettre les lignes des parties loop.
Attention aux parentheses
normalement ca devrait marcher
 
M

MegaHertz

Compagnon
Bonjour,

Il y'a le problème de la boucle dans le prog de timer qui ira mettre de grosses pauses dans la boucle générale et perturber la régularité de ton moteur PAP (delay(10) et delay(500))
Désolé mais tu ne peux pas utiliser ce prog de timer synchrone avec cette boucle de contrôle de moteur synchrone par simple copier-coller.
Ton moteur tournerait mais pas à la vitesse désirée.
 
Dernière édition:
H

Hubert86

Compagnon
Moi j'engloberais, la marche du pas a pas dans la boucle de ta tempo, mais le réglage de la vitesse posera pbl, mais bon tu peux essayer, ça coute juste un peu de travail. Les fréquences de l'arduino sont bien supérieures a celles des créneaux de ton pas a pas. Mais le pbl n'est pas la, prendre des programmes tout fait n'est pas la bonne solution. Si tu ne veux pas apprendre un minimum la programmation, prends un montage électronique, en fait deux, un pilotage pas a pas avec variation de vitesse et une tempo réglable qui activera et désactivera ton pilotage, de la logique câblé dédiée, au lieu de logique programmée.
 
M

MegaHertz

Compagnon
Bonjour,

Pour gérer plusieurs trucs temps réel en même temps il vaudrait mieux utiliser les interrupts.

Un booleen motorOn
Dans la boucle principale, faire un if(motorOn) qui englobe le le contrôle des pas
Le bouton ou autre teste motorOn (if !(motorOn)) met le motorOn à true, lance le timer (peut lire une valeur) et init l'interrupt timer
Dans le handler d'interrupt on met le motorOn à false et on invalide l'interrupt.

Y'aura pas beaucoup de lignes de code et tout le bazard tournera comme une horloge.
 
S

speedjf37

Compagnon
Bonjour,

Aucun intérêt de gérer à la mano les steps du Moteur ! (sauf pour comprendre la gestion des pas).
Utiliser une lib stepper , accelstepper ,fast accelstepper permet de se libérer de toute la gestion.

Les lib sont fournies avec des exemples

1635438007429.png


Même combat pour la gestion du temps !


Cordialement JF
 
G

gaston83

Compagnon
Que d'idées... que d'idées... va falloir que je choisisse. Mais je pense que ça va être vite fait vu que j'en ai besoin assez rapidement.

Merci pour toutes vos réponses.
 
G

gaston83

Compagnon
Il faut quand même des explications. Ceux qui font du tir sportif et qui rechargent leurs munitions font normalement un nettoyage de leurs étuis. L'appareil qui est souvent utilisé s'appelle un Tumbler.

Je voudrais en fabriquer un avec les accessoires que j'ai déjà en stock. A savoir un Arduino, le driver et un moteur p.a.p. C'est l'occasion de m'en servir plutôt que de racheter un moteur à courant continu et puis il faut le dire, j'aime bien bidouiller.

Donc, après avoir lu vos réponses et suggestions, je vais aller au plus simple. Je vais opter pour la solution de seepjf37. Pour moi, et mes petites capacités de programmateur, ce sera plus simple.

Tout est dit.... merci à vous tous.
 
S

speedjf37

Compagnon
le cahier des charges est simple:

1) pouvoir régler la vitesse avec un pot
2) la puissance... c'est un petit pap mais ce sera largement suffisant
3) le mode: un seul sens de rotation
4) la gamme de temps minutes et heures réglables
5) je possède un LCD Keypad Shield (qui va bien avec la duemilanove) pour afficher le temps écoulé

un driver à base de 6600



La carte Arduino Duemilanove existe en 2 versions ATmega168 ou ATmega328
Quelle version as tu ?

Le CD Keypad Shield est bien celui ci ?

Le driver comme celui ci ?

Si c'est comme celui la , combien de micropas pour un usage fluide ? (4)

Un potentiomètre en plus pour la vitesse !



Cordialement JF
 
G

gaston83

Compagnon
Bonjour à tous,

La carte c'est une Duemilanove Atmega 328
C'est bien Le LCD Keypad Shield que j'ai. Il y donc déjà 5 boutons utilisables
et c'est aussi le bon driver. En terme de micro pas, y a le choix: 1,2,4,8,16,32
et oui, un pot pour ajuster la vitesse (le premier code suffirait)

Pour la mise en route, une fois la minuterie réglée, hop un appui sur un bouton et c'est parti...
 
S

speedjf37

Compagnon
Bonjour,

Dans l'exemple "deuxieme code"

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27, 20, 2);

#include "RotaryEncoder.h"
RotaryEncoder encoder(4, 2);

ça ne colle pas avec le shield !!!



Il faut utiliser le LCD en mode 4 bit et la lecture analogique pour les boutons

exemple extrait du @Andoche : https://www.usinages.com/threads/programmation-compteur-vis-mere.147050/

Cela monopolise les E/S 8, 9, 4, 5, 6, 7 pour le LCD et A0 pour les boutons

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


int read_LCD_buttons()
{
adc_key_in = analogRead(0);

Ces fonctions pour les boutons sont basiques on peut aussi utiliser une lib plus élaborée qui gère les rebonds les appuis longs/courts etc
Pour le moteur:
On peut utiliser la LIB FastAccelStepper qui admet les pin 9 et 10 pour les step sur AVR 328P (pin 9 pris par le LCD) .
Cette lib gère les rotations continues.

Il faudrait définir les infos à l'écran , les menus (paramètrage des microstep , réglage timer ) sauvegarde ?
L'usage des boutons


Cordialement JF
 
G

gaston83

Compagnon
Bonjour,

Ok.... pour le choix de la stratégie, je te laisse libre arbitre. Je pense que tu es beaucoup mieux placé dans ce domaine que moi. A part de faire du copier coller, je ne pourrais jamais élaborer un programme qui tienne la route. J'ai vu le temps que j'ai passé (avec ton aide et d'autres membres et heureusement que vous étiez là) pour mettre au point la télécommande en Bluetooth pour mach3, là franchement je me sens pas de recommencer.

Ceci dit, en terme de détails sur l'affichage des infos à l'écran, je ne cherche pas de fioriture mais quelque chose de simple.

1) un premier menu pour pouvoir régler la minuterie et afficher le décompte en heures et minutes
2) mettre en route le système
3) un deuxième menu pour régler la vitesse en jouant sur la durée des pulses
4) et que le moteur se coupe à la fin du temps programmé.

et pour faire tout çà, on a 5 boutons disponibles.
 
G

gaston83

Compagnon
Bonsoir à tous,

J'ai trouvé ça... peut-être comme base de menu. Mais comment fait-on pour inclure un fichier *.h ?


Le fichier Menu.h est bien là, mais comment le mettre en bibliothèque ? pour ensuite faire un #include <Menu.h>
 
Dernière édition:
P

pascalp

Compagnon
Si tu rencontres des problèmes, parcours les question/réponse en bas de la page. le "menu.h" a posé problème ainsi que "domainmenuaction" et autres.

une fois fait tu place ton fichier Menu.h dans un dossier nommé Menu_h
et tu copie/colle ce fichier dans la librairie de ton logiciel en suivant ce chemin là normalement C:\Program Files (x86)\Arduino\libraries

J'ai créé le répertoire Menu_h dans Documents\Arduino\Librairies , ce qui correspond à l’installation des versions récentes d'IDE.
 
M

MegaHertz

Compagnon
Le fichier Menu.h est bien là, mais comment le mettre en bibliothèque ? pour ensuite faire un #include <Menu.h>
Bonjour,

En C #include "toto.h" cherche dans les chemins de ton projet alors que <toto.h> cherche dans les libs.

Copie ton Menu.h à côté de ton .c ou .cpp et normalement le #include "Menu.h" devrait faire le job.
Faudra peut être aussi l'ajouter à ton projet dans l'IDE (ton outil de prog)
 
G

gaston83

Compagnon
Rien à a faire... quand ça veut pas , ça veut pas... :smt021 C'est quand même extraordinaire... le gars, il fait un programme, p*tain, chez lui ça fonctionne , tu le fais ...woalou.... :smt013
 
P

pascalp

Compagnon
Chez moi ça fonctionne aussi.
Vérifie que le chemin "Documents\Arduino\librairies" existe.
Crées le sous répertoire "Menu_h" dans le répertoire "librairies"
Crées/copie le fichier "Menu.h" dans le répertoire "Menu_h"
Normalement le include Menu.h devrait fonctionner, éventuellement tu relances ide. (à propos, quelle version d'IDE ?)

Quand tu dis que ça ne fonctionne pas, quel message d'erreur ? Normalement IDE est bavard et relativement précis dans ses râleries.

Pour prévenir une autre erreur rajoute 3 lignes après le include Menu.h
#include « Menu.h » // Fichier d’entête avec les types pour le menu
void doMainMenuAction(byte selectedMenuItem);

void doForetMenuAction(byte selectedMenuItem);
void doSubMainMenuAction(byte selectedMenuItem);

EDIT: erreur dans les lignes à rajouter.

#include "Menu.h" // Fichier d'entête avec les types pour le menu
void doMainMenuAction(byte selectedMenuItem);
void doFreemanMenuAction(byte selectedMenuItem);
void doSubMainMenuAction(byte selectedMenuItem);
 
Dernière édition:
G

gaston83

Compagnon
J'ai fait ce que tu as dit .... c'est pareil

Le rapport:

Arduino : 1.8.13 (Windows 10), Carte : "Arduino Duemilanove or Diecimila, ATmega328P"

keylcd_menu:39:4: error: 'doFreemanMenuAction' was not declared in this scope

&doFreemanMenuAction

^~~~~~~~~~~~~~~~~~~

C:\Users\papa\Documents\Arduino\keylcd_menu\keylcd_menu.ino:39:4: note: suggested alternative: 'doForetMenuAction'

&doFreemanMenuAction

^~~~~~~~~~~~~~~~~~~

doForetMenuAction

exit status 1

'doFreemanMenuAction' was not declared in this scope



Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
 
G

gaston83

Compagnon
La , c'est le complet

Arduino : 1.8.13 (Windows 10), Carte : "Arduino Duemilanove or Diecimila, ATmega328P"

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\papa\AppData\Local\Arduino15\packages -hardware C:\Users\papa\Documents\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\papa\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\papa\Documents\Arduino\libraries -fqbn=arduino:avr:diecimila:cpu=atmega328 -vid-pid=0403_6001 -ide-version=10813 -build-path C:\Users\papa\AppData\Local\Temp\arduino_build_917305 -warnings=default -build-cache C:\Users\papa\AppData\Local\Temp\arduino_cache_786047 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\papa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\papa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Users\papa\Documents\Arduino\keylcd_menu\keylcd_menu.ino

C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\papa\AppData\Local\Arduino15\packages -hardware C:\Users\papa\Documents\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\papa\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\papa\Documents\Arduino\libraries -fqbn=arduino:avr:diecimila:cpu=atmega328 -vid-pid=0403_6001 -ide-version=10813 -build-path C:\Users\papa\AppData\Local\Temp\arduino_build_917305 -warnings=default -build-cache C:\Users\papa\AppData\Local\Temp\arduino_cache_786047 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\papa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\papa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Users\papa\Documents\Arduino\keylcd_menu\keylcd_menu.ino

Using board 'diecimila' from platform in folder: C:\Users\papa\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3

Using core 'arduino' from platform in folder: C:\Users\papa\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3

Detecting libraries used...

"C:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_DUEMILANOVE -DARDUINO_ARCH_AVR "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\standard" "C:\\Users\\papa\\AppData\\Local\\Temp\\arduino_build_917305\\sketch\\keylcd_menu.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

Alternatives for LiquidCrystal.h: [LiquidCrystal@1.0.7]

ResolveLibrary(LiquidCrystal.h)

-> candidates: [LiquidCrystal@1.0.7]

"C:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_DUEMILANOVE -DARDUINO_ARCH_AVR "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\standard" "-IC:\\Program Files (x86)\\Arduino\\libraries\\LiquidCrystal\\src" "C:\\Users\\papa\\AppData\\Local\\Temp\\arduino_build_917305\\sketch\\keylcd_menu.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

Alternatives for Menu.h: [Menu_h]

ResolveLibrary(Menu.h)

-> candidates: [Menu_h]

"C:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_DUEMILANOVE -DARDUINO_ARCH_AVR "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\standard" "-IC:\\Program Files (x86)\\Arduino\\libraries\\LiquidCrystal\\src" "-IC:\\Users\\papa\\Documents\\Arduino\\libraries\\Menu_h" "C:\\Users\\papa\\AppData\\Local\\Temp\\arduino_build_917305\\sketch\\keylcd_menu.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

"C:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_DUEMILANOVE -DARDUINO_ARCH_AVR "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\standard" "-IC:\\Program Files (x86)\\Arduino\\libraries\\LiquidCrystal\\src" "-IC:\\Users\\papa\\Documents\\Arduino\\libraries\\Menu_h" "C:\\Program Files (x86)\\Arduino\\libraries\\LiquidCrystal\\src\\LiquidCrystal.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

Generating function prototypes...

"C:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_DUEMILANOVE -DARDUINO_ARCH_AVR "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\standard" "-IC:\\Program Files (x86)\\Arduino\\libraries\\LiquidCrystal\\src" "-IC:\\Users\\papa\\Documents\\Arduino\\libraries\\Menu_h" "C:\\Users\\papa\\AppData\\Local\\Temp\\arduino_build_917305\\sketch\\keylcd_menu.ino.cpp" -o "C:\\Users\\papa\\AppData\\Local\\Temp\\arduino_build_917305\\preproc\\ctags_target_for_gcc_minus_e.cpp" -DARDUINO_LIB_DISCOVERY_PHASE

"C:\\Program Files (x86)\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\papa\\AppData\\Local\\Temp\\arduino_build_917305\\preproc\\ctags_target_for_gcc_minus_e.cpp"

Compilation du croquis...

"C:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_DUEMILANOVE -DARDUINO_ARCH_AVR "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\papa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\standard" "-IC:\\Program Files (x86)\\Arduino\\libraries\\LiquidCrystal\\src" "-IC:\\Users\\papa\\Documents\\Arduino\\libraries\\Menu_h" "C:\\Users\\papa\\AppData\\Local\\Temp\\arduino_build_917305\\sketch\\keylcd_menu.ino.cpp" -o "C:\\Users\\papa\\AppData\\Local\\Temp\\arduino_build_917305\\sketch\\keylcd_menu.ino.cpp.o"

keylcd_menu:36:4: error: 'doFreemanMenuAction' was not declared in this scope

&doFreemanMenuAction

^~~~~~~~~~~~~~~~~~~

C:\Users\papa\Documents\Arduino\keylcd_menu\keylcd_menu.ino:36:4: note: suggested alternative: 'doForetMenuAction'

&doFreemanMenuAction

^~~~~~~~~~~~~~~~~~~

doForetMenuAction

Utilisation de la bibliothèque LiquidCrystal version 1.0.7 dans le dossier: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal

Utilisation de la bibliothèque Menu_h prise dans le dossier : C:\Users\papa\Documents\Arduino\libraries\Menu_h (legacy)

exit status 1

'doFreemanMenuAction' was not declared in this scope
 
S

speedjf37

Compagnon
Rien à a faire... quand ça veut pas , ça veut pas... :smt021 C'est quand même extraordinaire... le gars, il fait un programme, p*tain, chez lui ça fonctionne , tu le fais ...woalou.... :smt013

Bonjour Gaston ,

La gestion des fichiers est un spéciale dans l'ide Arduino.
L'explication donnée au #18 est bonne.

par contre au #20 ce n'est pas bon du tout.
On ne crée pas une LIB avec seulement le xxx.h il y a une méthode à respecter !


De toute façon pour moi ce code n'est pas intéressant :
Lecture des boutons en mode bloquant sans gestion des rebond ni des appuis (long/court).
Des delay() un peu partout.
Pas de saisie de valeurs.

Je suis en train de travailler sur un code qui gère les options:

Menu simple avec saisie.
Gestion du clavier non bloquante avec anti rebond et gestion des appuis.
Lecture/écriture des paramètres en Eeprom.
Timer H M S
Stepper en mode position/continu.
Affichage vitesse moteur step/tr mn
Affichage vitesse finale avec paramètre (rapport de couplage).

Le tronc commun (Paramètre menu clavier) devra être utilisable pour le compteur vis-mere de @Andoche .

Cordialement JF
 
G

gaston83

Compagnon
Ok, speedj37, je vais te laisser faire. J'ai bien essayé de farfouiller quelque chose avant d'enquiquiner les gens mais bon,...
En tous cas, encore merci...
 
P

pascalp

Compagnon
Je ne sais pas ou j'ai pris les lignes du copier/coller à rajouter ?! Qui ne correspondent même pas à ce que j'ai ajouté dans mon script.
Il faut mettre après #include "Menu.h" // Fichier d'entête avec les types pour le menu
void doMainMenuAction(byte selectedMenuItem);
void doFreemanMenuAction(byte selectedMenuItem);
void doSubMainMenuAction(byte selectedMenuItem);


La méthode d'implantation du Menu.h est peut-être basique mais elle fonctionne. Le Menu.h est simple et ne nécessite pas de .cpp .
Je n'ai fait que reprendre le contenu de https://skyduino.wordpress.com/2014/07/06/arduino-lcd-faire-un-menu-sous-forme-de-liste/
qui en s'appuyant sur les différentes résolutions apportées dans la partie discussion/question/réponse en fin de page, finit par fonctionner.

Le code n'est pas idéal, pas exactement adapté à l'utilisation prévu par Gaston. Mais il fournit un exemple à peu près fonctionnel qui à mon sens n'a pas d'autres ambitions que d'être une introduction à la gestion des menus avec ce module d'affichage.
 
Dernière édition par un modérateur:
G

gaston83

Compagnon
Ok, merci @pascalp... mais je pense que @speedj37 n' a pas voulu critiquer (en mal) ton approche et je te remercie, quand même, pour tes réponses même comme tu le dis "Le code n'est pas idéal, pas exactement adapté à l'utilisation prévu par Gaston"

Malgré tout et personnellement, je cherche tout de même à comprendre le pourquoi du comment. Maintenant je suis satisfait d'avoir compris le "pourquoi" du non fonctionnement et le "comment "pour le faire fonctionner. :drinkers:

Au fait, le code fonctionne... y a des des chances que je ne m'en servirais jamais mais j'ai encore appris quelque chose ... :smt023
 
P

pascalp

Compagnon
Quand on arrête d'apprendre, c'est qu'on est mort (au propre ou au figuré).
 
S

speedjf37

Compagnon
Bonsoir,

On avance !
La Lib LiquidCrystal fonctionne avec le shield

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
BackLight en pin 10

la Lib MD_UISwitch semble tenir ses promesses:

#include <MD_UISwitch.h>

const uint8_t ANALOG_SWITCH_PIN = A0; // switches connected to this pin

// These key values work for most LCD shields
MD_UISwitch_Analog::uiAnalogKeys_t kt[] =
{
{ 10, 10, 'R' }, // Right
{ 100, 15, 'U' }, // Up
{ 255, 15, 'D' }, // Down
{ 410, 15, 'L' }, // Left
{ 640, 15, 'S' }, // Select
};

MD_UISwitch_Analog S(ANALOG_SWITCH_PIN, kt, ARRAY_SIZE(kt));

Test des 5 boutons analogiques OK
Pas de rebond (Debounce OK)
Détection appui long OK (pour entrer dans les menus)

la Lib EEPROM à vérifier
#include <EEPROM.h>

La Lib AccelStepper devrait être compatible

Plus qu'a mettre tout cela ensemble avec des menus !!!!

JF
 
S

speedjf37

Compagnon
Bonsoir,
Tu as déjà fait le code...:god:

Non seulement installé des lib et testé avec les exemples fournis.
Un peu exploré les SRC pour regarder comment c'est écrit et éliminer tout ce qui ne correspond pas aux besoins pour cette application.
 

Sujets similaires

V
Réponses
3
Affichages
1 018
vibram
V
G
Réponses
0
Affichages
597
gaston83
G
Moi33
Réponses
3
Affichages
47 975
speedjf37
S
F
Réponses
6
Affichages
25 646
fraiddy
F
zygo4619
Réponses
34
Affichages
35 437
zygo4619
zygo4619
V
Réponses
62
Affichages
5 335
vibram
V
Mcar
Réponses
65
Affichages
11 652
Mcar
U
Réponses
85
Affichages
7 214
Hubert86
H
shodan47
Réponses
7
Affichages
9 699
shodan47
shodan47
M1M1HRC10
Réponses
7
Affichages
38 020
M1M1HRC10
M1M1HRC10
F
Réponses
14
Affichages
2 996
franckapik
F
G
Réponses
65
Affichages
9 275
rokag3
R
01power
Réponses
3
Affichages
13 816
01power
01power
Haut