Pages: [1]   Go Down
Author Topic: probléme pour faire un bistable  (Read 771 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous!

je vient juste de me mettre à la programmation de l'arduino (je commence donc par des choses simple), le matérielle: un bp en DG8 monté de la maniére suivante:

          +5V
             I
             I
           \
             \
             I_ _ _ _ _ PIN 8
             I
            [  ]
            I  I
            I  I     R= 10 Kohms
            [  ]
             I
             I
           MASSE

et la led de la carte sur la DG13.

Le début du code est le suivant:

int led=13;
int bp=8;
int etat=0;

void setup ()
{
pinMode (bp,INPUT);  
pinMode (led,OUTPUT);

}

void loop()
{
etat=digitalRead (bp);  
if (etat==HIGH) {
digitalWrite (led,HIGH);
}
}

Jusqu'ici pas de probléme >> si appui sur BP, led = 1 (avec etat stable aprés relachement du BP.
la ou cela se complique c'est pour faire retomber la sortie 13 à 0.

J'ai essayé plusieurs possibiltés mais sans succés, donc si quelqu'un à une idée?
le fonctionnement vulu est celui du bistable.

Salutatins FD
              
Logged

Oise
Offline Offline
Full Member
***
Karma: 0
Posts: 114
The Truth is elsewhere
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut
essaye avec ça:int led=13;
int bp=8;
int etat=0;

void setup ()
{
pinMode (bp,INPUT);  
pinMode (led,OUTPUT);

}

void loop()
{
etat=digitalRead (bp);  

digitalWrite (led,etat);

}
@+
william
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour Zener57,

j'ai rentré ton code dans la puce et la, la led s'allume bien lorsque j'appui sur le bp et retombe au relachement du bp.

en fait cela fonctionne maintenant en monostable.

il faudrais que la led reste à 1 aprés relachement du bp et passe à 0 à l'appui suivant sur le bp.

merci pour ton aide.

Salutations FD
Logged

France - Pays de la Loire
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Bidouilleur du dimanche ... et des autres jours de la semaine ...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Si je comprends bien, tu veux faire un bistable : T'appuis 1 coup, ça s'allume, tu rappuis un coup et ça s'éteint.

Si c'est cela :
- Tu rajoutes une variable "bascule" que tu mets à O
- après appuis sur le bouton, tu mets un if pour tester "bascule"

if (bascule = O)
  bascule = 1
  tu allumes la led
else
  bascule = 0
  tu éteins la led  

Y a peut être moyen de supprimer la variable "bascule" et de simplement lire l'etat de la sortie qui commande la led mais n'étant pas ( encore  smiley-wink) un pro de l'arduino, ça ne reste qu'une supposition ( qu'il faudra que je teste )

A+
Logged

France - Pays de la Loire
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Bidouilleur du dimanche ... et des autres jours de la semaine ...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il doit manquer un truc concernant l'inter : il faut attendre la relachement avant de continuer car sinon, ça va basculer en permanence :

Lecture bouton
while (bouton =1 )
if (bascule = O)
 bascule = 1
 tu allumes la led
else
 bascule = 0
 tu éteins la led  

A+
Logged

Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

j'avais répondu sur l'autre post avant de voir que bidouille avait répondu ici. FD, vois si tu peux supprimer le doublon.

C'est le principe du telerupteur.
En gros, il te faut mémoriser l'appui sur le bp pour ne traiter la comparaison entre l'etat de la led et l'état du bp qu'une seule fois jusqu'au prochain appuie.

Ci-dessous un code à optimiser.

Gromain



Code:

int led=13;
int bp=8;
int etat=0;
boolean mem_etat_led=false;
boolean mem_front_bp=false;

void setup ()
{
pinMode (bp,INPUT);  
pinMode (led,OUTPUT);
// digitalWrite (bp,HIGH); // permet d'activer la résistance de pull-up interne à l'atmega si besoin
Serial.begin(9600);
}
void loop()
{
etat=digitalRead(bp);

if (etat && !mem_etat_led && !mem_front_bp) {
  digitalWrite (led,HIGH);
  mem_etat_led=true;
  mem_front_bp=true;  //memorisation appuie sur bp
  Serial.println("on");
}
else if(etat && mem_etat_led && !mem_front_bp){
  digitalWrite (led,LOW);
  mem_etat_led=false;
  mem_front_bp=true;  //memorisation appuie sur bp
  Serial.println("off");
}

if (!etat) {
  mem_front_bp=false;  //raz memoire sur relachement du bp
}

delay(10); // pour filtrer les rebonds du contact si besoin

}

Logged

"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Oise
Offline Offline
Full Member
***
Karma: 0
Posts: 114
The Truth is elsewhere
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

salut
désolé,car suite à la lecture de ton explication ,je n'avais pas saisie  :'(
en plus BISTABLE :o
plus simple que gromain
voir pour les debounces


int led=13;
int bp=8;
int etat=0;

void setup ()
{
pinMode (bp,INPUT);  
pinMode (led,OUTPUT);

}

void loop()
{
if (digitalRead(bp) == HIGH  && etat == 0) {
 BPlow();
  etat=1;
  
}

if (digitalRead(bp) == HIGH  && etat == 1) {
 BPlow();
  etat=0;

}

 digitalWrite (led,etat);

}
void BPlow()
{
  do
{
    
} while (digitalRead(bp) == HIGH);
}

@+
William
« Last Edit: March 15, 2010, 03:18:51 pm by zener57 » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir Mrs.

j'ai testé vos codes et je vous confirme que les 2 fonctionnent !

Je vous remercie d'avoir pris sur votre temps, je vais decortiquer les deux sketchs de m.Zener57  et Gromain59 afin de comprendre comment cela fonctionne. Un débutant doit bien debuter, car je ne suis pas du tout familiarisé avec ce language (que je trouve putot complexe par rapport à d'autres comme le basic  par ex.)

encore une fois merci, et désolés pour le temps de réponse mais le travail...

Sautations FD
Logged

France - Pays de la Loire
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Bidouilleur du dimanche ... et des autres jours de la semaine ...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

Si tu veux un tuto progressif mais en anglais :  http://www.earthshinedesign.co.uk/ASKManual/Site/ASKManual.html

A+
Logged

Oise
Offline Offline
Full Member
***
Karma: 0
Posts: 114
The Truth is elsewhere
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut et merci Bidouille
pour ce lien,car des petites choses interressantes.
@+
William
Logged

Pages: [1]   Go Up
Jump to: