Pages: [1]   Go Down
Author Topic: Rappeler la fonction setup  (Read 319 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, e voudrais savoir quel est le moyen de rappeler la fonction setup() au sein de mon programme??
Merci
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 377
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pourquoi ne pas te faire une fonction personnalisée du type
void setupperso(){
//code
}
que tu appelles quand tu veux dans ton loop?

Peux tu nous expliquer pourquoi tu as besoin de la rappeler?
Logged

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

Bonjour,
voici mon programme :
Code:
#include <LiquidCrystal.h>

#define valeurMin 0
#define valeurMax 10


int j=0;
//boolean etatRelais=0;
int etatRelais;
LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {
 
  lcd.begin(20, 4);
  pinMode(10,INPUT); //Déclaration des pin en entrées
  pinMode(11,INPUT);
  pinMode(12,INPUT);
  pinMode(9,OUTPUT);
 
  digitalWrite(10, HIGH); //Sortie mis à l'état Haut
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  j=0;
  lcd.print("Nombre de douche");
  lcd.setCursor(0,1);
  lcd.print(j);
  lcd.setCursor(0,2);
  lcd.print("Validation?");
  etatRelais=!etatRelais;
  digitalWrite(9,etatRelais);
  //lcd.print(j);
 //delay(100);
}

void loop() {
   
  if (digitalRead(11)==HIGH)//Bouton incrémentation
  {
    if (j<valeurMax)j++;
    lcd.setCursor(0,1);
    lcd.print(j);
    delay(100);
    while((digitalRead(11)==HIGH));
  }
  if (digitalRead(12)==HIGH)//Bouton décrémentation
  {
    if (j>valeurMin)j--;
    lcd.setCursor(0,1);
    lcd.print(j);
    delay(100);
    while((digitalRead(12)==HIGH));
  }
  if(digitalRead(10)==HIGH)//Bouton validation
  {
    int val=j;
    lcd.clear();
    lcd.print("Vs avez selectionnez");
    lcd.setCursor(0,1);
    lcd.print(val);
    lcd.print(" douche(s)");
    lcd.setCursor(0,2);
    lcd.print("Temps attente: ");
    lcd.print(val*10);
    lcd.print(" s");
    etatRelais=LOW; // relais état bas
    digitalWrite(9,etatRelais); // met la broche de commande dans l'état voulu
    delay (val*10000);
    etatRelais=HIGH; //relais état haut, éteinte
    digitalWrite(9,etatRelais);
    //digitalWrite(9,LOW);
    //delay(5000);     
  }
}

En faite je voudrais rappeler la fonction setup() lorsque j'appuie une deuxième fois sur le bouton valider !
Si je fais une autre fonction setupperso() est ce que le message s'affichera bien statique ou est ce qu'il aparaitra-disparaitra-apparaitra........ en clignotant ?! car l'orsque je met le setup dans la loop en ce moment ca me donne cela
Logged

69100 (France)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 79
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si tu mets le setup dans la loop, tu appelles chaque fois lcd.begin et je pense que ça initialise chaque fois l'afficheur donc produit le clignottement.

L'idée de John-lenfr de faire une routine qui ressemble au set-up est bonne à condition de ne pas y mettre lcd.begin.
Logged

*** Micol *** Des milliers de Français seraient capable de créer une entreprise, mais les mêmes sont aussi capables de calculer qu'il ont in

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

Si tu mets le setup dans la loop, tu appelles chaque fois lcd.begin et je pense que ça initialise chaque fois l'afficheur donc produit le clignottement.

C'est ce que je pensais

L'idée de John-lenfr de faire une routine qui ressemble au set-up est bonne à condition de ne pas y mettre lcd.begin.

Donc je fais un autre setupperso() ou j'insert tout mon setup() en enlevant le lcd.begin??

et je peux donc appeler cette fonction dans le loop sans avoir cette efet de clignotement??

Je suisun peu novice en arduino :S !
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 377
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, crée toi juste une fonction perso du type:

void setupPerso{
  digitalWrite(10, HIGH); //Sortie mis à l'état Haut
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  j=0;
  lcd.print("Nombre de douche");
  lcd.setCursor(0,1);
  lcd.print(j);
  lcd.setCursor(0,2);
  lcd.print("Validation?");
  etatRelais=!etatRelais;
  digitalWrite(9,etatRelais);
}

et dans ton loop tu l'apelles où tu veux:

void loop{

//ton code
//appel du setup perso
setupPerso();

//ton code
}

Effectivement le lcd.begin n'est à faire qu'une seule fois pour initialiser l'afficheur, après c'est inutile.
Logged

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

Ah nice je viens de le faire très bien l'écran me donne ce que je veux mais le soucis c'est que ca ne prend plus en compte :
Code:
etatRelais=HIGH; //relais état haut, éteinte
    digitalWrite(9,etatRelais);

enfaite je valide la lumière s'allume mais s’éteint plus :s !!!
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3173
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Normale vu que le code de John qui visait à simplifier le tiens était

Code:
etatRelais=!etatRelais;
  digitalWrite(9,etatRelais);
Logged


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

Non mais complètement bête je suis ! Autant pour moi c'est ça fonctionne bien !
Merci à tous

PS : J'ai un deuxième topic sur les deux boutons inactifs : pouvez vous m'aider dessus ??

Logged

Pages: [1]   Go Up
Jump to: