Go Down

Topic: arduino uno  (Read 2116 times) previous topic - next topic

kamill

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 ?

bricoleau

#16
Oct 30, 2015, 05:05 pm Last Edit: Oct 30, 2015, 05:08 pm by bricoleau
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 :

Code: [Select]
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, ...)

Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

jluc83

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 .


jluc83

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?

bricoleau

Bonjour,

Pour qu'on puisse t'aider poste ton code actuel, et decrits le problème rencontré
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

jluc83

Salut,
Désolé pour la réponse si tardive, donc, j'ai essayé de me servir de code fade trouvé sur le net et de le mettre dans le mien et je n'ai pas réussi, le programme se déroule normalement jusqu'à l'appel du fade qui démarre bien sûr la LED1 et mal sur la 2 puis impossible de couper et de relancer le changement de couleur du bouton 2.




voici le code:

Code: [Select]


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);
          }
          //BLANC
        else if (mode == 7)
        {
          analogWrite(RLED1,250);
          analogWrite(GLED1,250);
          analogWrite(BLED1,250);
          }
             //FADE
        else if (mode == 8)
        {
          fader1(RLED1, GLED1);
          fader1(GLED1,BLED1);
          fader1(BLED1, RLED1);
          }
         
          //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);
          }
          //BLANC
        else if (mode == 7)
        {
          analogWrite(RLED2,250);
          analogWrite(GLED2,250);
          analogWrite(BLED2,250);
          }
         
           //FADE
        else if (mode == 8)
        {
          fader2(RLED2, GLED2);
          fader2(GLED2,BLED2);
          fader2(BLED2, RLED2);
          }
         
          //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 == 9) ledMode = 0;
  lastButton = currentButton;
  if (ledMode1 == 9) ledMode1 = 0;


  if (ETAT_Zone1==HIGH)
    setZone1(ledMode);
  else
    setZone1(0);
 
  ETAT_Zone2 = digitalRead(Zone2);

  if (ETAT_Zone2==HIGH)
    setZone2(ledMode1);
  else
    setZone2(0);
   
}
void fader1(int color1, int color2)
{
  for (int brightness=0;brightness<256;brightness++)
  {
    analogWrite(color1, 0-brightness);
    delay(10);
  }
}
void fader2(int color1, int color2)
{
  for (int brightness=0;brightness<256;brightness++)
  {
    analogWrite(color1, 0-brightness);
    delay(10);
  }
}




Merci pour votre aide!
je vais continuer à chercher.

Go Up