arduino uno

Bonsoir à tous je me présente jean-luc et je suis nouveau ici et de ce fait dans le monde d Arduino. J ai besoin d une aide car je recherche des informations .

J ai trouvé un code sur internet pour changer la couleur d une rgb grâce à un bp .

J ai un système électronique qui me fourni une tension de sorti de 4,8 volt et je veux rajouter une rgb à cette sortie . Est il possible de me servir de cette tension comme entrée sur l'arduino uno pour pouvoir me servir de ce code pour le changement de couleurs? Merci d avance.

Oui

Merci bricoleau pour ta réponse si rapide, je peux sur l analogique? As tu une idée pour le raccordement , je dois ajouter un composant?

Si la sortie de ton système électronique est à deux états 0 ou 4,8 V tu peux la brancher sur une pin numérique d'un arduino, mise en mode INPUT. La fonction digitalRead() retourne les valeurs LOW ou HIGH.

Si la sortie de ton système électronique varie entre 0 et 4,8V tu peux la brancher sur une entrée analogique. Le fonction analogRead() retourne un nombre compris entre 0 et 1023 (0=> 0V, 1023 => 5V)

A partir de là, tu pourras demander à ton arduino de faire tout ce que tu veux : piloter une led rgb, diffuser la Marseillaise sur un buzzer, ....

Evidemment une tension se mesure entre deux points, donc tu devra mettre les masses de ton arduino et de ton système électronique en commun.

Salut , Si je comprends bien ma tension va se transformer comme un BP : tension=reste appuyé, pas de tension=relâché

Si c bien ce genre de fonctionnement je n'arrive pas a intégrer ce nouveau bouton dans le code existant, il m'éteint la led comme un reset , ce qui n'est pas plus mal du coup car ça m'offre une nouvelle fonction.

Pouvez-vous m 'aider? je suis trop novice mais j'aime apprendre et surtout comprendre.

voici le code :

const int RLED=9;
const int GLED=10;
const int BLED=11;
const int BUTTON=2;

const int APPUI=1;
const int PAS_APPUI=0;
const int BP=3;

boolean lastButton = LOW;
boolean currentButton = LOW;

int ledMode = 0;
int ETAT_BP;

void setup()
{
  pinMode (BLED, OUTPUT);
  pinMode (RLED, OUTPUT);
  pinMode (GLED, OUTPUT);
  pinMode (BUTTON, INPUT);
  
  pinMode(BP,INPUT);
  digitalWrite(BP,LOW);
  }
  boolean debounce(boolean last)
  {
    boolean current = digitalRead(BUTTON);
    if (last != current)
    {
      delay(5);
      current = digitalRead(BUTTON);
      }
      return current;
      }
      void setMode(int mode)
      {
        //ROUGE
        if (mode == 1)
        {
          digitalWrite(RLED,HIGH);
          digitalWrite(GLED,LOW);
          digitalWrite(BLED,LOW);
          }
          //VERT
        else if (mode == 2)
        {
          digitalWrite(RLED,LOW);
          digitalWrite(GLED,HIGH);
          digitalWrite(BLED,LOW);
          }
           //BLEU
        else if (mode == 3)
        {
          digitalWrite(RLED,LOW);
          digitalWrite(GLED,LOW);
          digitalWrite(BLED,HIGH);
          }
          //ORANGE
        else if (mode == 4)
        {
          analogWrite(RLED,250);
          analogWrite(GLED,250);
          analogWrite(BLED,0);
          }
           //MAGENTA
        else if (mode == 5)
        {
          analogWrite(RLED,250);
          analogWrite(GLED,0);
          analogWrite(BLED,250);
          }
            //CYAN
        else if (mode == 6)
        {
          analogWrite(RLED,0);
          analogWrite(GLED,250);
          analogWrite(BLED,250);
          }
          //BLANC
        else if (mode == 7)
        {
          analogWrite(RLED,250);
          analogWrite(GLED,250);
          analogWrite(BLED,250);
          }
          //OFF(mode =0)
          else
          {
          digitalWrite(RLED,LOW);
          digitalWrite(GLED,LOW);
          digitalWrite(BLED,LOW);
          }
          }
          void loop()
          {
            currentButton=debounce(lastButton);
            if (lastButton == LOW && currentButton == HIGH)
            {
              ledMode++;
              }
              lastButton = currentButton;
              if (ledMode ==8) ledMode =0;
              setMode(ledMode);
              
              
              ETAT_BP=digitalRead(BP);
              if(ETAT_BP==APPUI)
              {
              ledMode =0;
              }
              }

désolé je n'arrive pas a mettre le code normalement!!!!!

jluc83:
désolé je n’arrive pas a mettre le code normalement!!!

voir ici.

Bonjour,

Qu'est ce que tu veux faire avec ton nouveau bouton (ou ta nouvelle entrée)?

S'il te plait, commence par éditer ton dernier post, et mets ton code source entre une balise [code] et une balise [/code]

C'est la norme à respecter sur ce forum

[Edit : Super ! merci !]

D'abord, pour ne pas avancer à l'aveugle, il faut commencer vérifier le type de signal que tu vas recevoir sur l'entrée de l'arduino

Un petit programme comme celui ci-dessous devrait te renseigner

const int pin_entree = 3;

void setup() {
  Serial.begin(9600);
  pinMode(pin_entree, INPUT);
  //là il faudra peut-être ajouter un pull up ou down selon le dispositif en amont
}

void loop() {
  static int etat_precedent_entree = LOW;
  int etat_entree = digitalRead(pin_entree);

  if (etat_entree != etat_precedent_entree) {
    Serial.print(etat_entree);
    etat_precedent_entree = etat_entree;
  }
}

salut a vous,

bricoleau je ne savais pas faire, merci pour l'info

kamil, je desire que mon entrée 4,5v fonctionne comme ci c'était un bp que je laisserais appuyé qui me ferait fonctionner la led tout en gardant l'autre bouton celui pour le changement couleur ....

par la suite j aimerais faire pareil pour une deuxième zone avec une autre entrée , une autre led mais en gardant le même bouton pour changer la couleur des deux .

Oui mais il te faut mieux qualifier ton entrée = la sortie de ton dispositif électronique.

Visiblement cette sortie a deux états, mais lesquels ? Ce n'est pas forcément 0V et 5V

C'est peut-être 5V ou rien du tout. Rien du tout, ce n'est pas pareil que 0V.

Par exemple, quand je regarde ton code, je dirais qu'actuellement tu utilises un BP cablé comme ceci : ARDUINO-------BP-------5V

Quand tu appuies sur le BP, l'entrée de l'arduino est à 5V. Quand le BP est relaché, l'entrée de l'arduino n'est pas reliée au 0V : elle est "en l'air", comme s'il n'y avait rien de branché dessus.

C'est pour cela que dans ton setup() il y a une instruction supplémentaire : digitalWrite(...LOW).

D'habitude, quand on écrit sur une pin, c'est qu'elle est en sortie. A première vue cela peut donc sembler bizarre d'écrire sur une pin que l'on vient juste de déclarer comme entrée. En réalité, cette fonction active une résistance de tirage vers le bas, qui va faire retomber la tension de la pin à 0V lorsqu'il n'y a rien de branché dessus.

oui c le cas pour le moment le câblage test avec les bp c bien 5v avec une résistance de 10k au moins

je viens de vérifier mon système électronique la sortie au repos est a -0.30v et au travail 3,68v

Si j'ai bien compris - quand ton entrée est à l'état haut tu veux que la led soit allumée (dans la couleur selectionnée par le bouton) - quand ton entrée est à l'état bas tu veux que la led soit éteinte Si c'est le cas essaie ça

void loop()
{
  ETAT_BP = digitalRead(BP);

  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    ledMode++;
  }
  lastButton = currentButton;
  if (ledMode == 8) ledMode = 0;

  if (ETAT_BP==HIGH)
    setMode(ledMode);
  else
    setMode(0);
}

kamil merci, c parfait ,me reste plus qu'a me débrouiller pour que ce soit mon système a la place du bouton

par contre si je désire faire une deuxième zone en conservant le bouton de changement de couleur (le bouton pour les deux rgb)

d'après vous c des gros changement dans le code ou juste la même chose appeler différemment? je vais essayer dans la journée et je mettrais le code ici.

Voila donc le code pour les deux zones, qu'en pensez vous? par contre j'ai pas réussi a rajouter dans les modes des fonctions comme le fade et le clignotant car (delay) me bloque et je ne sais pas encore comment y remédier. Avez-vous une solution ?

const int RLED1=9;   
const int GLED1=10;
const int BLED1=11;

const int RLED2=3;
const int GLED2=5;
const int BLED2=6;

const int BUTTON=2;
const int APPUI=1;
const int PAS_APPUI=0;

const int Zone1=8;
const int Zone2=4;

boolean lastButton = LOW;
boolean currentButton = LOW;

int ledMode = 0;
int ledMode1 = 0;

int ETAT_Zone1;
int ETAT_Zone2;

void setup()
{
  pinMode (BLED1, OUTPUT);
  pinMode (RLED1, OUTPUT);
  pinMode (GLED1, OUTPUT);
  
  pinMode (BLED2, OUTPUT);
  pinMode (RLED2, OUTPUT);
  pinMode (GLED2, OUTPUT);
  
  pinMode (BUTTON, INPUT);
  
  pinMode(Zone1,INPUT);
  digitalWrite(Zone1,LOW);
  
  pinMode(Zone2,INPUT);
  digitalWrite(Zone2,LOW);
}
  
  boolean debounce(boolean last)
  {
    boolean current = digitalRead(BUTTON);
    if (last != current)
    {
      delay(5);
      current = digitalRead(BUTTON);
      }
      return current;
      }
      
      void setZone1(int mode)
      {
        //ROUGE
        if (mode == 1)
        {
          digitalWrite(RLED1,HIGH);
          digitalWrite(GLED1,LOW);
          digitalWrite(BLED1,LOW);
          }
        
          //VERT
        else if (mode == 2)
        {
          digitalWrite(RLED1,LOW);
          digitalWrite(GLED1,HIGH);
          digitalWrite(BLED1,LOW);
          }
           //BLEU
        else if (mode == 3)
        {
          digitalWrite(RLED1,LOW);
          digitalWrite(GLED1,LOW);
          digitalWrite(BLED1,HIGH);
          }
          //ORANGE
        else if (mode == 4)
        {
          analogWrite(RLED1,250);
          analogWrite(GLED1,250);
          analogWrite(BLED1,0);
          }
           //MAGENTA
        else if (mode == 5)
        {
          analogWrite(RLED1,250);
          analogWrite(GLED1,0);
          analogWrite(BLED1,250);
          }
            //CYAN
        else if (mode == 6)
        {
          analogWrite(RLED1,0);
          analogWrite(GLED1,250);
          analogWrite(BLED1,250);
          }
          //WHITE
        else if (mode == 7)
        {
          analogWrite(RLED1,250);
          analogWrite(GLED1,250);
          analogWrite(BLED1,250);
          }
          //OFF(mode =0)
          else
          {
          digitalWrite(RLED1,LOW);
          digitalWrite(GLED1,LOW);
          digitalWrite(BLED1,LOW);
          }
          }
          void setZone2(int mode)
      {
        //ROUGE
        if (mode == 1)
        {
          digitalWrite(RLED2,HIGH);
          digitalWrite(GLED2,LOW);
          digitalWrite(BLED2,LOW);
          }
             //VERT
        else if (mode == 2)
        {
          digitalWrite(RLED2,LOW);
          digitalWrite(GLED2,HIGH);
          digitalWrite(BLED2,LOW);
          }
           //BLEU
        else if (mode == 3)
        {
          digitalWrite(RLED2,LOW);
          digitalWrite(GLED2,LOW);
          digitalWrite(BLED2,HIGH);
          }
          //ORANGE
        else if (mode == 4)
        {
          analogWrite(RLED2,250);
          analogWrite(GLED2,250);
          analogWrite(BLED2,0);
          }
             //MAGENTA
        else if (mode == 5)
        {
          analogWrite(RLED2,250);
          analogWrite(GLED2,0);
          analogWrite(BLED2,250);
          }
            //CYAN
        else if (mode == 6)
        {
          analogWrite(RLED2,0);
          analogWrite(GLED2,250);
          analogWrite(BLED2,250);
          }
          //WHITE
        else if (mode == 7)
        {
          analogWrite(RLED2,250);
          analogWrite(GLED2,250);
          analogWrite(BLED2,250);
          }
          //OFF(mode =0)
          else
          {
          digitalWrite(RLED2,LOW);
          digitalWrite(GLED2,LOW);
          digitalWrite(BLED2,LOW);
          }
          }
          
         void loop()
{
  ETAT_Zone1 = digitalRead(Zone1);

  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    ledMode++;
    ledMode1++;
  }
  lastButton = currentButton;
  if (ledMode == 8) ledMode = 0;
  lastButton = currentButton;
  if (ledMode1 == 8) ledMode1 = 0;


  if (ETAT_Zone1==HIGH)
    setZone1(ledMode);
  else
    setZone1(0);

  ETAT_Zone2 = digitalRead(Zone2);

  if (ETAT_Zone2==HIGH)
    setZone2(ledMode1);
  else
    setZone2(0);
   
}

