Un debutant en galere (temporisation)

Bonjour a tous,

Debutant sur arduino, je trouve ce système sympa et je commence a my plancher dessus.

Pour ma 1ere application, je souhaite faire une prog qui lorsque on ouvre la porte la lumiere s’allume! rien de sorcier.

Si on oubli de fermer cette porte, au bout d’un certain temps la lumière s’éteint, jusque ici tout vas bien!

La ou je bloque et me casse la tête, c’est que j’aimerai une tempo lors de la fermeture de la porte, une tempo d’un temps défini pour que la lumière reste allumée

Je le redis, entièrement débutant en Arduino mais connais assez bien l’électronique

Merci a tous de votre aide

voici mon code:

enum : byte {ETEINTE, ALLUMEE, TEMPO_TERMINEE } lumiere ;
const int pinPorte = 10;
const int pinLumiere = 2;
unsigned long start;

unsigned long tempoPorte = 5000; // tempo apres fermeture de la porte
unsigned long tempoTerminee = 2000; // tempo si oubli fermeture porte

int tempoFin;
int temps_Actuel;


void setup() {

pinMode(pinPorte, INPUT);
pinMode(pinLumiere, OUTPUT);

 // init variable :

 byte ETEINTE = 0;
 byte ALLUMEE = 1;


}

void loop() 


{

  temps_Actuel = millis();
   


  
    
   
  
  if (digitalRead(pinPorte) == LOW) { // porte fermee
  lumiere = ETEINTE;
      tempoFin = temps_Actuel;
   
 }

  if (digitalRead(pinPorte) == HIGH) {    // Ouverture de la porte 
  lumiere = ALLUMEE;
   // rajout tempo = 1
  }
// si la porte reste trop longtemps ouverte la lumiere ce coupe 
  {

  if ((lumiere == ALLUMEE) && (((temps_Actuel) - (tempoFin)) < (tempoTerminee))){
    lumiere = ALLUMEE; }
  
else (lumiere = ETEINTE);

  }




 //GESTION ARRET / MARCHE LUMIERE
 
 
  if (lumiere == ALLUMEE ) {
      digitalWrite(pinLumiere, HIGH);
  }
  else {
    digitalWrite(pinLumiere, LOW);
  }




}

Bonjour,
Es ce qu'un delay suffira ?

delay(1000);//attendre 1 sec
delay(60000);//attendre 1 minute

Cordialement,
Aurélie

Si j’ai bien compris, si :

  • la porte est ouverte : la lumière est allumé
  • la porte est fermé : la lumière est éteinte
  • la porte est ouverte depuis longtemps : la lumière est éteinte (pour rallumer la pièce il faut fermer et ouvrir puis ouvrir la pièce)
int PIN_PORTE = 10;//à remplir
int PIN_LAMPE = 2;//à remplir

int i = 0;//initialisation de la variable que l'on va incrémenter dans la boucle while

int tps = 60;//temps à partir du quelle la lumière s'éteint lorsque la porte est ouverte

void setup() {
  pinMode(PIN_PORTE,INPUT);
  pinMode(PIN_LAMPE,OUTPUT);
}

