Go Down

Topic: code choix par defaut - vos remarques (Read 1 time) previous topic - next topic

KiliYaBB

Bonjour a tous,

Voila j'ai deux boutons poussoirs associés à des résistances, sur la même analog PIN (la numéro 5).

Selon le bouton pressé, la résistance qui alimente l'analog PIN varie.

Il en resulte que l'analogRead de la PIN donne des valeurs différentes selon que le bouton OUI, NON ou OUI+NON sont préssés

Mon bout de code doit permettre de déterminer le choix de l'utilisateur entre OUI et NON.

Dans le cas ou l'utilisateur ne fait pas de choix dans les 10 secondes, le choix par defaut doit etre OUI.

Ce code marche parfaitement, il répond a mes besoins.

Mais pensez vous qu'il y a plus simple, plus court, plus efficace ?

J'attends vos remarques avec impatience ! ;)

Code: [Select]
int choix=0; // 1:OUI | 2:NON | 3:OUI+NON
int valeurchoix=0; // OUI:950-970 | NON:920-940 | OUI+NON:975-990
int t =0;
int choixPIN =5;


while (choix==0) {
 valeurchoix=analogRead(choixPIN);
 if(valeurchoix>=920 && valeurchoix<=940){
   choix=2;

 }
 else if(valeurchoix>=950 && valeurchoix<=970){
   choix=1;

 }
 delay(100);
 t=t+100;
 if(t>=10000){
   choix=1;
 }

}

Luj06


yalefe

un switch...... case aurait permis de gagner quelques lignes de code

KiliYaBB

#3
Aug 20, 2009, 08:39 am Last Edit: Aug 20, 2009, 08:42 am by KiliYaBB Reason: 1
Luj06, qu'entends tu par macro ?

Tu veux dire une fonction define... ?


J'ai essayé avec un swtich case mais je n'arrivais pas a m'en sortir.

elwing

un truc genre:
Code: [Select]

#define TEST                  3000

ou

#define FAILED(hr) ((HRESULT)(hr) < 0)


Quote
Tu veux dire une fonction define... ?


ça n'a par contre rien à voir avec une fonction (mis à part la similitude pour le lecteur humain). c'est juste un clé que le précompilateur remplace dans le code avant la compilation.

KiliYaBB

Code: [Select]
#define TEST                  3000

ou

#define FAILED(hr) ((HRESULT)(hr) < 0)


whoh, je comprends rien  :o :o

Luj06

Voilà ce que ça donne en utilisant des macros.
J'ai utilisé une entrée analogique sur la patte 1.

Code: [Select]

#define SEUIL    10

#define VAL_1    930
#define VAL_2    960

int val;

#define  PRESS_1(pin)  ( (val = analogRead(pin)) && val > VAL_1 - SEUIL && val < VAL_1+SEUIL)

#define  PRESS_2(pin)  (analogRead(pin) > 512)

void setup()
{
 Serial.begin(9600);  
}

void loop()
{
 if (PRESS_1(1)) {
    Serial.println("Choix 1 !");
 }  
 if (PRESS_2(1)) {
    Serial.println("Choix 2 !");
 }  
 delay(500);
}

KiliYaBB

Merci Luj06 !

Mais quel est lintérêt par rapport a mon code ? Pour le nombre de ligne, grosso modo la même chose, non ?


Luj06

"plus simple, plus court, plus efficace".

t'arrives pas à voir la différence ?

yalefe

c'est surtout le temps de traitement qui est amélioré

Bon dans ton exemple, c'est pas tres flagrant

mais dès que tu as un peu plus de code, tout ce qui est à base de "conditionnelle" , les while, les for, les if ... then, consomment du temps lié à leur execution

KiliYaBB


Go Up