Regarde bien, tu n'as pas placé la ligne au bon endroit... Il faut la mettre au moment où tu récupères la valeur du potar...!
-----
Regarde bien, tu n'as pas placé la ligne au bon endroit... Il faut la mettre au moment où tu récupères la valeur du potar...!
je voudrais faire fonctionner ce sous programme après avoir appuyer sur un bouton et faire ecouler la fonction millis apres .Comment faire?svp
Code:int pinPot=0; int valPot=0; int pinLED=8; int temps=0; int buttonPin = 2; long temps1; int buttonState = 0; void setup() { Serial.begin(9600); pinMode(pinLED,OUTPUT); pinMode(buttonPin, INPUT); digitalWrite(pinLED,HIGH); temps=millis(); } void loop() { buttonState = digitalRead(buttonPin); valPot=analogRead(A0); int val=map(valPot,0,1023,1,5); if (buttonState == HIGH) { temps1=val*60000; if((millis() - temps) > (temps1) ){ digitalWrite(pinLED,LOW); } } }
Il est où le sous programme ?
Place l'appel juste au début du IF, avant la tempo.
essais de télécharger la librairie potentiomètre ici -> http://playground.arduino.cc/uploads...eter.1.2.1.zip
pourquoi veux tu que je telecharge la librairie du potentiomètre je n'ai aucun problème au niveau de sa
Le plus simple est de créer dans ton programme une variable contenant le temps que tu veux atteindre avec ta tempo (millis + ta valeur réglée) et de boucler sur cette variable de la même façon que tu as fait dans ton programme.
Tu ne peux pas remettre à 0 millis, sauf attendre que la variable soit en overflow (genre une semaine) ou bien résetter la carte.Code:int pinPot = A0; // la broche d'entrée pour le potentiomètre int pinLED = 13;// la broche pour la LED int valPot = 0; //Variable pour stocker la valeur provenant du potentiomètre unsigned long ancienMillis = 0; long temps; void setup() { Serial.begin(9600); //Déclaration pinLED en tant que sortie pinMode(pinLED,OUTPUT); } void loop() { // Lis la valeur du potentiomètre valPot=analogRead(pinPot); int val=map(valPot,0,1023,1,5); temps=val*10000; unsigned long Millis = millis(); if (Millis - ancienMillis >= temps) { digitalWrite(pinLED,LOW); }else { digitalWrite(pinLED,HIGH); } ancienMillis = millis(); }
Il y a une question là ?
jai simulé mon programme sur proteus . Quand le temps selectionnée est fini je voudrais faire recommencer en selectionnant un autre temps. Comme vous m'avez dit que la fonction millis ne peut pas etre 0 comment je peux garder l'ancien temps et faire marcher le programme sans reset l'arduino.
Tu initialises une variable égale à millis() en début de programme, et tu calcule le temps auquel ta tempo doit s'arrêter, mais avec cette nouvelle variable.
comment ça ? j'ai déja une variable initialiser avec millis au début du programme
Crée une variable qui contient le temps auquel ta tempo doit s'arrêter, genre TempsFin = millis + (val*10000) et tu boucles là dessus en comparant cette variable à millis(). Une fois la tempo faite, tu recalcules TempsFin...!
comme ceciCode:int pinPot = A0; // la broche d'entrée pour le potentiomètre int pinLED = 13;// la broche pour la LED int valPot = 0; //Variable pour stocker la valeur provenant du potentiomètre unsigned long ancienMillis = 0; int TempsFin; long temps; void setup() { Serial.begin(9600); //Déclaration pinLED en tant que sortie pinMode(pinLED,OUTPUT); } void loop() { unsigned long Millis = millis(); // Lis la valeur du potentiomètre valPot=analogRead(pinPot); int val=map(valPot,0,1023,1,5); temps=val*10000; if (Millis - ancienMillis >= temps) { digitalWrite(pinLED,LOW); }else { digitalWrite(pinLED,HIGH); } TempsFin = millis() + temps; TempsFin = millis() ;
Code:int pinPot = A0; // la broche d'entrée pour le potentiomètre int pinLED = 13;// la broche pour la LED int valPot = 0; //Variable pour stocker la valeur provenant du potentiomètre long temps; void setup() { Serial.begin(9600); //Déclaration pinLED en tant que sortie pinMode(pinLED,OUTPUT); } void loop() { // Lit la valeur du potentiomètre valPot=analogRead(pinPot); long val=map(valPot,0,1023,1,5); /* temps en secondes*/ temps = val * 1000L + millis();; /*allume la LED */ digitalWrite(pinLED,HIGH); /* allumée signifie que le temps est calculé et qu'il est en cours */ /* attend le dépassement du temps */ while (Millis() < temps); /* éteint la LED */ digitalWrite(pinLED,LOW); /* éteinte signifie temps écoulé */ /* reste éteinte 3 secondes */ delay(3000); }