Aide Aide programmation Arduino

G

gégé62

Compagnon
Pour le debug,
encore une fois je n'y connais rien, mais pour ce que j'ai fait jusqu'à présent je me suis débrouillé sans, avec des leds pour vérifier l'état des sorties, et surtout beaucoup de Serial.Print et le moniteur......je pense qu'un debug commence à être utile à partir d'un certain niveau de complexité, je me trompe ? de toutes façons pour l'instant je n'ai pas la possibilité, à voir pour la suite....
 
W

wika58

Compagnon
Parce qu'il me semble, si on veut vraiment les aider, qu'il faut leur expliquer aussi bien que ça existe (et pourquoi) et qu'il vaut mieux qu'ils évitent de s'en servir. De même qu'on explique aux débutants sur une machine comment on peut s'en servir et ce qui est dangereux.
Il faudra me trouver dans les messages précédents où un débutant a demander de l'aide sur un GOTO... :meganne:
 
W

wika58

Compagnon
Pour le debug sous IDE,
Pouvoir aller lire une variable à un moment du programme aide bien...

Et vu le nombre de membres qui utilisent l'IDE pour programmer leur Arduino
Screenshot_20240126-190141_Chrome.jpg


Ils doivent avoir le même besoin...

Ou alors ils sont super bon et leur programme fonctionne du premier coup... :7hus5:
Je les envie...:-D


J'ai trouvé qqch au sujet du debbug sous IDE 2.xx...
mais ils parlent d'un Arduino Zéro...
Qqun connait ?
 
J

JLMa

Apprenti
Il faudra me trouver dans les messages précédents où un débutant a demander de l'aide sur un GOTO... :meganne:
Je suis vraiment désolé de ce pataquès avec mon intervention qui se voulait effectivement du second degré :???:

Cordialement Jean-Luc
 
W

wika58

Compagnon
Oui pas grave ... mais pour certains la science c'est comme la confiture...

J'espère que ca clôt le sujet... sinon je demande à la modo...
 
F

fredcoach

Compagnon
Lorsque le sujet a été abordé, mieux vaut bien l'expliquer, non? Plutôt que de laisser des questions en suspens.
En résumé, ce qui est à retenir par un débutant qui a entendu parler du goto, c'est qu'il ne faut pas y toucher.
 
G

greg_elec

Compagnon
Lorsque le sujet a été abordé, mieux vaut bien l'expliquer, non? Plutôt que de laisser des questions en suspens.
En résumé, ce qui est à retenir par un débutant qui a entendu parler du goto, c'est qu'il ne faut pas y toucher.
touche pas à ça ptit c.n ! (Pitivier la7eme compagnie )
 
F

f6exb

Compagnon
Ou comme dans l'aviation : bouton inconnu, touche à ton cul.
 
F

furynick

Compagnon
Les zéro c'est les nouvelles générations d'Arduino en archi 32bits.
Il doit y avoir un connecteur et/ou un circuit spécialisé qui permet le débug à moins que le uC le supporte nativement.

J'ai toujours vu du débug sur la ligne série faute d'autre chose.
J'avais essayé le debug avec du STM32 mais c'était une usine à gaz, plus rapide de faire du debug série.
 
W

wika58

Compagnon
OK merci... :smt023

D'où est-ce que j'aurais ce souvenir de mettre des points d'arrêt et de pouvoir visualiser les variables alors...:7grat:
La programmation d'automates remonte à bcp plus longtemps...
Mais bon avec l'âge...
 
Dernière édition:
C

coredump

Compagnon
Le connecteur de debug c'est celui marqué JTAG en haut, il y a ensuite un chip qui gère ca via l'usb.
Quasi tout les micro 32 bits ont je jtag. Les AVR ont leur propre protocole sur un fil.
On ne débugue pas avec un port série, on imprime des logs, alors qu'avec un JTAG on a accès a toute la memoire et a l'execution (et des fois a la trace d'execution comme sur les cortex M0+).
 
W

wika58

Compagnon
OK merci pour la précision...

Et en pratique ça se passe comment, il faut un editeur performant ... pas l'IDE...
 
C

coredump

Compagnon
VScode/platformio prend en charge le debug, mais uniquement avec les cartes/sonde de debug qu'ils supportent (c'est le point faible de platformio).
 
G

gégé62

