Aide Besoin de conseils pour programation Arduino

M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #1
Bonjour a tous

Je viens de faire l’acquisition depuis peu d'un Arduino Mega2560 afin d'essayer de réalisé un projet pour ma moto, jusqu’à lors je ne connaissais pas les immenses possibilités de cette petite carte, c'est incroyable, je me suis documenté au travers de divers tuto, vidéo, ect.., mais voila si le coté hardware est simplifier par le peu de composant qu'il faut pour une réalisation un peu simpliste, ce qui ne me pose pas de problème, le coté software n'est franchement pas simple pour une personne comme moi qui na jamais fait de programmation, bon je mis met petit a petit, mais la logique du langage C me déroute franchement, arrivé a un certaine age on perd plus de neurone que l'on en gagne, donc pas simple.
J'aurais besoin d'aide afin de réalisé mon projet que je vais exposé, sure que pour les pro de la programmation ça devrait être un jeu d'enfant, mais chacun son métier.

Le projet:
A partir de deux boutons poussoir, avec le premier je voudrais allumer trois Led successivement, puis avec le second les éteindre successivement, avec une particularité.

je détail:
avec le premier bouton.
un appui=> led1 allumé.
un second appuis=> led1 allumé+led2 allumé.
un troisième appui=> led1 allume, led2 éteint led3 allumé.
et inversement avec le second bouton.

j'ai un bout de code que je mettrais en Pj, je ne vous cache pas que c'est du copier coller de ce que j'ai trouver sur la toile, j'ai quand même réussi a le bidouiller un peu, ça fonctionne mais pas comme je le voudrais, je n'arrive pas a éteindre la Led2 quand Led3 est allumé.
Suis je peux être partie d'un mauvais exemple ???.

Merci d'avance a ceux qui peuvent mettre un peu de lumières a mon étage.

Ps:
Soyer indulgent avec moi si ce que j'ai modifier sur ce code n'est pas dans les normes, c'est mon premier code...
 
V
vibram
Compagnon
15 Mar 2014
3 986
FR-74
Salut
Peux tu détailler ce que va faire le bouton 2 (de manière plus précise que "inversement") histoire d'être sur de partir sur de bonnes bases :wink:
Je vais regarder ce soir
 
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #3
Bonsoir vibram

Merci d'avoir répondue si rapidement, pour inversement:

Pour le deuxième bouton:
premier appuis => led3 éteint, led2 allumé.
second appuis => led3 et led2 éteint, led1 allumé.
troisième appuis=> toutes les led éteinte.

@+ Cordialement
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 244
Corsier-sur-Vevey (Vaud)
Salut Mandrak

Avec un pseudo comme celui-ci, rien ne doit être impossible pour toi!
langage C me déroute franchement, arrivé a un certaine age on perd plus de neurone que l'on en gagne, donc pas simple.
Rassures-toi, je m'y suis mis à ~62 ans!
Excellent programme pour débuter. Un premier conseil, essaie dabord de lire un bouton poussoir pour te rendre compte combien d'impulsions tu généres avec une pression!
Celà va transformer tes leds en sapin de Noël!. Donc il faut traiter les rebonds. Vaste programme. Tout celà pour en arriver à un truc essentiel, dans la programmation d'un Arduino, les bibliothèques. Autant commencer tout de suite d'un bon pied.
Pour les boutons, c'est Boutton.h
Si tu est interessé, je rechercherai les références.

Cordialement
jpbbricole
 
P
psemel
Ouvrier
21 Mar 2009
403
oise
bonsoir,

un K2000 manuel pour moto:lol:

L'exemple est compliqué, il y a un moyen plus simple sans utilisé trop de variable.
En complément du post précédent que ce passe t'il si led 1 et 2 sont allumées et que tu appuis sur le bouton -: reste à définir exactement tes besoins.

remarque sur les commentaires dans ton programme
High = led allumée Low= Eteint

Une mega est surdimensionner pour faire cela.
 
5
59JAG
Apprenti
7 Fev 2010
194
59 chti nord
Bonjour
pourquoi ne pas mettre l etat de chaque led dans les conditions

if(valeur_recue = 1)
{
digitalWrite(led_0, LOW);
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
}
if(valeur_recue = 2)
{
digitalWrite(led_0, LOW);
digitalWrite(led_1, LOW);
digitalWrite(led_2, HIGH
}
if(valeur_recue = 3)
{
digitalWrite(led_0, LOW);
digitalWrite(led_1, HiGH);
digitalWrite(led_2, LOW);
}
 
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #7
Bonsoir a tous

@jpbbricole

Rassures-toi, je m'y suis mis à ~62 ans!
Respect, j'en 5 de moins que toi.

Avec un pseudo comme celui-ci, rien ne doit être impossible pour toi!
Tu sais se qu'on dit sur le "Canada dry"...:lol:

Celà va transformer tes leds en sapin de Noël!
Oui tu a tout a fait raison, j'en ai fait l’essaie sur ma breadbord et effectivement au lieu d'allumer les led une a une c’était une cacophonique,
j'y ai trouver un remède hardware en y rajoutant un condo de filtrage de10n, ca fonctionne, je sais qu'il existe une solution sofware que j'ai trouver sur ce site mais j'ai ete incapable de le mettre en place.

Si tu est interessé, je rechercherai les références.
Volontiers, il est vrai que le monde d'Arduino est passionnant, de plus j'ai d'autres projet mais plus compliqué, pour cela il faudra vraiment que je maitrise plus le langage C.


@psemel
un K2000 manuel pour moto
Non... pas ca.., je vais remplacer les led par des transistors de puissance afin de commander les feux avant (et arrière aussi) de la moto, si tu suis la logique de ce que j'ai écrit dans le post initial tu comprendra.

L'exemple est compliqué, il y a un moyen plus simple sans utilisé trop de variable.
Oui certainement, mais je par de zéro.

Une mega est surdimensionner pour faire cela.
Tout a fait, c'est pour cela que j'ai aussi acheter une nano pro avec plug usb, 4€ !!, c'est même pas le prix des composants pour réalisé ce montage en traditionnelle.

@59JAG
J'ai essayer ca, mais sa ne fonctionne pas, la led 1 s’estompe mais ne s’éteint pas.
if(valeur_recue = 3)
{
digitalWrite(led_2, LOW);
digitalWrite(led_1, HiGH);
}


Cordialement a tous
 
V
vibram
Compagnon
15 Mar 2014
3 986
FR-74
je vois que pas mal de monde a proposé des choses
voici ma proposition:
https://circuits.io/circuits/2606856-3-led-mandrak

Essaie de le mettre en oeuvre avec ton filtre sur le BP, ca doit fonctionne je pense.
Au cas ou tu ne veux pas t'inscrire sur circuits.io

Attention à adapter les pin des boutons aux pin sur ton mega, ce ne sont pas les memes pour les int pullup il me semble
et le code:
Si la solution fonctionne et te convient, je commente afin que tu comprennes ce que jai fait :wink:
Screenshot from 2016-08-25 20-23-14.png
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 244
Corsier-sur-Vevey (Vaud)
Salut Mandrak
Je te mets le fichier ZIP de la bibliothèque Button.h
Tu décompresses le fichier ZIP et tu mets le répertoire Button dans le répertoire où est installé ton IDE Arduino, sous répertoire libraries.
Voici un exemple d'utilisation pour tes données.
En tête du code 1 lien utile.
Si tu as des questions, problème(s)....

Bonne soirée
jpbbricole

Voir la pièce jointe Button_Librairie.zip
 
Dernière édition:
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #11
Re bonsoir a tous

@
coredump
Je vois que tu es sur la Cote d'Azur, nous somme voisin, je suis du haut Var.
Vu que je suis pas franchement alaise avec le langage C je n'es pas essayer ton bout de code car je ne comprend pas trop ce que tu a voulu dire.

@Paul
ca doit fonctionne je pense.
Au cas ou tu ne veux pas t'inscrire sur circuits.io
Oui.... excellent ça fonctionne a merveille, et si ça ne t’ennuie pas trop de me le commenter
serais fortement utile pour comprendre le mécanisme car j’ai bien vu que tout le code a changer mais sans pour autant comprendre.
Je me suis inscrit sur circuit.io, mais ça a tendance a planter mon navigateur (Firefox).

@jpbbricole
Merci pour le lien et la bibliothèque, pour l'installer ça je sais faire, il faut bien que j'arrive a faire quelque chose tout seul avec Arduino:lol:.
J'essaierais ton code demain, il se fait tard et je n'ai plus d'aspirine:mrgreen:.
Il y a une chose qui me turlupine, a lire ton code et celui de Paul il ne se ressemble absolument pas pour un même résultat, le C c'est déjà pas facile, alors si chacun peu y faire sa recette ca va ce compliqué.

Un grand merci a vous tous pour m'avoir aidé a faire avancé le smilblik, du coup je me sent moins seul avec mes petits carte Arduino.

Bonne fin de soirée.
@+
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 244
Corsier-sur-Vevey (Vaud)
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #14
Bonjour a tous

@Paul
Merci pour tes commentaires, j'ai a peu près tout compris, il reste cependant une zone obscure, attachInterrupt, RISING, et cli, je vais me documenter.
Il y a une variante entre ton code et celui je jppbbricole, hier je me suis un peu enflammer, tout content de voir qu'enfin il sortais de cette carte quelque chose dont j'avais besoin pour mon projet,
après avoir tester plus en détail, il y a une fonction qui fonctionne pas comme je l'aurais souhaité ,
j'explique:
tout va bien a la monté, led1on, led1on+led2on, led2off+led3on, quand on fait l'inverse aussi mais uniquement dans cette ordre, quand je suis dans la période de descente et a l’état led1on+led2on et que je veut remonter a l’état led1off+led3on je suis obligé de presser deux fois le bouton monter pour changer d’état.
J’espère ne pas être trop confus dans mon explication.

@jpbbricole
j'ai essayer ton code, la version plus aboutie, c'est tout a fait ce qu'il me faut, ca fonctionne très bien, j'ai décortiqué le code afin de comprendre le fonctionnement, la j'ai plus de mal a pigé, le code de Paul est pour mon niveau plus clair, je met en Pj ton code que j'ai commenter avec divers interrogations.
Entre temps et deux tube d'aspirine plus loin, j'ai pris une cours sur le langage C sur le site OpenClassrooms, ça commence a renter dans mon neurone, la ou j'ai encore du mal c'est sur la structure ou hiérarchie du programme, c'est la patauge.
Je compte faire évolué mon projet en y rajoutant une centrale clignotant toujours a l'aide de deux bouton poussoir supplémentaire,je vais essayer de faire le code comme un grand, histoire de voir si j'ai tout bien compris.

A suivre.

Cordialement
 
V
vibram
Compagnon
15 Mar 2014
3 986
FR-74
attention quand tu tag "paul" c'est un autre utilisateur :wink:
Comme a bien dit jpb, son code est nettement plus propre, moi il aboutit au résultat que du m'a indiqué. Maintenant que ta volonté se complique un peu, il faut voir si le code peut s'adapter, pas si evident que cela à faire !

Tu as des infos ici pour le attachinterrupt:
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.AttachInterrupt

je te conseille donc de partir sur le code de jpb, meme si je vais voir si j'arrive à adapter le mien pour le fun
 
V
vibram
Compagnon
15 Mar 2014
3 986
FR-74
Voici une version que j'aime beaucoup, melange de attachinterrupt et de switch, un peu plus simple que le mien initialement et + simple que jpb, en revanche je ne me suis pas occupé de la filtration:wink:
Lorsque le code te convient, enleve tous les serial, cela prend du temps au processeur inutilement
J'imagine que c'est pour tes feux ?
tout eteint, feux de position, feux de croisement, puis longues portées ?
Si c'est le cas, le code fait l'affaire, sinon il faut revoir !

 
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #17
Bonsoir vibram
melange de attachinterrupt et de switch
Je reste admiratif devant l’aisance que vous avez a maitrisé le C.
J'essaye depuis ce matin de faire clignoter une led avec un on/off par bouton poussoir(pas comme le Blink de demo), et j'en suis encore au point de départ:axe:.
mais je vais trouver, avec de la persévérance.....
Dire qu'avec un condo, un 555, et deux trois bricole ca le fait.

Maintenant que ta volonté se complique un peu, il faut voir si le code peut s'adapter, pas si evident que cela à faire !
Tu me fait peur la.....
Comme je l'ai écrit j'aurais aimée faire évolué mon montage en y rajoutant deux fonctions, les clignotant et la coupure moteur (celle qui est sur le comodo droite) toujours sur le même principe, avec bouton poussoir, mais si pour cela il faut changer tout le code.....
Dans mon idée de débutant dans le C, je croyais qu'il fallait simplement rajouter un bout de code pour chaque fonction, es ce que je me trompe ?

J'imagine que c'est pour tes feux ?
Oui tout a fait, veilleuse, code, phare, tu comprend mieux pourquoi je voulais que Led2 s’éteigne avant que Led3 s’allume, effectivement on pourrait rajouté led longue porté avec un appui supplémentaire mais pour repassé en code il faudrait deux appuis descendant, c'est pas ce que je recherche.

Merci pour ton nouveau code, je l’essaierais ce soir.

Cordialement
@+
 
V
vibram
Compagnon
15 Mar 2014
3 986
FR-74
Tu vois c'est bien de préciser l objectif car ici ton premier message, ma manière d'interpréter ce que tu veux à fait que j'ai rajouté plus de contraintes qu'autre chose ! Alors qu'au final le code est basique.
Si cela peut te rassurer, je n'ai jamais appris le C, ni php html ou autre.
Ça m'a toujours intéressé mais sans projet sérieux impossible d'apprendre.
Il y a 4 mois j'ai voulu faire ma propre pédale de soudage. J'y ai passé qq heures depuis sur l IDE arduino mais j'en suis là. Selon moi le mieux, plutôt que de suivre des guides sur le net, c'est d'avoir un objectif et ainsi tu te poses les questions et obtiens de l'aide extérieur pour le réaliser.
Pour tes deux "modules" supplémentaires ils sont largement plus simple.
Un bouton qui active 2 leds en série pour les clignos->tu devrais facilement y arriver mais si jamais tu peux demander
Pour le coup circuit, il faut un relais normalement en position haute (circuit fermé le moteur tourne), lors de l'appui le relais s'ouvre, circuit ouvert donc moteur éteint.
La aussi c'est le même bout de code que les clignos, juste le montage qui change il me semble
 
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #19
Re bonsoir vibram

Tu vois c'est bien de préciser l objectif car ici ton premier message, ma manière d'interpréter ce que tu veux à fait que j'ai rajouté plus de contraintes qu'autre chose ! Alors qu'au final le code est basique.
Désoler d'avoir été un peu brouillon, dans mon esprit ça me paraissait plus simple, j'utilise Linuxcnc pour ma fraiseuse numérique, je me suis fait des sous programmes pour divers opérations et dans l’ensemble c'est relativement simple, je me suis dit que l'Arduino devait être dans le même esprit avec l'appel de sous programme, mais plus je parcours les doc et autres plus je m’aperçois que c'est différent.

Selon moi le mieux, plutôt que de suivre des guides sur le net, c'est d'avoir un objectif et ainsi tu te poses les questions et obtiens de l'aide extérieur pour le réaliser.
Oui c'est une solution, mais je ne voudrais justement pas abusé de cette aide avec des codes tout fait, sans comprendre le pourquoi du comment, certes ca va faire faire avancé mon projet, mais c'est tout.

Pour tes deux "modules" supplémentaires ils sont largement plus simple.
Oui pour l'un, moins pour l'autre, pour le coupe circuit ca ne devrait pas posé de problème et effectivement avec un relais (circuit ouvert, sur ma moto la coupure se fait par mis a la masse) , pour les clignotant pour le moment je n'ai pas encore la solution, il faut que je regarde de plus près comment échafauder ça, le clignotement fonctionne avec le "delay" mais bloque le reste du programme, il faudrait apparemment que je me dirige vers "millis".
Pour les deux boutons des clignotants même principe que la coupure moteur, on/off un par clignotant.
Pour les autres fonctions, démarreur, avertisseur sonore, je ne servirait pas du module Arduino, ce n'est pas nécessaire, ce sont de simple relais mis a la masse.

J'aurais donc une question, peut on mettre trois bouts de codes différents les un a la suite des autres, un pour chaque objet, commande feux, clignotant, démarreur??

En tout cas merci de t’intéresser a mon projet.

Cordialement
@+
Ps:
J'allais oublier, ton code fonctionne très bien, merci.
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 244
Corsier-sur-Vevey (Vaud)
Salut Mandrak
Voici, j'espère, des réponses à tes quetions
Mes réponses sont précédée de //**

Salut vibram
en revanche je ne me suis pas occupé de la filtratio
C'est justement là où est le problème. Tu devra ajouter, pour chaque bouton, une routine de debouncing, où est la simplicité.
Avec l'usage des interrupt, si Mandrake veut passer sur Nano, il n'y en a plus que 3.
Avec la bibliothèque button.h, tu peut te passer de ce genre do chose. Il ne faut pas faires des programmes qui, au départ paraissent simples, ils deviennent vite des châteaux de cartes dès que tu veux les modifier.
Mais on peut en débattre jusqu'au bout de la nuit, en empruntant quelques aspirines à Mandrak. Le fait que l'on puisse avoir des approches différentes qui donnent le même résultat, je trouve celà fantastique.

Cordialement
jpbbricole
 
V
vibram
Compagnon
15 Mar 2014
3 986
FR-74
Je pars des postulats qu'il me dit, cad deux boutons pour commander etc. Donc De ce que je sais je propose la solution des attachinterrupt.
Idem pour la filtration, Mandrak dit le faire par un moyen materiel, je ne vais pas chercher plus loin, partisan du moindre effort.
Et je n'ai pas hésité à te dire que ton code était beaucoup plus propre :wink:
Maintenant c'est sur qu'avec de multiples autres boutons, compte tenu du fait que l'arduino mega est vraiment surdimensionné pour l'utilisation, ta solution est donc la seule qui reste viable.
Et j'ai bien noté dans un coin de ma tete la librairie pour ces boutons, merci
 
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #22
Bonsoir jpbbricole

Merci pour t'es réponse, bon je suis pas tout a fais dans les clous, il y a encore du boulot.
Oui effectivement je tiens a passer sur une nano pro pour une question d'encombrement, ceci dit
si il faut rajouté deux ou trois condo par ci par la, ce n'est pas ca qui va prendre de la place, j'ai a placer quelques irf, un relais donc, et selon l’évolution de mes connaissance peut être d'autres module, quoi qu'il en soit ca sera toujours moins encombrant que la Mega.
Pour les aspirines pas de souci j'ai du stock:mrgreen:

Bonne soirée.
Cordialement
 
J
JLMa
Nouveau
19 Déc 2013
24
NANTERRE
Bonsoir vibram



Tu me fait peur la.....
Comme je l'ai écrit j'aurais aimée faire évolué mon montage en y rajoutant deux fonctions, les clignotant et la coupure moteur (celle qui est sur le comodo droite) toujours sur le même principe, avec bouton poussoir, mais si pour cela il faut changer tout le code.....
Dans mon idée de débutant dans le C, je croyais qu'il fallait simplement rajouter un bout de code pour chaque fonction, es ce que je me trompe ?

Cordialement
@+
Bonjour "Mandrak" : Là, pour le coup, c'est toi qui me fais peur : Dans ton 'cahier des charges' et encore moins dans les quelques bouts de code que j'ai regardé, je ne vois de concept SECURITAIRE (SFS : Sureté Fonctionnelle des Systèmes). Je ne connais pas (encore) Arduino, sur table je ne doute pas que cela fonctionne, mais dans la vraie vie c'est une autre affaire.
Juste quelques remarques :
1)_ En pleine nuit, donc feux allumés, une micro-coupure d'alim de la carte Arduino ou un parasite fait qu'il y a un RESET du µcontrôleur.....que se passe-t-il à la sortie du RESET : plus de feux !! et à priori si le code reste construit tel qu'il l'est : arrêt moteur !!
2)_ Un simple appui sur un bouton-poussoir pourrai arrêter le moteur... Pas très sécurisant tout ça : Pas de condition liée à la vitesse de la moto pour autoriser cet arrêt moteur, par exemple.
3)_ Sur une moto les conditions vibratoires sont sévères :
3.1)_ Quelle sera la tenue des boutons-poussoir à ces conditions vibratoires : risque de fausses détections d'appui
3.2)_ D'un point de vue hardware, je parierai que c'est par une mise à la masse par le bouton-poussoir que tu détectes l'appui : si agression du câblage --> contact à la masse --> détection d'appui --> ?
3.3)_ Es tu sûr que la carte Arduino soit qualifiée en vibratoire et en température (suivant son emplacement) pour être montée sur une moto.
4)_ Si un jour tu as un problème grave avec ta moto, j'ai peur que quid de l'assurance avec les conséquences qui vont avec.

Je m'arrête là, mais tu me fais réellement peur.
Pour info j'ai fini ma carrière professionnelle dans l'électronique automobile et les cas énumérés ci-dessus sont issus de mon expérience.

Cordialement Jean-Luc
 
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #24
Bonsoir a tous

@Jean-luc
et encore moins dans les quelques bouts de code que j'ai regardé, je ne vois de concept SECURITAIRE
Je pense ou du mois j'espere que tu a lue le sujet du début, au quel cas je te rappel que je débute tout juste avec ce type de matériel, donc en phase d'apprentissage.
Dans mon concept L'arduino commandera des relais pour les lumières, qui au repos seront fermé mais non conducteur car coupé par le plus après contact, donc au cas ou il y aurait un reset ou autre panne du µcontroleur, les lumières resteront allumé tant que le contact général sera fermé.

Sur une moto les conditions vibratoires sont sévères, Quelle sera la tenue des boutons-poussoir à ces conditions vibratoires : risque de fausses détections d'appui, Es tu sûr que la carte Arduino soit qualifiée en vibratoire et en température (suivant son emplacement) pour être montée sur une motoi
Ce n'est pas l'intitulé du post, mais pour ta gouverne je travaille dans le domaine de la compétions moto de vitesse depuis trente ans, j'ai préparer et participé a plusieurs Bol D'or et autres course d'endurance, c'est un environnement ou tu na pas le droit a l'erreur, sinon c'est la fin de la course, donc les agression de câblage et autres problème vibratoire je maitrise.

Je m'arrête là, mais tu me fais réellement peur.
Tu ma vraiment pris pour un bricolo du dimanche...:wink:

Fin du hors sujet.

@vibram et jpbbricole

J'aurais besoin de votre aide, c'est pas manque d'avoir essayer mais j'y arrive pas.
Depuis mon dernier message j'ai essayer de faire un code pour faire clignoté une led avec un bouton marche/arrêt mais sans succès, soit j'arrive a faire clignoté la led avec la fonction millis , soit j'arrive a l'allumé et éteint pas un appui différent mais j'arrive pas a associer les deux.
J'ai bien trouvé un code qui fait ce que je voudrais, il fonctionne mais il reste très instable.
Je vous met en Pj les deux codes celui qui est commenté c'est l'instable, le mien n'est pas commenter, au quel cas si nécessaire je le ferais.
Pouvez vous me dire ce qu'il ne va pas dans le mien, rester indulgent svp.
Merci d'avance.


Cordialement


int ledPin=5;
int bouton=8;
int ledState = LOW;
int boutonState=0;
int etat_bouton= 0;

long previousMillis = 0;
long interval = 1000;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(bouton, INPUT_PULLUP);
}

void loop()
{
boutonState = digitalRead(bouton);
if (boutonState != etat_bouton)
{unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
previousMillis = currentMillis;
}
if (ledState == LOW)
{
ledState = HIGH;
}
else
{
ledState = LOW;
digitalWrite(ledPin, ledState);
}
etat_bouton = boutonState;
{
digitalWrite(ledPin,LOW);
}
}
int e = 0;
int antirebond = 500;
#define bouton 8 // pin2 de l'arduino uno
#define led 5 // led de la carte sur pin13
void setup()
{
pinMode(led, OUTPUT);
pinMode(bouton, INPUT_PULLUP); // pull up interne activé
}

