AIDE DEBUTANT ! Arduino UNO - Température / Led

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 :slight_smile:

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

}

Je ne comprends pas bien ce que tu attends de nous.

Salut,

Tu entends quoi par "avancer plus" ??!

PS : pense à utiliser les balises code (# dans le menu reply) pour poster du code, c'est plus lisible

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 :slight_smile:
merci :slight_smile:

Le code entre les balise STP, il faut éditer ton 1er message.

Voila ! c'est mieux ?

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 :confused:

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 ! :fearful:

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....

  1. Donc les broches analogiques sont configurées en entrée par défaut donc pas la peine de les déclarer comme tels.

  2. 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.

Essaye ça :

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.

Bonne journée.

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 :slight_smile: