Bonjour,
je cherche un tuto pour faire changer les couleurs d'une led RVB avec un ptotentiometre,
plus précisement un changement progressif puis dans l'ordre de couleur de l'arc en ciel : violet=>bleu=>vert=>jaune=>organe=>rouge ça fait deux jours que je cherche mais j'ai toujours pas trouvé
kuzo64:
Bonjour,
je cherche un tuto pour faire changer les couleurs d'une led RVB avec un ptotentiometre,
plus précisement un changement progressif puis dans l'ordre de couleur de l'arc en ciel : violet=>bleu=>vert=>jaune=>organe=>rouge ça fait deux jours que je cherche mais j'ai toujours pas trouvé
bonjour
faire de la vraie roue chromatique avec un seul parametre (1 potentiometre) ce n'est pas possible , déjà avec 2 c'est pas gagné
lire
http://forum.arduino.cc/index.php?topic=211116.0
apres tu peux toujours affecter un etat RGB à une valeur de ton potentiometre , mais tu ne pourra pas obtenir + de 1023 "couleurs"
En pièce jointe, un sketch qui utilise 3 potentiomètres:
- un pour la couleur (huevalue dans le programme)
- un pour la saturation (satvalue)
- un pour la luminosité (lumvalue)
Si tu ne disposes que d'un potentiomètre tu peux figer saturation et luminosité dans le programme mais tu n'auras effectivement pas toutes les couleurs possibles. Tu peux commenter les 2 lignes qui lisent les potentiomètres pour satvalue et lumvalue et ensuite mettre satvalue et lumvalue en constantes à 1.0.
Led_HSV.ino (3.76 KB)
Merci pour vos réponses
1023 couleurs serait même trop, 255 me suffirait... comment dois-je m'y prendre pour assigner les couleurs aux valeurs du potard?? formule mathématique?? tableau de correspondance ??
Merci fdufnews pour ton sketch, je vais aller voir ça dessuite
je pensai faire un truc en divisant le spectre de couleur en 5 du genre:
valeur du potard variant de 0 à 255
-si la valeur du potard est comprise ente 0 et 64 (passage du violet au bleu)
le bleu reste a 255
le vert a 0
le rouge commence a 255 et fini à 0
-si la valeur du potard est comprise entre 64 et 128 (passage du bleu au vert)
le bleu commence a 255 et fini a 0
le vert commence a 0 et fini a 255
le rouge reste a 0
-si la valeur du potard est comprise entre 128 et 192 (passage du vert au jaune)
le bleu reste a 0
le vert reste a 255
le rouge passe de 0 a 255
-si la la valeur du potard est comprise entre 192 et 255 (passage du jaune au rouge)
le bleu reste a 0
le vert passe de 255 a 0
le rouge reste a 0
je ne connais pas encore bien le codage pour l'arduino c'est pour cela que je prefere présenter ceci sous cette écriture, je dois avoir sans doute faux, sans doute qu'il va y avoir un probleme d'entensité lumineuse, le vert(deux chips) trop fort par rapport au rouge un chip) ou pareil je me susi carrement planté sur le mélange de couleur loool...
Tu peux utiliser la fonction map:
Merci Jhon je vais aller y jeter un coup d'oeil
entre temps j'ai trouvé une équation pour le violet=>bleu:
Pot: valeur du potard comprise entre 0 et 1024 (entré A0)
Rouge: valeur du rouge (sortie 13)
Vert: valeur du vert (sortie 12)
Bleu: valeur du bleu (sortie11)
si 0<Pot<256
Bleu = 255
Vert = 0
Rouge = (-P) +256)
allez je m'essais a transmetre ça en programe arduino: (ne me hurlez pas deçus c'est mon premier programe^^
//petit bout de programme pour faire passer une led rvb du violet au bleu selon une valeur du potard comprise entre 0 et 255
// 255 etant la valeur au quart du potard je ferai le reste du programme demain loool
// faudrait-il que celui la marche loool
const int Potpin = 0; // analog 0 connecté au potar, pourquoi on met 0 et as A0?? sur la carte je vois les 2 connections
const int Bleupin = 13; // sortie 13 connecté a la broche bleu de la led
const int Vertpin = 12; // sortie 12 connecté a la broche verte de la led
const int Rougepin = 11; // sortie 11 connecté a la broche rouge de la led
//déclaration des variables
float Pot = 0; //pot est la variable ou l'on stocke la valeur du potar
float Bleu = 0; //Bleu est la variable ou l'on stocke la valeur du bleu
float Vert = 0; //Vert est la variable ou l'on stocke la valeur du vert
float Rouge = 0; //Rouge est la variable ou l'on stocke la valeur du Rouge
void setup() {
pinMode(Potpin, INPUT); //met la broche relié au potard en entrée
pinMode(Bleupin, OUTPUT); //met la broche relié au bleu de la led en sortie
pinMode(Vertpin, OUTPUT); //met la broche relié au vert de la led en sortie
pinMode(Rougepin, OUTPUT); //met la broche relié au vert de la led en sortie
}
void loop(){
Pot = analogRead(Potpin); // lecture de la valeur du potar et stockage dans Pot
if Pot >= 0 and Pot <256;
Bleu = 255; // bleu a 255
Vert = 0; // vert a 0
Rouge = -Pot+256; //Rouge variant de 0 a 256 selon la valeur de pot
analogWrite(Bleupin, Bleu); // envois la valeur Bleu sur la broche bleu de la led
analogWrite(Vertpin, Vert); // envois la valeur Vert sur la broche vert de la led
analogWrite(Rougepin, Rouge); // envois la valeur Rouge sur la broche rouge de la led
delay(100); // une petite tempo de 100ms pour calmer le tout
}
bon j'ai essayé de compiler et il veux pas me prendre le IF et le AND... la il se fait tard, demain il fera jour 8)
pour le AND il faut utiliser le &&
Voir les resources FR
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.Reference
(traduction du site arduino mais moins exhaustive)
http://lycee.cantau.free.fr/Term_STI2D_SIN/03-Micro-controleur_Arduino/Cours_TP_Arduino/
(un site perso où je met une partie de mes cours)
Pour ton programme, je pensais creer une table d'une dizaine de couleurs mais j'ai trouvé ça Informatique, logiciels libres... » Générer un dégradé en arc-en-ciel qui correspond à ce que tu cherche
Voici le code (non testé car pas de matériel sous la min)
//petit bout de programme pour faire passer une led rvb du violet au bleu selon une valeur du potard comprise entre 0 et 1024
// --------------connexion matérielles des broches(pins) ---------------
const int Potpin = 0; // analog 0 connecté au potar, pourquoi on met 0 et as A0?? sur la carte je vois les 2 connections
const int Bleupin = 13; // sortie 13 connecté a la broche bleu de la led
const int Vertpin = 12; // sortie 12 connecté a la broche verte de la led
const int Rougepin = 11; // sortie 11 connecté a la broche rouge de la led
//---------------------- variables pour debug
//debug_potar=1 -> utilisation du port série en comme entrée
//debug_potar=0 -> utilisation du potar
int debug_potar=0;
//-----
//debug_calcul=0 -> rien
//debug_calcul=0 -> utilisation du port serie pour visualistion des calculs
int debug_calcul=1;
//-------------------------------------------------------
void setup() {
pinMode(Potpin, INPUT); //met la broche relié au potard en entrée
pinMode(Bleupin, OUTPUT); //met la broche relié au bleu de la led en sortie
pinMode(Vertpin, OUTPUT); //met la broche relié au vert de la led en sortie
pinMode(Rougepin, OUTPUT); //met la broche relié au vert de la led en sortie
Serial.begin(9600);
}
void loop(){
//-------------------- acquisition (potar ou port série si debug) ------------
int Pot;
if (debug_potar==1){
while (Serial.available() > 0) {// si donnée envoyé via le PC
Pot = Serial.parseInt();
}
}
else
{
Pot = analogRead(Potpin); // lecture de la valeur du potar et stockage dans Pot
}
//-------------------------------------------------------------------------------------
// ----------------------- calcul des valeurs r g b -------------
// source adaptée de http://blog.vermot.net/2011/11/03/generer-un-degrade-en-arc-en-ciel-en-fonction-d-une-valeur-programmatio/
int x = (1530*Pot/1024);
int r;
int g;
int b;
if(x>=0 && x<255){
r = 0;
g = 255;
b = x;
}
if(x>=255 && x<510){
r = 0;
g = 510-x;
b = 255;
}
if(x>=510 && x<765){
r = x-510;
g = 0;
b = 255;
}
if(x>=765 && x<1020){
r = 255;
g = 0;
b = 1020-x;
}
if(x>=1020 && x<=1275){
r = 255;
g = x-1020;
b = 0;
}
if(x>=1275 && x<=1530){
r = 255;
g = 0;
b = 1530-x;
}
//-------------------------------------------------------------------
//--------------------écriture des sorties -----------------------------
analogWrite(Bleupin, b); // envoi la valeur b sur la broche bleu de la led
analogWrite(Vertpin, g); // envoi la valeur g sur la broche vert de la led
analogWrite(Rougepin, b); // envoi la valeur r sur la broche rouge de la led
if (debug_calcul==1){ //debug -> affichage des valeurs sur le moniteur série
Serial.print("Pot=");
Serial.print(Pot);
Serial.print("\tR=");
Serial.print(r);
Serial.print("\tV=");
Serial.print(g);
Serial.print("\tB=");
Serial.println(b);
}
//--------------------------------------------------------------------------------------
delay(200); // une petite tempo de 100ms pour calmer le tout
}
Merci beaucoup cher amis Dadytoto
j'ai de quoi fouiner et tester
dadytoto:
http://lycee.cantau
(un site perso où je met une partie de mes cours)
Bonsoir,
Bienvenue au premier professeur qui avance à visage découvert.
Superbe site qui mérite d'être dans la liste des sites recommandés pour les débutants.
Avec un tel site je ne pense pas que tes élèves fassent partie des quémandeurs de code tout fait.
Si le traducteur gogole fait bien son boulot : "ona arratsaldean" (ou quelques km plus au Nord: adishatz)