Aide dans le code

Bonjour a tous,
débutant en arduino, mais aussi sur ce forum, j’espère poster dans la bonne section

j'ai des soucis concernant le codage, et je vais tenter d’être clair.

*entre temps j'ai modifié le code, *
je vais essayer par étape ça évitera de tout mélanger.

tout fonctionne sauf les tempos
le relai => A5
capteur lumiere => A0

lors du démarrage, le capteur de lumière s'active automatiquement et teste la présence de lumière
si la lumiere est presente je souhaite qu'il attente 5 seconde avant d'activer le relai... pour l'activer pendant 4 secondes
mais il active immédiatement..

voici le code qui fonctionne en partie (detection lumiere, pilotage relai...)
le soucis c'est les tempos

      int pinCapteur = A0; // le capteur Lumiere 
      int pinRelay = A5; // le relais ELECTRO AIMANT
      int photocellReading = analogRead(pinCapteur);

      int Ordre_Tempo = 0;
      unsigned long Tempo_Repos = 5000; // tempo repos de 8s
      unsigned long Temps_Actuel;
      unsigned long Temps_Precedent; 
    
void setup() {
                Serial.begin(115200);     //initialisation moniteur série à 115200baud
                pinMode(pinCapteur, INPUT); // on veut lire le capteur
                pinMode(pinRelay, OUTPUT);
                digitalWrite(pinRelay, HIGH);  // éteint le relai ELECTRO AIMANT
                Serial.println("--- Initialisation");
                }

   
void loop()  {
                Temps_Actuel = millis();
                                                          //photocellReading = analogRead(pinCapteur);
              // **** DETECTION LUMIERE *****  
            if    (digitalRead(pinCapteur) == LOW) 
                          { // Si presence lumiere
                              Ordre_Tempo = 1;        
                                                }
            if (Ordre_Tempo ==1){
                 if ((Temps_Actuel - Temps_Precedent) < Tempo_Repos) {
                          digitalWrite(pinRelay, HIGH);   // Allume relai
                          Serial.println("** Electro Aimant");
                 }

                          else {digitalWrite(pinRelay, LOW);
                          }
      }

 }


C’est la bonne section et merci d’avoir utilisé les balises de code

Il manque cependant un schéma clair de votre montage avec les composants utilisés, le type d’arduino et la question exacte que vous posez.

Sinon c’est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

bonjour,
je viens de modifier le post car depuis tout a l'heure je travaille dessus et j'ai tout repris depuis
le debut.

je vais travailler par etapes car je me melange.
vous demandez un schema..... mais je travaille sans schema, il m'y a rien sur le circuit !

un relai
un capteur lumiere
un arduino

il sont correctement cablés car les sorties reagissent

Quel relai ?
Quel capteur ?
Quel Arduino ?
Quels branchements ?
Quelle question précise / quel comportement erroné ?


Ne modifiez plus le premier post rajoutez les infos dans une réponse


Sinon regardez où vous mettez à jour Temps_Precedent

Bonjour ericdu62

Tu as quelques "oublis" dans ton programme :wink:
Je te mets la version corrigée,à toi de jouer au jeux des x erreurs et de poser les bonnes questions, si nécessaire.

int pinCapteur = A0; // le capteur Lumiere
int pinRelay = A5; // le relais ELECTRO AIMANT
int photocellReading = analogRead(pinCapteur);

int Ordre_Tempo = 0;
unsigned long Tempo_Repos = 5000; // tempo repos de 8s
unsigned long Temps_Actuel;
unsigned long Temps_Precedent = 0;

void setup() 
{
	Serial.begin(115200);     //initialisation moniteur série à 115200baud
	pinMode(pinCapteur, INPUT); // on veut lire le capteur
	pinMode(pinRelay, OUTPUT);
	digitalWrite(pinRelay, HIGH);  // éteint le relai ELECTRO AIMANT
	Serial.println("--- Initialisation");
}


void loop()  
{
	Temps_Actuel = millis();
	//photocellReading = analogRead(pinCapteur);
	// **** DETECTION LUMIERE *****
	if    (digitalRead(pinCapteur) == LOW && Ordre_Tempo == 0)
	{ // Si presence lumiere
		Serial.println("** Ordre Tempo");
		Ordre_Tempo = 1;
		Temps_Precedent = millis();     // Démarrage du chrono
	}
	if (Ordre_Tempo ==1)
	{
		if (Temps_Actuel - Temps_Precedent >= Tempo_Repos) 
		{
			digitalWrite(pinRelay, HIGH);   // Allume relai
			Serial.println("** Electro Aimant");
			Ordre_Tempo = 0;
		}
		else {digitalWrite(pinRelay, LOW);
		}
	}
}

On pourrai apporter des simplifications à ton programme, mais, si ainsi il fonctionne à satisfaction...

A+
Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.