Compagnon
D'où est-ce que j'aurais ce souvenir de mettre des points d'arrêt et de pouvoir visualiser les variables alors...:7grat:
ne serait-ce pas avec AVR.Studio (4 et maintenant plutot 6, mais je retarde sans doute). Ce sont les développeurs de Atmel, mais ne connaissent pas le langage arduino, il faut rester en C/C++. Je les ai sur mon PC mais ne les utilise pas. Trop puissant pour moi....surtout le 6
 
C

coredump

Compagnon
le langage arduino
Arduino c'est du C++ avec des restrictions, on est plus proche du C sans pour autant en être.
Techniquement on peut compiler en arduino et debugger dans un debugger C/C++ sans problème, mais les programme de debug graphique seuls sont de plus en plus rare (Ozone par exemple pour les sondes Segger Jlink).
 
G

gégé62

Compagnon
oui je voulais dire que AVR Studio ne connait pas les facilités de langage d'arduino, genre "digitalWrite ou AttachInterrupt....etc". Mais en disant cela, peut-être que je me trompe, "ils" ont peut-être créé les plug in qui vont bien, mes infos datent de 6 ans au moins.....
 
C

coredump

Compagnon
Pour ceux qui font de l'ESP (arduino ou pas), le jour ou vous voulez intégrer un module dans vos montage au lieu d'une carte, je vous conseille ca:

Ca permet de programmer le module sans avoir d'usb/serie sur votre montage, et les modules coutent beaucoup moins cher qu'une carte complète.
Attention néanmoins de garder l'accès au port série et gpio0 pour pouvoir le reprogrammer au cas échéant.
 
G

gégé62

Compagnon
je ne connais pas du tout cette bebête ...
c'est le logiciel que Atmel fournit pour aller avec ses µC, toujours sous réserve car c'est ancien, la version de base (déjà puissante) est gratuite. Même si on n'utilise pas, c'est intéressant à connaitre.....
 
C

coredump

Compagnon
oui je voulais dire que AVR Studio ne connait pas les facilités de langage d'arduino, genre "digitalWrite ou AttachInterrupt....etc". Mais en disant cela, peut-être que je me trompe, "ils" ont peut-être créé les plug in qui vont bien, mes infos datent de 6 ans au moins.....
C'est en fait l'intégration de l'écosystème arduino (librairies et coeur) qui doit manquer.
C'est étonnant qu'on parle peu de platformio+VScode, j'aime pas les IDE mais ca marche bien a condition d'utiliser une carte/debuguer supporté.
L'avantage de platformio c'est qu'il permet de faire la transition Arduino vers d'autre framework facilement car il en support plein.
Par exemple sur ESP, on peut passer de l'arduino au SDK d'espressif (le fabriquant des ESP) sans changer ses habitudes.
 
G

gégé62

Compagnon
platformio+VScode,
j'ai utilisé ça pour voir, c'est vrai que c'est top, j'ai suivi pour cela l'excellent tuto de Mr Eric Peronnin, que l'on peut trouver facilement sur youtube. Mais si j'ai repris l'IDE arduino, c'est d'une part parce que pour l'instant au moins ça me suffit, et surtout les fichiers de sketches étant différents, j'ai peur qu'en peu de temps ce soit le foutoir dans mes dossiers. Déjà comme ça....:oops:
Ou alors il y a une bonne façon de faire que j'ignore...?
 
G

gégé62

Compagnon
je ne connais pas du tout cette bebête .
A propos, si quelqu'un veut l'utiliser, je me souviens vaguement que pour télécharger dans arduino je devais utiliser un fichier exe qui s'appelle "sscom32E.exe", je ne pouvais pas télécharger depuis Studio 4 directement.
Tout ça est ancien, je ne garantis pas que c'est toujours valable.

pour revenir sur platformio+VScode, il est vrai que le temps de chargement du logiciel et des fichiers est très court par rapport à l'IDE arduino, du moins ma version qui est ancienne.
 
W

wika58

Compagnon
hello tous le monde,

j'ai repris le cours MOOC µControleur et comme chaque semaine il y a 2 exercices de programmation à faire.

J'ai fait le premier et il tourne.
Le résultat est celui demandé (qui serait validé par le robot/simulateur qu'ils utilisent).
Mais je me doute que je n'ai pas programmé de la meilleure façon.
j'aimerais avoir vos avis de comment feraient les "sachants" Arduino pour optimiser le code.
Je comprends qu'il doit y avoir autant de façon que de programmeurs... mais si je peux m'améliorer...

Les données de l'exercice sont :
Moteur PAP avec bobines L1 et L2
2 BP
On demande d'écrire un programme qui fait tourner le moteur dans le sens horaire lorsqu'il reçoit des impulsions sur le poussoir P1. De même, il fera tourner le moteur dans l'autre sens en recevant des impulsions du poussoir P2.
Le sens positif a la séquence suivante :
  • L1=0, L2=0
  • L1=1, L2=0
  • L1=1, L2=1
  • L1=0, L2=1

Et voici mon code :


Merci de vos retours. :smileJap:
 
Dernière édition:
F

furynick

Compagnon
Quelques principes de base pour essayer de coder proprement et durable :
A) Pour éviter les programmes tentaculaires il faut prendre soin de bien distinguer les fonctionnalités du code.
Dans ce cas on a deux fonctionnalités :
  1. Lecture des BP
  2. Commande des bobines
Il faudra donc séparer le code de ces deux fonctionnalités pour éviter de créer un pb sur l'une lorsqu'on fait des modifs sur l'autre.

B) Pour la lisibilité du code il faut impérativement respecter l'indentation.
Il existe des outils en ligne si l'éditeur ne le fait pas nativement (https://tools.arantius.com/tabifier)
Perso j'utilise des indentations de 2 espaces (pas d'utilisation de la tabulation qui change l'apparence d'un éditeur à l'autre)

C) Essayer de raisonner au niveau binaire et non en décimal
Les changements d'état peuvent souvent se faire avec des opération de décalage ou d'opération binaires
La séquence 00 ; 10 ; 11 ; 01 doit pouvoir se résoudre avec un XOR (alternativement 10 et 01 par ex.)
Si ça n'est pas possible, le tableau de valeurs comme suggéré par midodiy est une très bonne alternative.

D) Choisir une "école" pour coder, il y en a au moins deux :
  1. Faire du générique/portable
  2. Faire du spécifique
Dans le 1er cas le même code pourra être utilisé sur plusieurs µC mais le code sera plus complexe et plus difficilement maintenable
Dans le 2nd cas le code sera plus simple et plus efficace mais ne pourra fonctionner que sur un nombre limité de µC.
 
F

furynick

Compagnon
Ensuite il faut bien déterminer le comportement de l'appui d'un bouton et les signaux électrique qui en découlent.
Le plus simple est un INPUT_PULLUP comme tu l'as fait avec le BP relié au GND.
Le cahier des charges stipule qu'un pas devra être envoyé à chaque "impulsion" ce terme est important, ça signifie qu'il faut que le bouton soit pressé puis relâché.
Le problème de ce type de matériel c'est les rebonds, mécaniquement, la lame qui va bouger lorsque le bouton sera actionné va vibrer. Le signal électrique va donc osciller pendant un très court laps de temps mais la vitesse d'horloge étant comparativement très rapide, les différents rebonds seront interprétés comme des impulsions distinctes.
Il est donc impératif d'ajouter une temporisation.
 
F

furynick

Compagnon
Dans un second temps il faut commander les bobines.
Comme l'a fait remarquer midodiy le digitalWrite n'est pas le meilleur candidat mais je pense que ça fonctionnera tout de même.
Le plus efficace sera d'utiliser les ports directement pour positionner plusieurs pins simultanément (PINA par ex. à choisir en fonction du datasheet du µC).
 
F

furynick

Compagnon
De mon point de vue ton code souffre de quelques pb :
pas de tempo à la lecture des BP
pas de gestion de l'impulsion, le pas est passé dès que le bouton est pressé mais ça pourrait être une interférence
le calcul de la commande est fait au sein de la détection d'impulsion
 

Sujets similaires

W
Réponses
122
Affichages
10 777
Philippe85
Philippe85
N
Réponses
3
Affichages
835
jpbbricole
jpbbricole
lolo
Réponses
0
Affichages
442
lolo
T
Réponses
1
Affichages
218
Teddy55
T
D
Réponses
0
Affichages
240
dodochef
D
osiver
Réponses
14
Affichages
37 418
osiver
osiver
Dudulle
Général langage MMBASIC
Réponses
8
Affichages
1 043
Dudulle
Dudulle
J
Réponses
12
Affichages
529
Robert
R
P
Réponses
33
Affichages
17 472
wika58
W
T
Réponses
2
Affichages
26 749
Tristan l'apprenti
T
esloch
Réponses
0
Affichages
351
esloch
esloch
altitude
Réponses
21
Affichages
2 883
laboureau
laboureau
laurenttanguy
Réponses
0
Affichages
559
laurenttanguy
laurenttanguy
Haut