void loop() {
  while(digitalRead(PIN_PORTE == HIGH) && i <= tps){
    digitalWrite(PIN_LAMPE == HIGH)){
    delay(1000);//on attends une seconde
    i++;//on ajoute 1 à la variable i
  }
  if(i > tps){
    digitalWrite(PIN_LAMPE == LOW);
  }
  
  if(digitalRead(PIN_PORTE == LOW){
    digitalWrite(PIN_LAMPE == LOW);
    i = 0;
  }
}

Si il y a des parties de code que tu ne comprends dit le moi car le principal c’est comprendre.
Aurélie

Geek2005:
Bonjour,
Es ce qu'un delay suffira ?

delay(1000);//attendre 1 sec

delay(60000);//attendre 1 minute




Cordialement,
Aurélie

Je pense que la fonction delay n'ira pas car je pense rajouter des choses dans le programme par la suite

Dans ce code il y a qu’une seule miliseconde de latence et tu peux rajouter tout ce que tu veux dans la fonction code_bis.

int PIN_PORTE = 10;//à remplir
int PIN_LAMPE = 2;//à remplir

int i = 0;//initialisation de la variable que l'on va incrémenter dans la boucle while

int tps = 60000;//temps à partir du quelle la lumière s'éteint lorsque la porte est ouverte en mili seconde soit 1 minutes ici par exemple

void setup() {
  pinMode(PIN_PORTE,INPUT);
  pinMode(PIN_LAMPE,OUTPUT);
}

void loop() {
  code_bis();
}
  while(digitalRead(PIN_PORTE == HIGH) && i <= tps){
    digitalWrite(PIN_LAMPE == HIGH)){
    delay(1);//on attends une seconde
    i++;//on ajoute 1 à la variable i
    code_bis();
  }
  if(i > tps){
    digitalWrite(PIN_LAMPE == LOW);
  }
  
  if(digitalRead(PIN_PORTE == LOW){
    digitalWrite(PIN_LAMPE == LOW);
    i = 0;
  }
}
void code_bis(){
  //rajoute tout ce que tu veux là
}

Cela te convient-il ?

ok merci a toi je vais essayer de voir cela et surtout de le comprendre.

car j'ai essayé de recopier ton code mais il me dit sur la dernière ligne de ton 1er code: too few arguments to function 'void digitalWrite(uint8_t, uint8_t)'

Oups il faut remplacer les deux égale par une virgule

Geek2005:
Oups il faut remplacer les deux égale par une virgule

pas partout ! relis bien ton code : il n'y a pas que des digitalWrite, il y a aussi des tests, mais mal écrits !

pas partout ! relis bien ton code : il n'y a pas que des digitalWrite, il y a aussi des tests, mais mal écrits !

le but était juste qu'il comprene après il n'a qu'à recopier le code avec son style et non à le copier coller comme ça il s'y perdra moi :wink:

Geek2005:
le but était juste qu'il comprene

c'était aussi le mien

Geek2005:
après il n'a qu'à recopier le code avec son style et non à le copier coller comme ça il s'y perdra moi :wink:

ce n'est pas une question de style mais de syntaxe : il y a réellement deux conditions mal écrites.

Merci pour votre aide... Je travail dessus mais tellement de chose a assimiler.... mais ça va venir j'y crois

julien38150:
Je travail dessus

examine bien (dans Resources*Reference*) les syntaxes de :
digitalWrite()
digitalRead()
if()

ça te permettra de corriger.

J’ai compilé mon code et dans la précipitation, j’ai décalé des parenthèse et remplacer des virgules par des égals. :disappointed_relieved:

int PIN_PORTE = 10;//à remplir
int PIN_LAMPE = 2;//à remplir

int i = 0;//initialisation de la variable que l'on va incrémenter dans la boucle while

int tps = 60000;//temps à partir du quelle la lumière s'éteint lorsque la porte est ouverte en mili seconde soit 1 minutes ici par exemple

void setup() {
  pinMode(PIN_PORTE,INPUT);
  pinMode(PIN_LAMPE,OUTPUT);

}
void code_bis(){
  //rajoute tout ce que tu veux là
}
void loop() {
  code_bis();

  while(digitalRead(PIN_PORTE) == HIGH && i <= tps){
    digitalWrite(PIN_LAMPE, HIGH);
    delay(1);//on attends une seconde
    i++;//on ajoute 1 à la variable i
    code_bis();
  }
  if(i > tps){
    digitalWrite(PIN_LAMPE, LOW);
  }
  
  if(digitalRead(PIN_PORTE) == LOW){
    digitalWrite(PIN_LAMPE, LOW);
    i = 0;
  }
}