Loading...
Pages: [1] 2   Go Down
Author Topic: Rendre deux boutons poussoirs inactifs  (Read 481 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour
je suis débutant sur Arduino.
Je viens de faire un petit programme qui allume une lampe avec un écran LCD et 3 boutons poussoire (+,- et valider).
Mon programme me demande le temps que je veux allumer ma lampe=> je veux donc, à l'aide des bouton poussoirs choisir le temps et je valide. => Ca c'est bon !
Après avoir appuyer sur le bouton validé, je voudrais rendre les deux boutons "+" et "-" inactif. Cela est ce possible??
Et encore mieux je voudrais que, si je ré-appuie sur le bouton valide, ce la fasse un reset de la carte.

Etant débutant je ne sais pas si je me suis bien exprimer et est ce que j'ai donner assez de détails.
Merci de votre aide
Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 141
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce que tu demandes, ce n'est que de la programmation, donc oui c'est possible.
Pour le soft reset, tu as un topic sur la première page, bien le lire jusqu'au bout!!!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok je vais lire la première page jusqu'au bout..
Pourriez vous m'aider à faire cette programmation? pour rendre ces deux boutons inactifs??
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 22
Posts: 1817
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Principe de la machine d'état

Ton programme à 2 états
- la lampe est éteinte et le programme attend une validation
- la lampe est allumée pour le temps T et il faut ignorer les boutons

Donc a toi dans ton code d'avoir cette cette information et d'en tenir compte
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et comment dire au programme d'ignorer les boutons??

J'ai lu le topic sur le soft reset mais je ne comprends pas tout. Est ce que le bouton valider peut devenir ensuite un bouton reset??
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 22
Posts: 1817
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si tu as une variable qui indique l'état :

enum ETAT { LAMPE_ETEINTE, LAMPE_ALLUMEE } Etat;

Il suffit de tester les boutons si et seulement si Etat vaut LAMPE_ETEINTE

Code:
void loop()
{
  if ( Etat == LAMPE_ETEINTE )
  {
      // ici tu gère les boutons
      // si tu décide d'allumer la lampe alors n'oublie par de faire Etat = LAMPE_ALLUMEE
  }
  if ( Etat == LAMPE_ALLUMEE }
  {
    // ici tu gère ce qu'il y a a gérer quand la lampe est allumée
  }
}

Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A oui très bonne astuce. Maintenant il me reste à faire le bouton réset. Est possible?? Réutilisé le bouton "validé" pour repartir du setup()?§
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 4451
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Si tu utilises attachInterrupt() pour tes deux boutons il suffit de faire dettachInterrupt() pour les rendre inactif.
Sinon une simple variable de type booléen avec un if comme le propose barbudor est largement suffisant.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut !
À quoi bon rendre les boutons inactifs ? Il suffit de ne plus les tester.
Si après la première pression sur le bouton "valider" tu veux que la carte ne fasse plus rien tant que le bouton n'est pas à nouveau réenclenché, il suffit de mettre
Code:
while(digitalRead(VALIDER) == LOW) { //attendre tant que la bouton n'est pas relache apres validation
  ;
}
while(digitalRead(VALIDER) == HIGH) {  //attendre avant la pression du bouton
  if(millis() >= eteindre) { //s'il est temps d'eteindre la lampe
    digitalWrite(LAMPE, LOW); //l'eteindre
    wdt_enable(WDTO_15MS); //Commande de reset
    for(;;);
  }
}
wdt_enable(WDTO_15MS); //Commande de reset
for(;;);
/* A adapter au programme */
après la sélection du temps choisi.

Quelle est la structure du code ? (Où est placé chaque élément ?)
J'aurai fait
Code:
//inclusion des librairies
//definition des broches
//definition d'eteindre
void setup() {
  //initialisation des broches
  //selection du temps d'allumage
  eteindre = millis() + temps_d_allumage_en_millisecondes
  //section d'attente
}

void loop() {}
Il se peut que je n'aie pas compris la demande

Pour plus d'infos, voir ce fil de discussion.
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France
Offline Offline
Edison Member
*
Karma: 13
Posts: 1841
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Maintenant il me reste à faire le bouton réset. Est possible?? Réutilisé le bouton "validé" pour repartir du setup()?§

Il ne faut pas confondre faire un reset de l'arduino et faire exécuter la fonction setup().

Dans ton cas il suffit juste d'appeler la fonction setup() si on appuie sur le bouton valider lorsque la temporisation est lancée.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voila le plan de mon programme :

Librairie

setup()
{
J'initialise juste mon lcd en écrivant "Combien de temps voulez vous allumer la lampe?"
Je mets mes sorties en positions haut de la façon suivante :
  digitalWrite(10, HIGH); //Valide
  digitalWrite(11, HIGH);//incrémentation
  digitalWrite(12, HIGH);//décrémentation
}

loop()
{
 IF{bouton 11==HIGH; j++}
 IF{bouton 12==HIGH; j--}
 IF{bouton 10==HIGH; j'écris à l'écran que la lumière sera allumer j secondes
}


Je veux bien croire que ce n'est peux etre pas la meilleur structure de programme mais c'est mon premier avec arduino donc soyez indulgent ^^
Faut-il que je revoie cette structure??

Que fait cette fonction concrêtement :
wdt_enable(WDTO_15MS); //Commande de reset
for(;smiley-wink;

Merci pour votre aide smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui c'est exactement ça :
Quote
Dans ton cas il suffit juste d'appeler la fonction setup() si on appuie sur le bouton valider lorsque la temporisation est lancée.

Comment faire cela simplement??
Logged

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je mettrai le contenu du loop() dans une boucle while() tant que "valider" n'est pas pressé;
J'enlèverai ça :
IF{bouton 10==HIGH; j'écris à l'écran que la lumière sera allumer j secondes
et mettrai son contenu (affichage seulement) dans chaque autre IF (in/décrémenter), si trop long : -> Nouvelle fonction;
Après le while, démarrage de la lampe et définition de la millis à la quelle on doit l'éteindre (millis() + j * 1000)
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok j'essaie tout cela demain et je vous retiens au courant merci pour pour aide...
Logged

France
Offline Offline
Edison Member
*
Karma: 13
Posts: 1841
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Que fait cette fonction concrêtement :
wdt_enable(WDTO_15MS); //Commande de reset
for(;smiley-wink;
Elle active le watchdog intégré à l'arduino. Oublies ce truc c'est une cause d'emmerdes et en plus c'est inutile dans ton cas.
Logged

Pages: [1] 2   Go Up
Print
 
Jump to: