Delay quel problème

Les nouveaux dans cet univers arduino ont un nombre limité de publications quotidiennes, c'est sûr.
N'y a-t-il pas aussi des limitations sur la longueur du code ?
Je ne sais pas.
Est-ce que quelqu'un sait?
La vérité est qu'une partie de ce code est bien publiée, peut-être qu'il avait ces limitations, je l'ai supposé et c'est pourquoi j'ai répondu.
Salutations.

OK pour la première phrase, par contre pour la seconde je pense que la poubelle est pour les messages que leurs auteurs refusent obstinément de mettre en conformité avec les règles élémentaires.

1 Like

Si on ne met pas les règles à la poubelle, autant les faire respecter.

Bonjour gonpezzi

C'est ce que je m'étais dit, un partie du code est bien entre balises, donc @dabo28 a fait l'effort, donc méritait une réponse. Ce n'est pas évident, surtout pour un premier post.

Une belle journée à toi.
Cordialement
jpbbricole

On peut remarquer que le code est mis entre balises après deux instructions if().
Pour ma part je suppose que le logiciel du forum a de lui-même placé ces balises. C'est pratiquement évident, mais pas pour tout le monde apparemment.

Bonjour dabo28

Suite à la "simplification" de ton programme, il est ressorti un problème, la condition
if (digitalRead(2) == HIGH)
n'est pas assortie d'une condition, est-ce-que le verre n'est pas déjà vide, auquel cas cette opération est inutile. Ainsi, sans cette condition, à chaque loop() on vide le verre donc on attend
12 x delay(3000);
pendant ce temps, une action sur le levier ne peut être détectée. C'est pour ça que je t'ai ajouté une variable
boolean verreVide = true;
Si tu mets la console à 115200 tu verras le déroulement du programme.
Si ces indications ne te sont pas nécessaires, tu peux virer tout les Serial.print...
Je n'ai pas essayé avec des LED, uniquement avec les indications dans le moniteur.

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel pixels10 = Adafruit_NeoPixel(28, 10, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixels4 = Adafruit_NeoPixel(106, 4, NEO_GRB + NEO_KHZ800);

long couleurBiere = 0;
long couleurVide = 0;
boolean verreVide = true;

void setup() {
	Serial.begin(115200);
	pinMode(10, OUTPUT);
	pixels10.begin();
	pinMode(4, OUTPUT);
	pixels4.begin();

	couleurBiere = pixels4.Color(255, 255, 0);
	couleurVide = pixels4.Color(0, 0, 0);
	
	pinMode(2, INPUT_PULLUP);
	pixels10.begin(); // Initialize NeoPixel strip object (REQUIRED)
	pixels10.show(); // Initialize all pixels to 'off'
	pixels4.begin(); // Initialize NeoPixel strip object (REQUIRED)
	pixels4.show(); // Initialize all pixels to 'off'
}

void loop() {
	if (digitalRead(2) == LOW  && verreVide == true) {
		// Ecoulement remplissage
		Serial.println(F("\nEcoulement remplissage"));
		pixel10setFromTo(0, 27, couleurBiere, 10);
		
		// Remplissage
		Serial.println(F("\nVerre remplissage"));
		pixel4setFromTo(0, 9, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(10, 19, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(20, 29, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(30, 39, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(40, 49, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(50, 59, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(60, 69, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(70, 79, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(80, 89, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(90, 99, couleurBiere, 0);
		delay(1000);
		pixel4setFromTo(100, 105, couleurBiere, 0);
		delay(1000);
		
		// Ecoulement vider
		Serial.println(F("\nEcoulement vider"));
		pixel10setFromTo(0, 27, couleurVide, 30);

		Serial.println(F("\nVerre plein"));
		verreVide = false;
	}
	// Si poignée relachée et verre plein
	if (digitalRead(2) == HIGH && verreVide == false) {

		Serial.println(F("\nVider le verre"));

		delay(3000);
		pixel4setToFrom(105, 100, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(99, 90, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(89, 80, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(79, 70, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(69, 60, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(59, 50, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(49, 40, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(39, 30, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(29, 20, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(19, 10, couleurVide, 0);
		delay(3000);
		pixel4setToFrom(9, 0, couleurVide, 0);
		delay(3000);
		
		Serial.println(F("\nVerre vide"));
		verreVide = true;
	}
}

void pixel10setFromTo(int ledFrom, int ledTo, long ledColor, int tempo)
{
	Serial.print("*");
	for (int l = ledFrom; l <= ledTo; l++)
	{
		//Serial.println("Pixel10+ " + String(l) + "\t\t" + String(ledColor));
		pixels10.setPixelColor(l, ledColor);
		pixels10.show();
		delay(tempo);
	}
}

void pixel4setFromTo(int ledFrom, int ledTo, long ledColor, int tempo)
{
	Serial.print("*");
	for (int l = ledFrom; l <= ledTo; l++)
	{
		//Serial.println("Pixel4+ " + String(l) + "\t\t" + String(ledColor));
		pixels4.setPixelColor(l, ledColor);
		pixels4.show();
		delay(tempo);
	}
}

void pixel4setToFrom(int ledTo, int ledFrom, long ledColor, int tempo)
{
	Serial.print("*");
	for (int l = ledTo; l >= ledFrom; l--)
	{
		//Serial.println("Pixel4- " + String(l) + "\t\t" + String(ledColor));
		pixels4.setPixelColor(l, ledColor);
		pixels4.show();
		delay(tempo);
	}
}

Bonne lecture et à ta disposition pour de plus amples renseignaments.

Cordialement
jpbbricole

Je ne suis pas modo donc je n’interdis rien. Cependant ce genre de post Ça met le bazar dans la lecture du forum. Par le passé notre modo mettait à la poubelle les posts ou l’OP ne faisait pas d’efforts.

Quant au mûrement réfléchi, vu que ça ne répond pas à la question de l’OP sur la gestion des délais, je ne suis pas sûr qu’elle soit pertinente.

Enfin les conseils comme effectuer des print à rallonge

//Serial.println("Pixel10+ " + String(l) + "\t\t" + String(ledColor));

En concaténation de String c’est une des plus mauvaise habitude que vous pouvez donner à un néophyte. 4 prints séparés seraient beaucoup plus appropriés.

Je propose de clore ici toute contribution tant que l’OP n’est pas revenu faire le ménage.

(Je passe le fil en slow mode)

Bonjour J-M-L,

Oui, pleinement, si tu lis le programme posté et la remarque de dabo28

tu verrai que l'usage de 12x delay(3000) quasiment en permanence du fait que la condition était
if (digitalRead(2) == HIGH)
donc condition permanente tant que le levier était relâché. Pour que la condition if (digitalRead(2) == LOW) soit vraie, il fallait attendre jusqu'à 12x3 secondes. Donc je pense que c'est mûrement réfléchi.
Quand au reste des modifications, c'eut été un peu gros de ne pas faire remarquer qu'un programme ainsi libellé avec des dizaines de lignes presque identiques était ingérable. D'où la présence de fonctions.

Ah! un petit "incident" comme ça peut mettre le bazard dans la lecture du forum, que penser de ce genre de diatribe

qui est carrément une attaque personnelle voire d'insulte, que devrait en faire un modérateur?

Pour le reste, attendons l'avis de @dabo28 Cordialement
jpbbricole

Oui parce que c'est le signal que l'on peut poster n'importe comment sans mettre en forme son code et que l'on trouvera toujours une personne en mal de reconnaissance qui résoudra le problème.

Et en plus, la bonne solution serait d'expliquer à la personne ce qui ne va pas dans la structure même du programme et de lui expliquer comment il pourrait le corriger pour le rendre plus lisible et plus facile à maintenir. Mais certainement pas de lui livrer un code tout fait. Mais ça, c'est un sujet que l'on a déjà évoqué avec toi mais auquel tu est totalement hermétique.

je n'ai pas vu de commentaires dans votre réponse sur les délais, d'où mon commentaire.

je ne parlais pas de votre réponse, mais du post original. +1 avec @fdufnews sur son explication.

Oui, et il est aux abonnés absents. Ce post sera remisé dans le bar d'ici quelques jours sans intervention de l'OP.

Bonjour

Je parlais du même post et comme petit "incident" le programme, en partie hors des balises.
Si ça peut mettre le bazard, que dire de ça?

C'est expliqué ici et

Je ne suis pas hermétique, j'ai simplement une autre façon faire, par l'exemple. Quand à définir la meilleure façon, comme on est pas dans un pays à pensée unique...
.
Cordialement
jpbbricole

Vous semblez prendre tout commentaire comme une attaque personnelle...

Unknown

Ah! c'était un "commentaire" , décidément je ne comprendrai jamais rien.

Cordialement
jpbbricole

Chers messieurs, arrêtons de parler de règles et respectons-les. comme je le pense et si on s'en tient aux "Meilleures pratiques du forum francophone" du post #5, (et y compris celui-ci), toute cette discussion devrait être dans la section "Le Bar", pas ici.
Salutations.

Oulala,

C'était effectivement mon premier post et je ne savais pas trop comment poster le code et je n'étais pas au courant de règles, veuillez m'en excuser, je vais lire ces règles et faire au mieux pour corriger mon post. Je ne pensait pas que ça allait poser des problèmes pareils... Merci déjà à ceux qui m'ont répondu. j'ai pas mal de travail ces temps je vais tester vos modifications ce week-end.

Encore désolé d'avoir créer un débat pareil...

Salutations
Damien

hello

Super ton code :slight_smile:

penses-tu qu'il est possible de faire l'action plus réel? du genre si j'arrête de remplir mon verre à la moitié ou au tiers par ex. que le système ce stop? comme dans la réalité en fait

Bonsoir dabo28

Pour moi, super aussi :slight_smile:
Les LED s'allument?, chez moi, oui.

Oui, bien sûre le problème est
Stopper le remplissage = relâcher la poignée de la tireuse = digitalRead(2) == HIGH && verreVide == false, donc on vide le ver?
Ou on met une commande supplémentaire pour vider le ver?

Pour les bulles, il faut étudier :rofl:
La mousse aussi :rofl:

A+
Cordialement
jpbbricole

alors pour pas te mentir jenvissageait de mettre un 2eme poussoir pour faire deux rangées de led blanches pour la mousse mais mon problème principal est de fixer le 2eme poussoir :rofl:

Bonsoir dabo20

Au bout de la poignée de la tireuse?
Pour la mousse de LED, tel que le programme est structuré, 2 ou 3 lignes supplémentaires suffisent. Il faudra juste une variable pour se souvenir à quel hauteur on s'est arrêté.
Je regarde ça, demain.

Bonne soirée
Cordialement
jpbbricole