Go Down

Topic: Utiliser valeur du potentiomètre pour décaler une action (Read 8 times) previous topic - next topic

gunsman76

voilà j'ai avancé !!!!


la led verte s'allume, immédiatement la led rouge s'allume puis s'éteint !!


Code: [Select]

int etat;

etat=digitalRead(Ledverte);

if(etat==HIGH){
  digitalWrite(Ledrouge, HIGH);
}
else
{
  digitalWrite(Ledrouge, LOW);
 
  }

infobarquee

au lieu de mettre des bouts de codes comme ca, mets ton code entier.
déjà ca veut rien dire ce que tu écris
Quote
if(millis()+potard1)

gunsman76

Oups, je pensais que c'était plus facile de mettre les modifs.

Voilà le code :


Code: [Select]
// include the library code:
#include <LiquidCrystal.h>

// initialisation librairie LCD
const int RS=2;
const int E=3;
const int D4=4;
const int D5=5;
const int D6=6;
const int D7=7;

const int RVar=0; //potentiomètre 1 "col"
const int RVar1=1; //potentiomètre 2 "fond"
const int RVar2=2; // potentiomètre 3 "Travers"

const int photoIR=3; //cellule mesure de lumière ARCHE

const int Ledverte=8;
const int Ledrouge=9;

int mesureIR=0; //Infrarouge initialisation
int mesureBrute=0; // Potard initialisation

int seuil=500; //Infrarouge seuil sensiblité passage pièce

float mesure;
float potard;
float potard1;
float potard2;

unsigned long time1;
unsigned long time2;
int etat;

LiquidCrystal lcd(RS,E,D4,D5,D6,D7);

void setup() {
 // set up LCD indication nb colonne et case:
 lcd.begin(16, 2);
 lcd.clear();
 delay(10);
 // Print a message to the LCD.
 lcd.print("Piochel 2013");
 delay(1000);
 lcd.clear();
 delay (10);
  lcd.print("Initialisation...");
 delay(2000);
 lcd.clear();
 delay (10);
 
 pinMode (Ledverte, OUTPUT);
 pinMode (Ledrouge, OUTPUT);
 
 Serial.begin(115200);
 
}

void loop() {

 
// initialisation LCD  
 
 
 lcd.home();
 lcd.print("Col");
 lcd.setCursor(6,0);
 lcd.print("Fond");
 lcd.setCursor(13,0);
 lcd.print("Tra");
 
 
// Passage pièce devant InfraRouge  

 
  mesureIR=analogRead(photoIR);
 if (mesureIR<seuil) {//Serial.println("Piece detecte");
 digitalWrite (Ledverte, HIGH);
 }
   
 else {
   digitalWrite(Ledverte,LOW);
 }
 
 do {
   mesureIR = analogRead(photoIR);
 } while(mesureIR < seuil);
 
 
// Mesure et décalage temps et inscription sur LCD

 
// Initialisation 1er potard
 
 
 mesureBrute=analogRead(RVar);
 mesure=map(mesureBrute,0,1023,0.0,100.0);
 
 potard=mesure;
 lcd.setCursor(0,1);
 lcd.print(potard,0);
 if (mesure < 1000) lcd.print(" ");
 if (mesure < 100) lcd.print(" ");
 if (mesure < 10) lcd.print(" ");

// nouveau programme test

//int temps;
//int test=0;

//if(millis()+(potard)) {
// test=0;
// }else{
//  digitalWrite(Ledrouge,HIGH);
 
//}
 
// Initialisation 2e potard
 
 mesureBrute=analogRead(RVar1);
 mesure=map(mesureBrute,0,1023,0.0,1000.0);
 
 potard1=mesure/10.0;
 lcd.setCursor(7,1);
 lcd.print(potard1,0);
 if (mesure < 1000) lcd.print(" ");
 if (mesure < 100) lcd.print(" ");
 if (mesure < 10) lcd.print(" ");
 
 
// Initialisation 3e potard

 
 mesureBrute=analogRead(RVar2);
 mesure=map(mesureBrute,0,1023,0.0,1000.0);
 
 potard2=mesure/10.0;
 lcd.setCursor(13,1);
 lcd.print(potard2,0);
 if (mesure < 1000) lcd.print(" ");
 if (mesure < 100) lcd.print(" ");
 if (mesure < 10) lcd.print(" ");

 
// Decalage des ouvertures electrovanne

int etat;

etat=digitalRead(Ledverte);

if(etat==HIGH){
 digitalWrite(Ledrouge, HIGH);
}
else
{
 digitalWrite(Ledrouge, LOW);
 
 }


}
 





Donc là tout fonctionne, il me manque juste a faire en sorte que lorsque la led verte s'allume, il faut que la led rouge s'allume en décalage en fonction de la position du potentiomètre (s'il est à 0=0secondes, s'il est ouvert à fond = 100 secondes)


Merci pour ton aide précieuse

infobarquee

tu peux faire un truc de ce genre, mais j'ai pas relus tout le post pour voir si tu dois allumer pendant X secondes la led ou pas

Quote

etat=digitalRead(Ledverte);
timerledverte = millis();

//lecture du potar
ton code potar ici
//fin lecture potar
timerledrouge = timerledverte + (potar*XXXX); //XXXX etant le temps a multiplier pour les millisecondes en plus
if(etat==HIGH & timerledrouge < millis()){ //tant que timerledrouge inférieur au temps prévu on allume la led rouge
  digitalWrite(Ledrouge, HIGH);
}
else
{
  digitalWrite(Ledrouge, LOW);
 
  }