A priori ça doit fonctionner

Deux remarques cependant - indente correctement ton programme car il est difficile à suivre (dans l'ide arduino tu fais Ctrl T) - tu aurais pu faire une fonction setZone en passant le numéro de zone, ça t'aurai évité de dupliquer une grande partie du code.

Qu'est ce que tu veux faire avec le fade et le clignottant ?

Pour le code, adopter un réflexe pavlovien :

Dès que tu commences à faire du copier/coller de lignes de code, c'est que celui-ci devrait être factorisé. à répéter dix fois chaque soir avant de s'endormir ;D

Par exemple, voici quelques bouts pour te montrer :

const byte RLEDs[2] = {RLED1, RLED2};
const byte GLEDs[2] = {GLED1, GLED2};
const byte BLEDs[2] = {BLED1, BLED2};

const byte led1 = 0;
const byte led2 = 1;

void digitalWrite3(byte led, byte rouge, byte vert, byte bleu)
{
  digitalWrite(RLEDs[led], rouge);
  digitalWrite(GLEDs[led], vert);
  digitalWrite(BLEDs[led], bleu);
}

void analogWrite3(byte led, byte rouge, byte vert, byte bleu)
{
  analogWrite(RLEDs[led], rouge);
  analogWrite(GLEDs[led], vert);
  analogWrite(BLEDs[led], bleu);
}

void setZone(byte led, int mode)
{
  const int ROUGE = 1;
  const int VERT = 2;
  const int BLEU = 3;
  const int ORANGE = 4;
  const int MAGENTA = 5;
  const int CYAN = 6;
  const int WHITE = 7; //pourquoi pas BLANC ??

  switch (mode)
  {
    case ROUGE   : digitalWrite3(led, HIGH,  LOW,  LOW); break;
    case VERT    : digitalWrite3(led,  LOW, HIGH,  LOW); break;
    case BLEU    : digitalWrite3(led,  LOW,  LOW, HIGH); break;
    case ORANGE  : analogWrite3( led,  250,  250,    0); break;
    case MAGENTA : analogWrite3( led,  250,    0,  250); break;
    case CYAN    : analogWrite3( led,    0,  250,  250); break;
    case WHITE   : analogWrite3( led,  250,  250,  250); break;
    default      : digitalWrite3(led,  LOW,  LOW,  LOW);
  }
}

Et ailleurs dans le code : - remplacer tous les setZone1(...) par setZone(led1, ...) - remplacer tous les setZone2(...) par setZone(led2, ...)

je voudrais les rajouter ds la liste des sélections pour avoir le plus de choix possible . Si tu as un tuyau je suis preneur.

Pour le code c pareil je débute avec l'arduino donc je connais pas toute les astuces par contre je serais intéressé de voir ce que tu pourrais faire avec mon code pour l'améliorer .....j'apprends vite mais j'aime les exemples , je comprends mieux en regardant ( si tu as le temps bien-sur)

Oui Kamil le code fonctionne et avec mon système électro aussi , je ferais l'identité des lignes plus tard après avoir réussi a mettre mes options. pour le moment je bloque car de mettre un delay ca me coupe le bouton du coup il répond plus, i faut attendre la fin du cycle .

bonjour, j'ai essayé de faire ce que vous m'avez conseillé et c pas évident pour un novice, trop de changement plus rien ne fonctionne. Pour le fade de la led j'ai trouvé plein de tuto sur le net mais je n'arrive pas a l'intégrer car il utilise soit un delay, soit un "for" qui bloque le bouton de sélection. Pouvez vous m'aider svp?

Bonjour,

Pour qu'on puisse t'aider poste ton code actuel, et decrits le problème rencontré