Comment utiliser les pins digitals et les pins analogiques afin de controler les LEDS

Bonjour à tous, J'aimerais utiliser la fonction millis() pour gérer les LED

String mensaj;
String data;
int post;
String tv;
long mins;
long delai=0;
long delai3=0;
long delai4=0;
long delai5=0;
long delai6=0;
long delai7=0;
long delai8=0;
long delai9=0;
long delai10=0;
long delai11=0;
long delai12=0;
long delaiA0=0;
long delaiA1=0;
long delaiA2=0;
long delaiA3=0;
long delaiA4=0;
long delaiA5=0;
long delaiA6=0;
long delaiA7=0;

String minutes;

void setup() {

Serial.begin(9600);

pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
pinMode(A6,OUTPUT);
pinMode(A7,OUTPUT);

digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(A2,HIGH);
}

void loop() {

if (Serial.available()>0){

String mensaj=Serial.readString();

data=mensaj;
tv = data.substring(0,2);
post=tv. toInt();
minutes=data.substring(2,4);
mins = minutes. toInt();
}

if(post==2){

delai+=mins*60000;

digitalWrite(2,LOW);
delay(delai);
digitalWrite(2,HIGH);

Serial.end();

}
if(post==3){

 delai3+=mins*60000;

digitalWrite(3,LOW);
delay(delai3);
digitalWrite(3,HIGH);

Serial.end();

}
if(post==4){

delai4+=mins*60000;

digitalWrite(4,HIGH);
delay(delai4);
digitalWrite(4,LOW);

Serial.end();

}
if(post==5){

delai5+=mins*60000;

digitalWrite(5,HIGH);
delay(delai5);
digitalWrite(5,LOW);

Serial.end();

}
if(post==6){

delai6+=mins*60000;

digitalWrite(6,HIGH);
delay(delai6);
digitalWrite(6,LOW);

Serial.end();

}
if(post==7){

delai7+=mins*60000;

digitalWrite(7,HIGH);
delay(delai7);
digitalWrite(7,LOW);

Serial.end();

}
if(post==8){

delai8+=mins*60000;

digitalWrite(8,HIGH);
delay(delai8);
digitalWrite(8,LOW);

Serial.end();

}
if(post==9){

delai9+=mins*60000;

digitalWrite(9,HIGH);
delay(delai9);
digitalWrite(9,LOW);

Serial.end();

}
if(post==10){

delai10+=mins*60000;

digitalWrite(10,HIGH);
delay(delai10);
digitalWrite(10,LOW);

Serial.end();

}
if(post==11){

delai11+=mins*60000;

digitalWrite(11,HIGH);
delay(delai11);
digitalWrite(11,LOW);

Serial.end();

}
if(post==12){

delai12+=mins*60000;

digitalWrite(12,HIGH);
delay(delai12);
digitalWrite(12,LOW);

Serial.end();

}
if(post==13){

delaiA0+=mins*60000;

digitalWrite(A0,HIGH);
delay(delaiA0);
digitalWrite(A0,LOW);

Serial.end();

}
if(post==14){

delaiA1+=mins*60000;

digitalWrite(A1,HIGH);
delay(delaiA1);
digitalWrite(A1,LOW);

Serial.end();

}
if(post==15){

delaiA2+=mins*60000;

digitalWrite(A2,LOW);
delay(delaiA2);
digitalWrite(A2,HIGH);

Serial.end();

}
if(post==16){

delaiA3+=mins*60000;

digitalWrite(A3,HIGH);
delay(delaiA3);
digitalWrite(A3,LOW);

Serial.end();

}

if(post==17){

delaiA4+=mins*60000;

digitalWrite(A4,HIGH);
delay(delaiA4);
digitalWrite(A4,LOW);

Serial.end();

}
if(post==18){

delaiA5+=mins*60000;

digitalWrite(A5,HIGH);
delay(delaiA5);
digitalWrite(A5,LOW);

Serial.end();

}
if(post==19){

delaiA6+=mins*60000;

digitalWrite(A6,HIGH);
delay(delaiA6);
digitalWrite(A6,LOW);

Serial.end();

}
if(post==20){

delaiA7+=mins*60000;

digitalWrite(A7,HIGH);
delay(delaiA7);
digitalWrite(A7,LOW);

Serial.end();

}
}

:warning: La rédaction de votre message ne répond pas aux critères attendus (balises de code)

lisez les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

Merci d'éditer votre post en utilisant le :pencil2: dans la barre d'outil juste sous votre post et rajoutez les balises de de code (c'est difficilement lisible tel quel) :

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l'icône <code/> dans la barre d'outils pour indiquer que c'est du code

(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

--

pour des exemples avec millis (si vous lisez l'anglais)

et si vous voulez regarder la programmation par machine à états ➜ cf mon tuto éventuellement

Merci beaucoup en fait, Par le passé, j'ai eu à utiliser uniquement les pins digitales et maintenant j'ai ajouter aussi les pins analogiques afin d'avoir plus de pins
/*
Name: ARDFR_pathy2023_DonneesSeriePh4.ino
Created: 26.07.2023
Author: jpbbricole / pathy2023

Phase 4
Toutes les LED indépendantes.
Pour arrêter une temporisation mettre 0 dans le temps, pour arrêter la LED 4: commande 40

*/

String mensaj;
String data;
int led;
unsigned long mins;

const int ledPin[] = {1, 2, 3, 4, 5, 6, 7, 8};
const int ledNombre = sizeof(ledPin) / sizeof(ledPin[0]); // CVompte le nombre de LED
const int ledEtatOn = HIGH; // Etat pour allumer la LED

unsigned long ledOnTempo[ledNombre]; // Temps d'allumage des LED
unsigned long ledOnMillis[ledNombre]; // Temps d'allumage des LED chronométrage

long delaisMinute = 1000; // 60000 // Delais pour une minute, a diminuer pour accélérer l'attente pendant le développement

void setup()
{
Serial.begin(115200);

for (int l = 0; l < ledNombre; l ++)
{
	pinMode(ledPin[l], OUTPUT);
	digitalWrite(ledPin[l],!ledEtatOn);     // Eteindre la LED
	ledOnMillis[l] = 0;
}

}

void loop()
{
if (Serial.available())
{
String mensaj=Serial.readStringUntil('\n'); // Serial.readStringUntil() - Référence Arduino
mensaj.trim(); // Pour nettoyer mensaj https://docs.arduino.cc/built-in-examples/strings/StringLengthTrim?
data=mensaj;

	led=data.substring(0,1).toInt();
	mins=data.substring(1,3).toInt();
	ledAllumerMinutes(led, mins);
}

//--------------------------------- Allumage temporaire des LED
for (int l = 0; l < ledNombre; l ++)
{
	if (ledOnMillis[l] != 0 && (millis() - ledOnMillis[l] >= ledOnTempo[l]))     // Si LED en cours et son temps échu
	{
		ledOnMillis[l] = 0;
		digitalWrite(ledPin[l],!ledEtatOn);     // Eteindre la LED, -1 parce que indice de tableau démarre à 0
	
		Serial.println("LED = " + String(l+1) + " FIN");
	}
	else
	{
		if (ledOnMillis[l] != 0)     // Si temporisation en cours pour cette led
		{
			digitalWrite(ledPin[l],ledEtatOn);     // Allumer la LED
		}
	}
}

}

void ledAllumerMinutes(int ledNum, unsigned long minutes)
{
Serial.print("LED = " + String(ledNum));
Serial.println("\t Minutes = " + String(minutes));

ledOnTempo[ledNum -1] = minutes*delaisMinute;
ledOnMillis[ledNum -1] = millis();     // Démarrage du chrono de la LED ledNum

}

bon clairement vous vous fichez des balises de code et des règles du forum.

bon courage, ne comptez pas sur moi. Je clos ce fil si vous ne faites pas le nécessaire.

Je suis désolé mais je n'arrive pas à m'en sortir avec les balises de codes

un instant, je vais reprendre

/*
	Name:       ARDFR_pathy2023_DonneesSeriePh4.ino
	Created:	26.07.2023
	Author:     jpbbricole / pathy2023

	Phase 4
	Toutes les LED indépendantes.
	Pour arrêter une temporisation mettre 0 dans le temps, pour arrêter la LED 4: commande 40
*/

String mensaj;
String data;
int led;
unsigned long mins;

const int ledPin[] = {2, 3, 4, 5, 6, 7, 8,9,10,11,12,A0,A1,A2,A3,A4,A5,A6,A7};
const int ledNombre = sizeof(ledPin) / sizeof(ledPin[0]);     // CVompte le nombre de LED
const int ledEtatOn = HIGH;     // Etat pour allumer la LED
const int ledEtatOnn = LOW;     // Etat pour allumer la LED

unsigned long ledOnTempo[ledNombre];     // Temps d'allumage des LED
unsigned long ledOnMillis[ledNombre];     // Temps d'allumage des LED chronométrage

long delaisMinute = 60000;  // 60000     // Delais pour une minute, a diminuer pour accélérer l'attente pendant le développement

void setup()
{
	Serial.begin(9600);
	
	for (int l = 0; l < ledNombre; l ++)
	{
		pinMode(ledPin[l], OUTPUT);
		digitalWrite(ledPin[l],ledEtatOn);     // Eteindre la LED
		ledOnMillis[l] = 0;
	}
}

void loop()
{
	if (Serial.available())
	{
		String mensaj=Serial.readStringUntil('\n');     // https://reference.arduino.cc/reference/fr/language/functions/communication/serial/readstringuntil
		mensaj.trim();     // Pour nettoyer mensaj  https://docs.arduino.cc/built-in-examples/strings/StringLengthTrim?
		data=mensaj;

		led=data.substring(0,1).toInt();
		mins=data.substring(1,3).toInt();
		ledAllumerMinutes(led, mins);
	}

	//--------------------------------- Allumage temporaire des LED
	for (int l = 0; l < ledNombre; l ++)
	{
		if (ledOnMillis[l] != 0 && (millis() - ledOnMillis[l] >= ledOnTempo[l]))     // Si LED en cours et son temps échu
		{
			ledOnMillis[l] = 0;
			digitalWrite(ledPin[l],ledEtatOn);     // Eteindre la LED, -1 parce que indice de tableau démarre à 0
		
			Serial.println("LED = " + String(l+1) + " FIN");
		}
		else
		{
			if (ledOnMillis[l] != 0)     // Si temporisation en cours pour cette led
			{
				digitalWrite(ledPin[l],ledEtatOnn);     // Allumer la LED
			}
		}
	}
}

void ledAllumerMinutes(int ledNum, unsigned long minutes)
{
	Serial.print("LED = " + String(ledNum));
	Serial.println("\t Minutes = " + String(minutes));
	
	ledOnTempo[ledNum -1] = minutes*delaisMinute;
	ledOnMillis[ledNum -1] = millis();     // Démarrage du chrono de la LED ledNum
}

J'ai ajouté les pins analogique mais ca ne fonctionne plus, vous pouvez m'aider svp., merci

les posts 1 et 3 défigurent toujours le forum...

(note pour @jpbbricole vu que c'est son code)

Bien noté, merci

Merci d'intervenir @jpbbricole

merci donc de les éditer...

merci donc de les éditer @jpbbricole , j'aimerais vous m'aidiez à ajouter les pins anagogiques dans le code pour avoir plus de pins, merci beaucoup

???

jpbricole ne peut pas éditer vos posts. Merci de le faire. dernière demande.

et on ne relance pas 100 fois un participant. je l'ai notifié une fois, pas la peine d'en rajouter. Il viendra quand il peut, s'il le peut et le veut.

Bien noté

Post clos.