Salut a tous ! Comme je l'ai bien précisé dans le titre: je débute
Je viens "d'écrire" (tant bien que mal 8) ) mon premier programme, mais je ne sais pas comment avancer plus, il semble que quelque chose m'échappe. Tout est expliqué dans le programme, merci d'y jeter un œil si vous avez le temps: Pour quelqu'un si connait un tout petit peu cela prendra 30 secondes à résoudre, donc expliquez moi svp
Merci d'avance !
/*
LM35 temperature sketch
This sketch will print to the Serial Monitor
the temperature in Celsius, Fahrenheit and the
A/D value read in. Only the initial values will
be printed (after boot or reset) and every time
the temperature changes.
===Rajouté par Wiz===
Lorsque la température dépasse un certain seuil, une LED clignote
*/
const int inPin = 0; // analog pin
int prevValue = 0;// previous value read in that is different from current
int ledPin = 8;//on introduit une nouvelle variable, la lampe LED sur le port 8
void setup()
{
pinMode(ledPin,OUTPUT);// on définit la nouvelle variable comme étant une sortie
Serial.begin(9600);
}
void loop()
{
int value = analogRead(inPin);
if (23<analogRead(inPin)); { // Variable "si": si la température dépasse 23, la Led clignote
digitalWrite(ledPin,HIGH); // La LED s'allume pour un certain temps
delay(250);
digitalWrite(ledPin,LOW); // Puis s'éteinds.
delay(250);[/color]
}
if (prevValue != value) {
float millivolts = (value / 1024.0) * 5000;
float celsius = millivolts / 10; // sensor output is 10mV per degree Celsius
Serial.print(" Bonjour Lucas, il fait actuellement ");
Serial.print(celsius);
Serial.print(" degrees Celsius ");
Serial.print( (celsius * 9)/ 5 + 32 ); // converts celsius to fahrenheit
Serial.print(" degrees Fahrenheit, ");
Serial.print("A/D value = "); Serial.println(value);
prevValue = value; // save current value as previous value
}
delay(1000); // wait for one second
}
Oui c'est vrai qu'au final j'ai pas été très clair ^^'
J'aimerais bien que vous m'aidiez à terminer ce petit programme pour qu'il fonctionne, me dire ce que je dois modifier
merci
salut deja il te manque dans le setup :
pinMode(inPin, INPUT);
il faut que tu branches ton capteur de température (je suppose?) sur une entrée analogique
Non ca a priori c'est bon: le capteur de température fonctionnait déjà sans problème dans le programme basique du quel je me suis inspiré... Je pense que le problème se trouve dans le loop ! Dois-je définir une nouvelle entrée pour le chiffre 23 avec le quel la température sera comparée ?
Non ton 23 sera constant (23 degrée)
Essaye quand même la ligne que je t'ai dite,
Et change ton if en
void loop()
{
int value = analogRead(inPin);
if (23<value); { // Variable "si": si la température dépasse 23, la Led clignote
digitalWrite(ledPin,HIGH); // La LED s'allume pour un certain temps
delay(250);
bla bla
Ca le téléverse sans problèmes, par contre toujours le même problème à une modification près: désormais la lampe ne fait que briller en continue, sans aucun rapport avec la température
Hm, avant elle clignotait donc ? C’était quoi votre problème avant ?
Je recopie le code que j'aurais mis
/*
LM35 temperature sketch
This sketch will print to the Serial Monitor
the temperature in Celsius, Fahrenheit and the
A/D value read in. Only the initial values will
be printed (after boot or reset) and every time
the temperature changes.
===Rajouté par Wiz===
Lorsque la température dépasse un certain seuil, une LED clignote
*/
const int inPin = 0; // analog pin
int prevValue = 0;// previous value read in that is different from current
int ledPin = 8;//on introduit une nouvelle variable, la lampe LED sur le port 8
void setup()
{
pinMode(ledPin,OUTPUT);// on définit la nouvelle variable comme étant une sortie
pinMode(inPin, INPUT);
Serial.begin(9600);
}
void loop()
{
int value = analogRead(inPin);
if (23<value); { // Variable "si": si la température dépasse 23, la Led clignote
digitalWrite(ledPin,HIGH); // La LED s'allume pour un certain temps
delay(250);
digitalWrite(ledPin,LOW); // Puis s'éteinds.
delay(250);
}
if (prevValue != value) {
float millivolts = (value / 1024.0) * 5000;
float celsius = millivolts / 10; // sensor output is 10mV per degree Celsius
Serial.print(" Bonjour Lucas, il fait actuellement ");
Serial.print(celsius);
Serial.print(" degrees Celsius ");
Serial.print( (celsius * 9)/ 5 + 32 ); // converts celsius to fahrenheit
Serial.print(" degrees Fahrenheit, ");
Serial.print("A/D value = "); Serial.println(value);
prevValue = value; // save current value as previous value
}
delay(1000); // wait for one second
}
Tout d'abord merci pour le temps que vous passez à m'aider, étant nouveau, c'est vraiment bien d'être un peu épaulé !
Mon problème était que la Led clignotait constamment avec mon premier programme, quelle que soit la température. Avec les lignes que vous m'avez dis de modifier, elle ne faisait plus que briller constamment, et désormais avec ton programme elle clignote de nouveau, quelle que soit la température !
Je rappelle mon intention: J'aimerais que la lampe soit éteinte, et qu'elle ne s'allume que lorsque une certaine température est dépassée, c'est aussi simple que ça !
Wizluk:
Mon problème était que la Led clignotait constamment avec mon premier programme, quelle que soit la température
Si tu l'avais dit tout de suite....
Donc les broches analogiques sont configurées en entrée par défaut donc pas la peine de les déclarer comme tels.
Ta LED clignote tout le temps parce que tu ne fais pas la comparaison sur la bonne valeur.
Tu compares value à 23 hors value ne contient pas la température en degrés. C'est celsius qui contient la bonne valeur.
Donc je te suggère de déplacer ton test à la fin de loop juste avant le delay(1000) et de faire le test suivant
if (23.0<celsius) // test si la température excède 23°C
La constante doit être flottante puisque celsius est un float
D'ailleurs tu pourrais aussi l'écrire comme cela
if (23.0<celsius) { // Variable "si": si la température dépasse 23, la Led clignote
digitalWrite(ledPin,HIGH); // La LED s'allume pour un certain temps
delay(250);
digitalWrite(ledPin,LOW); // Puis s'éteinds.
delay(750);
}else{
delay(1000);
}
Ainsi que la LED clignote ou non ta boucle s'exécutera dans le même temps.
const float inPin = 0; // analog pin
float temp = 0; // variable pour stocker la température
int ledPin = 8;//on introduit une nouvelle variable, la lampe LED sur le port 8
boolean ledState = LOW; // declare le boléen à la valeur 0
long previousMillis = 0; // garde en mémoire la dernière valeur de temps
long interval = 1000; // temps d'un clignotement (milliseconds) 1000 = 1 seconde
void setup()
{
pinMode(ledPin,OUTPUT);// on définit la nouvelle variable comme étant une sortie
Serial.begin(9600);
}
void loop()
{
temp = (5.0 * analogRead(inPin) * 100.0) / 1024; // calcule la température par rapport a la valeur analogique
if (temp > 23.00); { // Variable "si": si la température dépasse 23, la Led clignote
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// sauve la valeur de temps du dernier changement d'état de la led
previousMillis = currentMillis;
// si la led est éteinte > allume et vice-versa:
ledState = !ledState; // inverse la valeur du boléen
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState); // mets la led dans l'état de ledstate (1-0)
}
else
digitalWrite(ledPin,LOW); // éteinds si les condition ne sont pas remplie
}
}
La fonction de clignotement est non blocante, donc lorsque ta led est allumée, le processeur peut faire d'autre chose....
Effectivement, la valeur lu par ton entrée analogique sera une valeur entre 0 et 1024, donc si c'est inférieur a 23 (quand la LED clignote plus donc) eh bien il fera froid, très froid. J'avais pas convertis.
Pour le programme de fdufnews, met plutôt des "delay(500);" dans ton if, else, t'auras un intervalle régulier de clignotement.
plutôt qu'être éteinte plus longtemps. (ne pas changer le delay(1000); du else pour une actualisation d'une seconde.)
De plus si ton programme devient long et compliqué, je te conseil de passer comme l'a écrit Jean-François, avec la fonction millis() ce qui te permettra de faire clignoter ta LED indépendamment de ce qui se passe après, de même pour ta mesure de la température.
Minicarpet:
Pour le programme de fdufnews, met plutôt des "delay(500);" dans ton if, else, t'auras un intervalle régulier de clignotement.
plutôt qu'être éteinte plus longtemps. (ne pas changer le delay(1000); du else pour une actualisation d'une seconde.)
C'était la temporisation dans le programme de Wizluk.
Le but c'était de faire fonctionner le programme d'origine pas de le refaire.
Oui pour ça que j'ai mis ce message, il avait une tempo de 250 entre chaque clignotement, donc le mieux serait de mettre 500 et 500, mais je pense qu'il a compris les délais donc il mettre ce qu'il veut évidement