Couleur RGB aleatoire au debut de la boucle

Bonjour, je fais clignoté une led RGB sur un rythme predefini, qui est un message en morse.
J'aimerais avoir une couleur differente a chaque debut de boucle.
Mais ce que j'arrive a avoir jusqu'a maintenant c'est une couleur aleatoire differente a chaque clignotement, donc une couleur differente a chaque lettre.
est il possible de fixer les valeurs aleatoire tiré en debut de boucle et de les assigné a chaque clignotement de la boucle ?

Bonjour elmirouf

As-tu un lien sur cette LED RGB?

Tu veux dire à chaque début de message?

Oui. mais tu risques d'avoir plusieurs clignotements avec la même couleur.

Si tu as déjà un début de programme, mets le en ligne.

Cordialement
jpbbricole

Bonjour jpb,

c'est a dire un lien ?

oui en debut de chaque message donc chaque boucle

C'est l'objectif, avoir une couleur differente a chaque fois que le message recommence.

le code est giganteque, 300 ligne, je peux le poster ici ?

par contre j'ai ça :
Tinkercad | From mind to design in minutes

Oui, tu peux le poster ici. N'oublie pas d'utiliser les balises de code !

les balises de code ?

Bonjour,

Tout est expliqué ici

Bonsoir elmirouf

Tu répètes

	randomRouge = random(255);
	randomVert = random(255);
	randomBleu = random (255);

avant chaque lettre, c'est normal que ça change pour chacune d'entre elles.
Il ne faut laisser ça qu'au début de loop():

void loop() 
{
	randomRouge = random(255);
	randomVert = random(255);
	randomBleu = random (255);

et supprimer toutes les autre occurrences, ainsi tu aura la même séquence RGB tout au long du message.

Il y a, encore, beaucoup de simplifications à faire, je te montrerai ça.

A+
Cordialement
jpbbricole

Bonsoir elmirouf

Pour faire suite à mon message du post #7,ton programme est fait de multiples répétitions ce qui rend le programme très "long" (307 lignes) et, surtout, difficile à gérer, un simple exemple, changer le temps d'un point ou ce lui du trait (un trait = 3 points)

Tu répètes:

	// pause
	digitalWrite( ledRouge, LOW );
	digitalWrite( ledVert, LOW );
	digitalWrite( ledBleu, LOW );
	delay(300);

et

	analogWrite ( ledRouge, randomRouge );
	analogWrite ( ledVert, randomVert );
	analogWrite ( ledBleu, randomBleu );
	delay(nnn);

à chaque point ou trait.

Quand on répète des choses identiques à un ou 2 paramètres prêt, on crée une fonction que l'on appelle à chaque besoin, quitte à lui transmettre un paramètre comme 300 ou 900 pour le temps.

Je te mets ton programme ainsi "réorganisé" tu pourras voire l'usage des fonctions et aussi des variables comme celles du temps des points et des traits.

Le programme:

const int ledRouge = 9;
const int ledVert = 10;
const int ledBleu = 11;

int randomRouge;
int randomVert;
int randomBleu;

const unsigned long millisPoint = 300;
const unsigned long millisTrait = millisPoint * 3;

void setup() 
{
	pinMode( ledRouge, OUTPUT );
	pinMode( ledVert, OUTPUT );
	pinMode( ledBleu, OUTPUT );

	// Tout éteindre
	pointTraitEteindre(10);
}

void loop() 
{
	randomRouge = random(255);
	randomVert = random(255);
	randomBleu = random (255);

	// T -	
	morseTrait();
	morsePauseInterLettres();	

	// A .-
	morsePoint();
	morseTrait();
	morsePauseInterLettres();
	
	// K -.-
	morseTrait();
	morsePoint();
	morseTrait();
	morsePauseInterLettres();
	
	// E .
	morsePoint();
	morsePauseInterLettres();
	
	// C -.-.
	morseTrait();
	morsePoint();
	morseTrait();
	morsePoint();
	morsePauseInterLettres();
	
	// A .-
	morsePoint();
	morseTrait();
	morsePauseInterLettres();
	
	// I ..
	morsePoint();
	morsePoint();
	morsePauseInterLettres();
	
	// R .-.
	morsePoint();
	morseTrait();
	morsePoint();
	morsePauseInterLettres();
	
	// E .
	morsePoint();
	morsePauseInterLettres();

	morsePauseInterMot();
}

void morsePoint()
{
	pointTraitAllumer(millisPoint);
	pointTraitEteindre(millisPoint);
}

void morseTrait()
{
	pointTraitAllumer(millisTrait);
	pointTraitEteindre(millisPoint);
}

void morsePauseInterLettres()
{
	delay(3 * millisPoint);
}

void morsePauseInterMot()
{
	delay(7 * millisPoint);
}

void pointTraitAllumer(unsigned long millisPause)
{
	analogWrite ( ledRouge, randomRouge );
	analogWrite ( ledVert, randomVert );
	analogWrite ( ledBleu, randomBleu );
	delay(millisPause);
}

void pointTraitEteindre(unsigned long millisPause)
{
	digitalWrite( ledRouge, LOW );
	digitalWrite( ledVert, LOW );
	digitalWrite( ledBleu, LOW );
	delay(millisPause);
}

On peut encore simplifier, mais c'est déjà un bon début.
Ton programme n'a "plus que" 107 lignes.

Une petite démo.

A+
Cordialement
jpbbricole

WAHOU. merci beaucoup.
ca me parait tres compliqué du premier abord.
je regarde tt ça demain matin a tete reposé

merci encore

Re-bonjour, je reviens pour ce programme.
Je n'arrive pas a l'upload dans l'arduino. je ne comprends pas.
j'ai ce message d'erreur, ca vous parle ?
avrdude: Version 6.3-20190619
CoFailed uploading: uploading error: exit status 1
Cordialement Sylvain

Bonjour elmirouf

Quel Arduino as-tu?
Je ne trouve pas de référence de CoFailed, mets le message complet.
Regardes du côté de exit status 1

Cordialement
jpbbricole

Quel OS?
Quel version de l'IDE?
Active le compte-rendu détaillé dans les préférences. Et recopie le contenu de la fenêtre dans ton message.

Bonjour, la carte est une ELEGOO UNO R3.
Le PC est sous W11 et le logiciel IDE est en 2.0.0-rc9.1
Voila le compte rendu. Le contenu a changé par rapport a hier.

Using board 'uno' from platform in folder: C:\Users\Mirouf\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5
Using core 'arduino' from platform in folder: C:\Users\Mirouf\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5
Detecting libraries used...
"C:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" "-IC:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000\\sketch\\sketch_rgb take caire.ino.cpp" -o nul
Generating function prototypes...
"C:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" "-IC:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000\\sketch\\sketch_rgb take caire.ino.cpp" -o "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"C:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\builtin\\tools\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Compilation du croquis...
"C:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" "-IC:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000\\sketch\\sketch_rgb take caire.ino.cpp" -o "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000\\sketch\\sketch_rgb take caire.ino.cpp.o"
Compiling libraries...
Compiling core...
Using precompiled core: C:\Users\Mirouf\AppData\Local\Temp\arduino-core-cache\core_arduino_avr_uno_490f73ac3cc52e4058e3e946cba0ddc9.a
Linking everything together...
"C:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/sketch_rgb take caire.ino.elf" "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000\\sketch\\sketch_rgb take caire.ino.cpp.o" "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/..\\arduino-core-cache\\core_arduino_avr_uno_490f73ac3cc52e4058e3e946cba0ddc9.a" "-LC:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000" -lm
"C:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/sketch_rgb take caire.ino.elf" "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/sketch_rgb take caire.ino.eep"
"C:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/sketch_rgb take caire.ino.elf" "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/sketch_rgb take caire.ino.hex"

"C:\\Users\\Mirouf\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "C:\\Users\\Mirouf\\AppData\\Local\\Temp\\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/sketch_rgb take caire.ino.elf"
Le croquis utilise 2086 octets (6%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 19 octets (0%) de mémoire dynamique, ce qui laisse 2029 octets pour les variables locales. Le maximum est de 2048 octets.
"C:\Users\Mirouf\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude" "-CC:\Users\Mirouf\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf" -v  -patmega328p -carduino "-PCOM3" -b115200 -D "-Uflash:w:C:\Users\Mirouf\AppData\Local\Temp\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/sketch_rgb take caire.ino.hex:i"

avrdude: Version 6.3-20190619
         Failed uploading: uploading error: exit status 1Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Users\Mirouf\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"

         Using Port                    : COM3
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: ser_open(): can't open device "\\.\COM3": Acc�s refus�.



avrdude done.  Thank you.


Bonjour elmirouf

N'aurais tu pas une autre session de l'IDE Arduino qui est, aussi, connecté sur ce port?
Ou un autre utilisateur actif de ce port?
Autrement, vérifies dans le gestionnaire de périphériques (Paramètres, rechercher gestionnaire de périphériques), si ton COM3 est OK.

Cordialement
jpbbricole

Au-delà du fait que le port COM n'est peut-être pas le bon, je vois aussi un nom de projet avec des espaces (sketch_rgb take caire.ino). Je suggère de remplacer les espaces par des _ ce qui pourrait éviter des problèmes.
Tel qu'elle est construite, je ne suis pas certain que cette commande soit bien interprétée. Et je pense que avrdude doit voir un nom de fichier tronqué

"C:\Users\Mirouf\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude" "-CC:\Users\Mirouf\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf" -v -patmega328p -carduino "-PCOM3" -b115200 -D "-Uflash:w:C:\Users\Mirouf\AppData\Local\Temp\arduino-sketch-43A0259800D8490F6FECA7DF71EFE000/sketch_rgb take caire.ino.hex:i"

Bonjour, de retour de vacances je test la solution du nom fichier contenant des espaces.

Et en remplaçant les espaces par des _ fonctionne, merci pour tout.

j'ai fait un essai reel, et j'ai un probleme.

Le bandeau de LED reste toujours allumé et clignote un peu plus fort au rythme imposé par l'arduino

J'ai essayé en installant des resistances, le resultat est a peu pres le meme, le clignotement est juste moins fort.

auriez vous une idée ?

Au début, il était question d'une LED.
Là, on parle d'un bandeau. Il est raccordé comment à l'Arduino?

Effectivement c'est un bandeau. Désolé.

Il y a trois mofset irf530n pbf commandé par les pin 9.10.11 de l'arduino