gunsman76

#44
Feb 02, 2013, 05:43 pm Last Edit: Feb 02, 2013, 05:54 pm by gunsman76 Reason: 1
Ouf je m'arrache les cheveux mais là ça fonctionne a peu près, merci pour tes précieux conseils.


Bon alors à peu près, car le temps entre l'allumage de la led verte et l'allumage de la led rouge ne doit pas être en seconde.

Si je mets à 0 le potard, l'allumage se fait aussitôt, si je décale un peu le potentiomètre j'attends mais rien ne se passe...


Code: [Select]

// include the library code:
#include <LiquidCrystal.h>

// initialisation librairie LCD
const int RS=2;
const int E=3;
const int D4=4;
const int D5=5;
const int D6=6;
const int D7=7;

const int RVar=0; //potentiomètre 1 "col"
const int RVar1=1; //potentiomètre 2 "fond"
const int RVar2=2; // potentiomètre 3 "Travers"

const int photoIR=3; //cellule mesure de lumière ARCHE

const int Ledverte=8;
const int Ledrouge=9;

int timerledverte=0;
int timerledrouge=0;


int mesureIR=0; //Infrarouge initialisation
int mesureBrute=0; // Potard initialisation

int seuil=500; //Infrarouge seuil sensiblité passage pièce

float mesure;
float potard;
float potard1;
float potard2;

unsigned long time1;
unsigned long time2;
int etat;

LiquidCrystal lcd(RS,E,D4,D5,D6,D7);

void setup() {
  // set up LCD indication nb colonne et case:
  lcd.begin(16, 2);
  lcd.clear();
  delay(10);
  // Print a message to the LCD.
  lcd.print("Piochel 2013");
  delay(1000);
  lcd.clear();
  delay (10);
   lcd.print("Initialisation...");
  delay(2000);
  lcd.clear();
  delay (10);
 
  pinMode (Ledverte, OUTPUT);
  pinMode (Ledrouge, OUTPUT);
 
  Serial.begin(115200);
 
}

void loop() {

 
// initialisation LCD 
 
 
  lcd.home();
  lcd.print("Col");
  lcd.setCursor(6,0);
  lcd.print("Fond");
  lcd.setCursor(13,0);
  lcd.print("Tra");
 
 
// Passage pièce devant InfraRouge 

 
   mesureIR=analogRead(photoIR);
  if (mesureIR<seuil) {//Serial.println("Piece detecte");
  digitalWrite (Ledverte, HIGH);
  }
   
  else {
    digitalWrite(Ledverte,LOW);
  }
 
  do {
    mesureIR = analogRead(photoIR);
  } while(mesureIR < seuil);
 
 
// Mesure et décalage temps et inscription sur LCD

 
// Initialisation 1er potard
  etat=digitalRead(Ledverte);
  timerledverte=millis();
   
  mesureBrute=analogRead(RVar);
  mesure=map(mesureBrute,0,1023,0.0,1000.0);
 
  potard=mesure;
  lcd.setCursor(0,1);
  lcd.print(potard,0);
  if (mesure < 1000) lcd.print(" ");
  if (mesure < 100) lcd.print(" ");
  if (mesure < 10) lcd.print(" ");
 
  timerledrouge = timerledverte +(potard*1);//nouveau prog
  if(etat==HIGH & timerledrouge < millis()){//nouveau prog
    digitalWrite(Ledrouge, HIGH);//nouveau prog
  }//nouveau prog
 
  else//nouveau prog
  {//nouveau prog
  digitalWrite(Ledrouge,LOW);//nouveau prog
  }//nouveau prog
 
 
// nouveau programme test

//int temps;
//int test=0;

//if(millis()+(potard)) {
// test=0;
// }else{
//  digitalWrite(Ledrouge,HIGH);
 
//}
   
// Initialisation 2e potard
 
  mesureBrute=analogRead(RVar1);
  mesure=map(mesureBrute,0,1023,0.0,1000.0);
 
  potard1=mesure/10.0;
  lcd.setCursor(7,1);
  lcd.print(potard1,0);
  if (mesure < 1000) lcd.print(" ");
  if (mesure < 100) lcd.print(" ");
  if (mesure < 10) lcd.print(" ");
 
 
// Initialisation 3e potard

 
  mesureBrute=analogRead(RVar2);
  mesure=map(mesureBrute,0,1023,0.0,100.0);
 
  potard2=mesure;
  lcd.setCursor(13,1);
  lcd.print(potard2,0);
  if (mesure < 1000) lcd.print(" ");
  if (mesure < 100) lcd.print(" ");
  if (mesure < 10) lcd.print(" ");

 
// Decalage des ouvertures electrovanne

//int etat;

//etat=digitalRead(Ledverte);

//if(etat==HIGH){
//  time1=millis();
//  if (time2=time1++(potard));
 
//  digitalWrite(Ledrouge, HIGH);
//}
//else (millis() + (potard1))

//  digitalWrite(Ledrouge, LOW);
//}
 
  }


 






Je pense que ça vient de ma fonction map qui ne doit pas traduire en secondes


Tu m'avais noté dans ton morceau de code potard*XXXX, hors justement je ne veux pas faire intervenir de XXXX mais récupérer la valeur du potard qui doit décalé le temps.


Exemple si sur l'écran LCD j'ai 10, ça doit décalé l'allumage de la led rouge une fois la led verte allumé de 10 secondes.

Go Up