Salut à vous, je débute avec l'Arduino et j'ai besoin d'un avis sur un petit bout de code que je vient de faire pour controler avec trois petit BP une matrice de de 8 Led bicouleur avec un 595.
Deux des BP servent à sélectionner la LED sur laquelle le troisiéme BP va changer la LED.
J'ai pas mal galéré pour arriver à mes fins, étant pas encore habitué à toutes les fonctions du langage arduino j'ai bidouillé ça:
/*La sélection de la couleur se fait par un boutons LED, et deux autres boutons de naviguer de LED en LED
Le potentiométre joue sur le delais de multiplexage d'affichage des LED
*/
const int latchPin = 8; //595 pin 12
const int clockPin = 12; //595 pin 11
const int dataPin = 11; //595 pin 14
//595 pin 16 connected to 5VDC
//595 pin 8 connected to GND
const int BPG = 4;
const int BPLED = 3;
const int BPD = 2;
int LEDA[4]={0,17,33,49};
int LEDB[4]={0,18,34,50};
int LEDC[4]={0,20,36,52};
int LEDD[4]={0,24,40,56};
int LEDE[4]={0,65,129,193};
int LEDF[4]={0,66,130,194};
int LEDG[4]={0,68,132,196};
int LEDH[4]={0,72,136,200};
int LEDDelay;
int Etat_BPG = 0;
int Last_BPG = 0;
int Etat_BPLED = 0;
int Last_BPLED = 0;
int Etat_BPD = 0;
int Last_BPD = 0;
int Direction;
int ledA;
int ledB;
int ledC;
int ledD;
int ledE;
int ledF;
int ledG;
int ledH;
void setup() {
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(BPG, INPUT);
digitalWrite(BPG, HIGH) ;
pinMode(BPD, INPUT);
digitalWrite(BPD, HIGH) ;
pinMode(BPLED, INPUT);
digitalWrite(BPLED, HIGH) ;
}
void loop() {
Etat_BPLED = digitalRead(BPLED);
Etat_BPD = digitalRead(BPD);
Etat_BPG = digitalRead(BPG);
if (Etat_BPG!=Last_BPG){
if (Etat_BPG == HIGH){
Direction --;
}
if(Direction == -1){
Direction=7;
}
else{}
}
if (Etat_BPD!=Last_BPD){
if (Etat_BPD == HIGH){
Direction ++;
}
if(Direction == 8){
Direction=0;
}
else{}
}
switch (Direction){
case 0:
if (Etat_BPLED!=Last_BPLED){
if (Etat_BPLED == HIGH) {
ledA ++;
if (ledA == 4){
ledA=0;
}
else{}
}
}
break;
case 1:
if (Etat_BPLED!=Last_BPLED){
if (Etat_BPLED == HIGH) {
ledB ++;
if (ledB == 4){
ledB=0;
}
else{}
}
}
break;
case 2:
if (Etat_BPLED!=Last_BPLED){
if (Etat_BPLED == HIGH) {
ledC ++;
if (ledC == 4){
ledC=0;
}
else{}
}
}
break;
case 3:
if (Etat_BPLED!=Last_BPLED){
if (Etat_BPLED == HIGH) {
ledD ++;
if (ledD == 4){
ledD=0;
}
else{}
}
}
break;
case 4:
if (Etat_BPLED!=Last_BPLED){
if (Etat_BPLED == HIGH) {
ledE ++;
if (ledE == 4){
ledE=0;
}
else{}
}
}
break;
case 5:
if (Etat_BPLED!=Last_BPLED){
if (Etat_BPLED == HIGH) {
ledF ++;
if (ledF == 4){
ledF=0;
}
else{}
}
}
break;
case 6:
if (Etat_BPLED!=Last_BPLED){
if (Etat_BPLED == HIGH) {
ledG ++;
if (ledG == 4){
ledG=0;
}
else{}
}
}
break;
case 7:
if (Etat_BPLED!=Last_BPLED){
if (Etat_BPLED == HIGH) {
ledH ++;
if (ledH == 4){
ledH=0;
}
else{}
}
}
break;
}
int LED[4]={LEDA[ledA]|LEDE[ledE],LEDB[ledB]|LEDF[ledF],LEDC[ledC]|LEDG[ledG],LEDD[ledD]|LEDH[ledH]};
for (int x = 0; x <= 3 ; x++){
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, LED[x]);
digitalWrite(latchPin, HIGH);
LEDDelay = analogRead(0);
delay(LEDDelay);
}
Last_BPLED = Etat_BPLED;
Last_BPG = Etat_BPG;
Last_BPD = Etat_BPD;
Serial.println(LEDDelay);
}
Voili voilou, je pense qu'il doit u avoir une voie plus simple approprié mais je ne sais pas vers laquelle me tourner, donc si vous pouvez m'aiguiller, je vous en remercie par avance ^^
PS voila le bouzin: Lien
PS II le orange ne ressort pas bien sur la vidéo mais il est bien visible en vrai....