Bonjour à tous,
Débutant dans ce domaine, je tente de réaliser un projet.
Le but étant de récupérer les signaux de sortie (GPIOUT 1 à 4) pour créer une commutation de led de 1 à 10.
Suivant un tableau de logique.
GPIOUT1 = 1; Led 1 =1 toutes les autres sortie reste à 0
Quand
GPIOUT2 = 1; Led2 = 1 la Led1 =0 et toutes les autres led aussi.
GPIOUT1 =1 et GPIOUT2= 1 LED3 = 1 : Donc Led1 et Led2 = 0 ainsi que les autres.
GPIOUT3 = 1; Led4 = 1
Et ainsi de suite
Voila un début de code.
J'ai la commutation sur mes led a base de mes REL 1 à 4.
La ou je bloque c'est sur la combinaison de deux ou trois entrées actives qui pour le moment activent leurs sorties de départ et non pas celle que je voudrais.
/*
Interface : commande de commutation Led
*/
const int REL1=2; //Déclaration des constantes pour les noms des Relais 1 à 4
const int REL2=3;
const int REL3=4;
const int REL4=5;
const int led_1 = 6; // Led 1
const int led_2 = 7; // Led 2
const int led_3 = 8; // Led 3
const int led_4 = 9; // Led 4
const int led_5 = 10; // Led 5
const int led_6 = 11; // Led 6
const int led_7 = 10; // Led 7
const int led_8 = 12; // Led 8
const int led_9 = 13; // Led 9
int Etat_REL1; // Variable utilisé pour la mémoire des etats
int Etat_REL2;
int Etat_REL3;
int Etat_REL4;
int Etat_REL12;
int Etat_REL13;
int Etat_REL14;
int Etat_REL23;
int Etat_REL24;
int Etat_REL34;
int Etat_Led1=0;
int Etat_Led2=0;
int Etat_Led3=0;
int Etat_Led4=0;
int Etat_led5=0;
int Etat_Led6=0;
int Etat_Led7=0;
int Etat_Led8=0;
void setup()
{
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(REL1, HIGH); // Etat du REL1 à 1
Etat_REL1 = digitalRead(REL1); // mise en Memoire du relais
digitalWrite(REL2, HIGH);
Etat_REL2 = digitalRead(REL2);
digitalWrite(REL3, HIGH);
Etat_REL3 = digitalRead(REL3);
digitalWrite(REL4, HIGH);
Etat_REL4 = digitalRead(REL4);
digitalWrite(Etat_REL12, HIGH); //ecrit à 1 l'Etat memoire du REL12
Etat_REL12 == ((Etat_REL1, HIGH) && (Etat_REL2, HIGH)); //Etat_REL12 = 1 si REL1 et REL2 =1
if(!Etat_REL1)
{
Etat_Led1 = !Etat_Led1; // Lecture de l'etat de la led
digitalWrite(6, HIGH); // Sortie incrementé à 1 pour la led1
digitalWrite(7, LOW); // Sortie à 0 pour les autres
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if(!Etat_REL2)
{
Etat_Led2 = !Etat_Led2;
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if(!Etat_REL3)
{
Etat_Led4 = !Etat_Led4;
digitalWrite(9, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
if(!Etat_REL4)
{
Etat_Led4 = !Etat_Led4;
digitalWrite(13, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
}
if (Etat_REL12) // Si Etat_REL12 = 1 alors Led3 = 1 Mais la c'est le bug j'ai led 1 et 2 qui s'allume.
{
Etat_Led3 = !Etat_Led3;
digitalWrite(12, HIGH)
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(13, LOW);
}
}
Si des personnes ont des idées pour m'aiguiller et comprendre pourquoi la relation faite sur REL12 ne fonctionne pas.
Merci à tous.
Gribouille76fr
Le Cablage en photo. Le dip switch pour simuler les GPiOUT