cellule photoelectrique

bonjour,

je cherche a allumer une led lorsque ma cellule arrive a une certaine valeur mais je ne comprend pas
ce qui ne marche pas dans mon programme.
/*cellulle photoelectrique sur broche A0
*/
const int analogInPin = A0; // cellule photoelectrique sur broche A0
int sensorValue = 0; // variable ou est stocké la valeur de la cellule

const int LedVerte =9; // LedVerte connectée sur broche D9

void setup() {
// mise en place du moniteur serie pour lire la valeur de la cellule
Serial.begin(9600); // port com
pinMode (LedVerte, OUTPUT); // declare la broche LedVerte comme une sortie

}
void loop() {
Serial.print("sensor = ");
Serial.print(sensorValue); // on imprime la valeur sur le moniteur serie
delay(20); // tempo pour la lecture sur le moniteur serie

sensorValue = analogRead(analogInPin); // lecture valeur cellule photoelectrique

if (sensorValue <100); // si la valeur lue est correspondante a la nuit
{
digitalWrite (LedVerte, HIGH); // on allume la Led

}

if (sensorValue >100); // si la valeur lue est correspondante a la nuit
{
digitalWrite (LedVerte, LOW); // on eteind la Led

}

}
d’avance merci de votre aide

Bonsoir

Mettez votre code entre les balises

qu'elle est la valuer retourné dane le moniteur ?

@+

Manque aussi une photo du schéma à main levée, le type de cellule...

Tel que c'est dit, il y a une cellule entre la broche A et ...? La cellule est-elle alimentée?

OK j’ai trouvé dans la ligne “if (sensorValue >100);” il suffisait de suprimer le “;” c’est bizarre et je comprend pas trop mais ça fonctionne .

petite () il faudrait que ma valeur quand elle est <100 soit revérifiée au bout d’un certain est que si elle est toujours <100 on exécute le programme.
Je précise je ne veux pas la solution mais une piste :wink: .

if (sensorValue >100); // si la valeur lue est correspondante a la nuit
{
digitalWrite (LedVerte, LOW); // on eteind la Led

}

c'est bizarre et je comprend pas trop mais ça fonctionne .

il est décrit si le test est positif, fait ce qu'il y a derrière. Le ; marque la fin de ce qu'il y a à faire. Puis il faut éteindre la led (dans tous les cas car le if est fini au ;).

Sans le ; le test porte sur ca qu'il y a entre les accolades.
ce que tu as écrit c'est:

if (sensorValue >100); // fin du if
digitalWrite (LedVerte, LOW) // deuxième instruction

Ce que tu voulais:

if (sensorValue >100) digitalWrite (LedVerte, LOW)

La led verte est donc toujours éteinte

yanosh31:
petite () il faudrait que ma valeur quand elle est <100 soit revérifiée au bout d’un certain est que si elle est toujours <100 on exécute le programme.
Je précise je ne veux pas la solution mais une piste :wink:

Tu testes d’abord si ta valeur est inférieure à 100. Si oui, tu initialises un chrono avec millis

unsigned long chrono =millis () ;

Ensuite tu vérifies que ce chrono dépasse la durée voulue

if (millis () - chrono > duree)

Si oui, tu refais ta mesure.

C’est une piste, en réalité ce sera un peu plus complexe…

Petite mise au point qui te seras très utile.

Le débogage est la partie la plus prise de tête de la programmation. Mais elle est considérablement allégée si on travaille méthodiquement :

  • découper son programme en fonctions simples : voir cette explication par exemple (fais bien attention à la notion de variables globales et locales)

  • les tester de manière unitaire : chaque fois que tu as besoin de surveiller une variable ou le passage dans un point precis du sketch, tu rajoutes a cet endroit une instruction Serial.print() sans oublier le Serial.begin() dans le setup(). Le Serial monitor te permet de visualiser ce qui se passe pendant le déroulement du programme. Lorsque la partie concernée est au point, on enlève les lignes Serial.print(). Pour tester fonction par fonction, tu peux passer temporairement une partie de ton sketch en commentaire

  • quand le test unitaire des fonctions est terminé on intègre les fonctions dans le programme final. Si les fonctions ont un nom explicite, la boucle est si simple à comprendre qu'elle se passe presque de commentaires. Le second avantage est qu'en créant des fonctions tu évites de répéter inutilement des boucles et des conditionnelles, ça peut alléger considérablement ton code.

Commence toujours par faire un ctrl+T qui permet d'ajuster les alignements du sketch et de vérifier si tu n'as pas des "{" ou des "}" manquants ou en trop. Utilise Compile/Verify pour vérifier ta syntaxe. Après seulement tu peux commencer à vérifier la fonctionnalité de ton programme.

Si tu appliques cette méthode, tu verras que tu galèreras moins mais il faut quand même avoir un minimum de connaissance de base du langage avant de commencer à recopier des bouts de code pris à droite et à gauche.

merci pour vos réponses, explications et méthodes pour la programmation trés pratique.
bon c'est pas tout mais j'ai du boulot a présent :slight_smile:
je reviendrai vous dire si j'ai résolu l’énigme " millis"
a bientot