void loop()
{
if (digitalRead(bouton) == LOW && e == 0) //si on appui sur le btn on lit etat bas vu pullup interne
{
e = 1;

delay(antirebond);
while (e = 1) //tant que (clignotement de la led jusqu'au prochain appui sur le btn)
{
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(250);
if (digitalRead(bouton) == LOW && e==1) //si appui sur le btn
{
delay(antirebond);
digitalWrite(led, LOW); // led éteinte
e = 0;

break; //interruption
}
}
}
}
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 244
Corsier-sur-Vevey (Vaud)
Salut Mandrak
Si j'ai bien compris l'énoncé du problème:
Une pression, la led clignotte jusqu'à une nouvelle pression où elle arrête de clignotter?
Quandtu presse le bouton, il "donne" 1 ou 0?

Pas tenté par l'utilisation de la bibliothèque button.h?, plus du côté masochiste pour faire le debounce toi-même?!

cordialement
jpbbricole
 
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #26
Bonsoir jpbbricole
Quandtu presse le bouton, il "donne" 1 ou 0?
Une pression tu allume, la led clignotte, une pression tu éteint la led.

Pas tenté par l'utilisation de la bibliothèque button.h?
Pas si vite..., j'arrive déjà pas a faire un programme simple:sad:...

plus du côté masochiste
Des fois je me demande, depuis ce matin tôt j'ai le cul posé sur la chaise devant mon écran a essayer de réalise quelque chose qui tienne debout.:hang:

Cordialement
@+
 
J
JLMa
Nouveau
19 Déc 2013
24
NANTERRE
@Mandrak
Tu ma vraiment pris pour un bricolo du dimanche...:wink:

Fin du hors sujet.

Bonsoir
Bah, ne connaissant pas ton pédigrée et tel que tu présentes ton sujet, j'avoue que j'ai eu un doute, désolé si je t'ai offusqué.
Mon but était de t'alerter toi et aussi les personnes qui t'ont proposé des solutions sans se poser les questions qui m'ont fait réagir.

Cordialement Jean-Luc
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 244
Corsier-sur-Vevey (Vaud)
Salut Mandrak
Pour ce qui est de tes exemples, spécialement le premier:sad:
Le problème essentiel est la présentation du programme dans l'éditeur, présenté ainsi, il est impossible de debugger.
Dans ce petit coin qui suit
upload_2016-8-28_8-41-12.png

tu as collectionné à peu près tout ce qu'il ne faut pas faire. (je sais, tu débutes, mais autant frapper les esprits tout de suite:lol:)
Le maître mot dans ce type de langage est l'indentation, recherche un peu sur internet.
Ceci est valable pour les if, for, bref tout ce qui débute avec un { et fini avec un }
Je t'ai corrigé un programme. Le ou les boutons doivent donner un 0v (ground) à la pression.
Pour le moment, celà ne clignote pas, seulement On/Off
Et la version clignoteur, un peut plus "structurée"
Bon dimanche
jpbbricole
 
Dernière édition:
M
Mandrak
Apprenti
30 Jan 2015
221
Le Sud
  • Auteur de la discussion
  • #29
Bonjour jppbricole


mais autant frapper les esprits tout de suite
Aie.. bon ça c'est fait :mrgreen:

Le maître mot dans ce type de langage est l'indentation
Vu, je suis pas encore rodé.

Merci pour ta correction, je vais étudier ça de très près pour la suite des événements, la suite justement,
ce bout de code qui fait clignoté une led va me servir de base pour en faire clignoté une autre avec un deuxième bouton,
il faut deux clignotant sur la moto, droite et gauche avec deux bouton séparer, je vais donc faire le code du mois essayer.
Cependant peut tu m'éclaircir certain point, j'ai plusieurs interrogation:

1) j'ai vu que sur ta correction tu avait rajouter d'autres Void xxx() ex:
void ledClignotement() (Fonction) qui ne sont pas dans le void loop, ma question est peut on ou pas rajouté un voidxxx() a l'intérieur de la fonction void loop ? ou es ce proscris.
Si j'ai bien compris Voidxxx est une fonction qui contient des sous fonctions, et qui peu éventuellement contenir des sous sous fonctions, et ainsi de suite?

2) Void loop est elle la seul fonction a tourné en boucle?, peut on faire tourné en boucle une autre fonction appeler voidxxx?

