Go Down

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

gunsman76

#55
Feb 03, 2013, 11:16 am Last Edit: Feb 03, 2013, 11:18 am by gunsman76 Reason: 1
Bon mauvaise nouvelle ça ne fonctionne pas du tout... Lorsque je compile le programme et que je le televerse, outre le fait que le lcd ne fonctionne pas, c'est surtout que les 2 leds sont allumés en continue, l'action des potards ne change rien. Et le passage devant la cellule ne modifie rien du tout.

Je vais donc essayer de prendre quelques morceaux de ton programme pour faire avancer mon mien  :D

Edit :

Concernant l'IR, ce n'est pas une IR comme tu dois t'imaginer (0 ou 1) mais c'est un rayon lumineux dirigé vers une photo resistance.

infobarquee

si tu modifie pas certaines choses, les potars ne fonctionnent pas effectivement
Quote
//mesureBrute=analogRead(RVar);
  //mesure=map(mesureBrute,0,1023,0.0,100.0);
  mesure = 1;
  potard=mesure*10000;


mais ton truc est pas clair
la led verte s'allume au passage, mais reste t'elle allumée après?
la rouge s'allume quand? après un certain temps ou dès que la verte est allumée?
la rouge s'allume pendant combien de temps?

car d'après tes posts et ton prog,
la verte s'allume à la détection
si la verte est allumée => rouge s'allume pendant valeur du potar

sachant que la verte s'allume à la détection, reste t'elle allumée après?
donc normal que la verte reste allumée pour que la rouge s'allume le temps du potar, puis le temps écoulé, elles s'éteignent.
c'est ce que fait le code que je t'ai passé ;)
ledverte allumée => timerledverte = millis();
valeur potar = xxx
timerledrouge = timerledverte + (xxx * y); y coef multiplicateur a déterminer
si timerledrouge > millis() => tout reste allumé
si timerledrouge < millis() => tout s'éteint jusqu'au prochain passage.

un conseil, avant de mettre le lcd et tout le basard, fait un truc simple avant avec des retours Serial pour tester les valeurs, tu vas gagner du temps et des cheveux ;)

gunsman76

Oui effectivement ce n'est pas clair (pour toi  :smiley-mr-green:) mais dans ma tête c'est clair  :smiley-mr-green: :smiley-mr-green:


Bon alors on va faire simple :


photo resistance eclairé par lazer

si coupure

lampe verte s'allume



voilà ça c'est l'idée.


maintenant j'ajoute un potentiomètre dans le montage relié à une led rouge.

Quand la photoresistance n'est plus eclairé par le laser (donc passage devant), la led verte s'allume et je voudrais que la led rouge s'allume avec un décalage


                                                  potentiomètre

detection allumage ledverte ------------>temps potard<-----------------> déclenchement ledrouge





J'ai mis 3 potentiomètres, c'est juste que l'allumage de la led verte va entrainé 3 actions



Est-ce que c'est plus clair ?

infobarquee

alors c'est simple, avec le même sketch et quelques modifs à la fin
Quote

const int RVar = A0; //potentiomètre 1 "col"
const int RVar1 = A1; //potentiomètre 2 "fond"
const int RVar2 = A2; // potentiomètre 3 "Travers"
const int photoIR = A3; //cellule mesure de lumière ARCHE
const int Ledverte = 8;
const int Ledrouge = 9;

//unsigned long time;
unsigned long timerledverte = 0;
unsigned long timerledrouge = 0;

int sensorValue = 0;
long time =0;
int timeHasCome = 0;

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

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

float mesure;
float mesure1;
float mesure2;

//float potard;
//float potard1;
//float potard2;
int potard = 0;
int potard1 = 0;
int potard2 = 0;

unsigned long time1;
unsigned long time2;
int etat;

int val=0;


void setup() {
  pinMode (Ledverte, OUTPUT);
  pinMode (Ledrouge, OUTPUT);
  pinMode (RVar, INPUT);
  pinMode (RVar1, INPUT);
  pinMode (RVar2, INPUT);
  pinMode (photoIR, INPUT);
  digitalWrite(Ledverte,LOW);
  digitalWrite(Ledrouge,LOW);
  Serial.begin(9600);
  Serial.println("initialisation PIR");
  delay(3000);
}

void loop() {
  mesureBrute=analogRead(RVar);
  mesure=map(mesureBrute,0,1023,0.0,100.0);
// mesure = 1;
  potard=mesure*10000;
  Serial.print("Lecture mesure1 : ");
  Serial.print(mesure);
  Serial.print("Lecture potar1 : ");
  Serial.println(potard);


// Passage pièce devant InfraRouge


   mesureIR = digitalRead(photoIR);
   
  if (mesureIR < seuil) {
    Serial.println("Piece detecte");
    digitalWrite (Ledverte, HIGH);
      timerledverte = millis();
    Serial.print("timerledverte : ");
    Serial.println(millis());
   
    timerledrouge = timerledverte + potard;
    testledrouge();
   
  }
   
  else {
    digitalWrite(Ledverte,LOW);
    digitalWrite(Ledrouge,LOW);
    timerledverte = 0;
  }

}

  void testledrouge()
{
  Serial.println("Testled rouge");
  // Mesure et décalage temps et inscription sur LCD
  // Initialisation 1er potard
  etat=digitalRead(Ledverte);
  Serial.print("etat led verte :");
  Serial.println(etat);
  delay(2000);
  digitalWrite (Ledverte, LOW); on éteint la led verte

         if(timerledverte > 0){
               Serial.println(timerledrouge);

                  if(timerledrouge > millis()){
                             digitalWrite(Ledrouge, LOW);
                  }else{       
                         digitalWrite(Ledrouge, HIGH);

                   }
          }

}
  }

gunsman76

Je ne veux pas abuser de ta patience ni de ta gentillesse mais j'ai une erreur de compilation et j'ai beau essayé toutes les solutions (à mon niveau) mais rien à faire.



Go Up