Merci pour vos réponses rapides !
Mes Leds fonctionnent uniquement en variation RGB, je contrôle donc uniquement leur activation en rouge, vert ou bleu.
J'avais travaillé avec une personne qui m'avait codé le logiciel de telle façon à ce que je n'ai qu'à changer les couleurs de LED et indiquer le nombre de frame par bouton.
J'utilise un Arduino Leonardo. Le problème est que quand je vérifie le code, il me met le message d'erreur suivant :
Le croquis utilise 16 424 octets (57%) de l'espace de stockage de programmes. Le maximum est de 28 672 octets.
Les variables globales utilisent 8 739 octets (341%) de mémoire dynamique, ce qui laisse -6 179 octets pour les variables locales. Le maximum est de 2 560 octets.
Alors j'ai vu que l'Arduino DUE a les même spécificités que mon arduino Leonardo tout en étant plus puissant, ça aurait été LA bonne solution, mais mes LEDS fonctionnent en 5v.
Peut être qu'il est possible de les brancher indépendamment de l'arduino, sur une alimentation externe..?
Voici le code :
#define BUTTON1 A0
#define BUTTON2 A1
#define BUTTON3 A2
#define BUTTON4 A3
#define BUTTON5 A4
#define LED1 11
#define LED2 10
#define LED3 9
#define LED4 5
#define LED5 6
#define arr_len( x ) ( sizeof( x ) / sizeof( *x ) )
int laststate=0;
int runtimestate=1;
uint8_t dataPin = 3; // Yellow wire on Adafruit Pixels
uint8_t clockPin = 2; // Green wire on Adafruit Pixels
Adafruit_WS2801 strip = Adafruit_WS2801(50, dataPin, clockPin);
void setup() {
strip.begin();
// Update LED contents, to start they are all 'off'
strip.show();
//BUTTONS
pinMode(BUTTON1,INPUT_PULLUP);
pinMode(BUTTON2,INPUT_PULLUP);
pinMode(BUTTON3,INPUT_PULLUP);
pinMode(BUTTON4,INPUT_PULLUP);
pinMode(BUTTON5,INPUT_PULLUP);
// LEDS
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(LED5,OUTPUT);
}
void loop() {
checkButton();
showanim();
if(runtimestate==1) fadeLed(LED1);
if(runtimestate==2) fadeLed(LED2);
if(runtimestate==3) fadeLed(LED3);
if(runtimestate==4) fadeLed(LED4);
if(runtimestate==5) fadeLed(LED5);
}
void showanim()
{
// run once
if(runtimestate == laststate) return;
laststate= runtimestate;
switch(runtimestate)
{
case 1:
drawAnimation(anim1,anim1_frame_counter);
break;
case 2:
drawAnimation(anim2,anim2_frame_counter);
break;
case 3:
drawAnimation(anim3,anim3_frame_counter);
break;
case 4:
drawAnimation(anim4,anim4_frame_counter);
break;
case 5:
drawAnimation(anim5,anim5_frame_counter);
break;
}
}
void drawAnimation(int anim[][50], int framecount)
{
Serial.print("showing animation FRAMES:");
Serial.println(framecount);
for(int i=0;i<framecount;i++)
{
//display frame
for(int x=0;x<50;x++)
{
uint32_t c = Color(0,0,0);
if(anim[i][x]=='r') c = Color(255,0,0);
if(anim[i][x]=='g') c = Color(0,255,0);
if(anim[i][x]=='b') c = Color(0,0,255);
strip.setPixelColor(x, c);
}
strip.show();
// delay
delay(animationspeed);
}
}
/* Helper functions */
// Create a 24 bit color value from R,G,B
uint32_t Color(byte r, byte g, byte
{
uint32_t c;
c = r;
c <<= 8;
c |= g;
c <<= 8;
c |= b;
return c;
}
void fadeLed(int led)
{
ledsoff();
for(int i=0;i<255;i++)
{
analogWrite(led,i);
if(bd(2)) return;
}
if(bd(100)) return;
for(int i=255;i>0;i--)
{
analogWrite(led,i);
if(bd(2)) return;
}
}
void ledsoff()
{
analogWrite(LED1,0);
analogWrite(LED2,0);
analogWrite(LED3,0);
analogWrite(LED4,0);
analogWrite(LED5,0);
}
int checkButton()
{
if(!digitalRead(BUTTON1)){ runtimestate=1; ledsoff(); analogWrite(LED1,255); return 1;}
if(!digitalRead(BUTTON2)){ runtimestate=2; ledsoff(); analogWrite(LED2,255);return 1;}
if(!digitalRead(BUTTON3)){ runtimestate=3; ledsoff(); analogWrite(LED3,255);return 1;}
if(!digitalRead(BUTTON4)){ runtimestate=4; ledsoff(); analogWrite(LED4,255);return 1;}
if(!digitalRead(BUTTON5)){ runtimestate=5; ledsoff(); analogWrite(LED5,255);return 1;}
return 0;
}
int bd(int wait)
{
for(int i =0; i<wait;i++)
{
if(checkButton()) return 1;
delay(1);
}
return 0 ;
}
Et chaque bouton est codé de cette manière :
#include "Adafruit_WS2801.h"
#include "SPI.h" // Comment out this line if using Trinket or Gemma
// milliseconds - defines how long each frame is displayed
int animationspeed=800;
// defines how many frames anim1 consists of
int anim1_frame_counter=17;
int anim1[][50]= {
// frame #1
{
'b','b','g','r','r','r','g','g','r','g','r','r','r','g','g','r','r',
'r','r','r','g','r','g','r','r','r','r','g','r','r','b','b','b','b',
'b','b','b','g','r','g','g','r','g','r','g','r','g','r','g','r',
},
{
'b','b','b','r','r','r','g','g','r','g','r','r','r','g','g','r','r',
'r','r','r','r','g','r','r','r','r','g','r','r','r','b','b','b','b',
'b','b','b','g','r','g','g','r','g','r','g','r','g','g','r','r',
},
{
'b','b','b','r','r','r','g','g','r','g','r','r','r','g','g','r','r',
'r','r','r','r','g','r','r','r','r','g','r','r','r','b','b','b','b',
'b','b','b','b','r','g','g','r','g','r','g','r','g','g','r','r',
},
{
'b','b','b','r','r','r','g','g','r','g','r','r','r','g','g','r','r',
'r','r','r','r','g','r','r','r','r','g','r','r','b','b','b','b','b',
'b','b','b','b','r','g','g','r','g','r','g','r','g','g','r','r',
},
{
'b','b','b','r','r','r','g','g','r','g','r','r','r','g','g','r','r',
'r','r','r','r','g','r','r','r','r','g','r','r','b','b','b','b','b',
'b','b','b','b','r','g','g','r','g','r','g','r','g','g','r','r',
},
{
'b','b','b','r','r','r','g','g','r','g','r','r','r','g','g','r','r',
'r','r','r','r','g','r','r','r','r','g','r','r','b','b','b','b','b',
'b','b','b','b','r','g','g','r','g','r','g','r','g','g','r','r',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','r','r','r',
'r','r','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','r','r',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','r','r','r',
'r','r','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','r','r',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','r','r','r',
'r','r','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','r','r',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','g','g','g',
'g','g','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','g','g',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','r','r','r',
'r','r','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','r','r',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','g','g','g',
'g','g','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','g','g',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','r','r','r',
'r','r','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','r','r',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','g','g','g',
'g','g','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','g','g',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','r','r','r',
'r','r','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','r','r',
},
{
'b','b','b','b','b','r','r','r','g','g','r','g','r','r','g','g','g',
'g','g','r','r','r','r','r','r','g','r','r','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','r','g','r','g','r','g','g','g',
},
{
'b','b','b','b','b','g','r','r','r','g','r','g','r','g','r','g','r',
'r','r','g','r','r','r','r','g','r','r','g','b','b','b','b','b','b',
'b','b','b','b','b','r','g','g','g','r','g','r','g','r','g','g',
}
};
Je vous joint des captures d'écran du code, car présenté comme ça c'est peut être un peu fastidieux...
Merci beaucoup !