3) Comme tu t'en doute dans le projet final je vais devoir regroupé les trois fonctions que l'on a vu jusques-ici, les phares les clignotant et le démarreur, je me pose donc une question avant de me lancer dans l'aventure, peut on ou pas inclure c'est trois fonctions séparément,
void clignotant, void phares, void démarreur et de les utilisé, ou faut elles quelles soit obligatoirement utilisé avec void loop?

Mes questions vont peu être te paraitre stupide mais tes réponse vont m’évite de me mélanger les pinceaux, depuis quelques jours j'ai la tête comme une citrouille.

Bon Dimanche.
Cordialement
 
V
vibram
Compagnon
15 Mar 2014
3 986
FR-74
Salut,

Quelques éléments de réponse :
Tu peux visiblement faire plusieurs loops de cette manière :
https://forum.arduino.cc/index.php?topic=72859.0
A essayer mais en clair tu n'as toujours qu'un loop qui appelle des fonctions de ce que je comprends.
Et selon moi un void fonction1, void fonction 2 c'est la manière propre de faire.
En effet, si tu mets des if dans tous les sens dans le void loop, ton arduino va exécuter le code. On parle de ms mais cela prend du temps, et plus le code est long, plus ça prend de temps, sans parler des fonctions bloquantes type delay() qui vont tout stopper pendant 1 période donnée.

Ici tu vas définir des fonctions qui seront interprétée par l arduino uniquement si les conditions sont réunies.
Tu peux faire en sorte que ces fonctions en appelle d'autres etc. Toujours pareil, attention au temps d'exécution de la fonction car pendant ce temps là c'est le void loop qui n'avance pas il me semble ?
Encore une fois je suis peut être à côté de la plaque (il y a beaucoup de gens avec nettement plus de connaissances dans ce domaine sur le forum) mais ça me semble le plus propre
 
Haut