Bonsoir,
J'utilise actuellement deux photorésistances dont je fais la différence des valeurs que j'affiche ensuite sur un double afficheur sept segments afin qu'un utilisateur puisse décider d'agir ou non via deux boutons. Mon seul soucis c'est de pouvoir faire interagir mon afficheur avec l'action sur un des boutons. Quand j'appui sur un bouton pour faire déplacer le moteur et avec lui les LDRs, l'afficheur doit m'afficher les valeurs simultanément, en même temps que j'appui sur le bouton.
Mais le code que j'ai écris ne répond pas à mes attentes. Je ne sais pas si l'Arduino à lui tout seul peut me permettre de faire ça ou si c'est le code que j'ai mal écris.
// Variables pour la commutation des transistors
byte digit3 = 27; // Afficheur UD
byte digit4 = 28;
byte digit5 = 29;
byte sevenSegmentPins_UD[] = {40,41,42,43,44,45,46}; // Broches à utiliser par les afficheurs UD
// Tableau d'affichage
byte sevenSegment[11][7] =
{
//a b c d e f g
{ 0,0,0,0,0,0,1 }, // = 0
{ 1,0,0,1,1,1,1 }, // = 1
{ 0,0,1,0,0,1,0 }, // = 2
{ 0,0,0,0,1,1,0 }, // = 3
{ 1,0,0,1,1,0,0 }, // = 4
{ 0,1,0,0,1,0,0 }, // = 5
{ 0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,1,1,0,0 }, // = 9
{ 1,1,1,1,1,1,0 } // = -
};
// Définition des broches du moteur 1 : Axe hoizontal
int motor1_pin1 = 4;
int motor1_pin2 = 5;
int motor1_pin3 = 6;
int motor1_pin4 = 7;
// Définition des broches des photorésistances
int LDR_Up = A2; // Haut
int LDR_Down = A3; // bas
// Déclaration des variables devant recevoir les valeurs des LDRs
int Val_LDR_Up = 0;
int Val_LDR_Down = 0;
// Variable pour stocker le résultat de la différence entre U et D
int dif_UD = 0;
// Déclaration des variables de temps
long temps;
int PAUSE = 500;
int A, B, C, D, E, F, G, H, I, J, Ent_UD, Mod_UD;
const int K = 11;
// Déclaration des variables d'étape
int Etape_H = 0;
// Variable de stockage d'état des boutons
int buttonState = 0;
int buttonState_UD1 = 0;
int buttonState_UD2 = 0;
// Les boutons de déplacement
int boutonPin_UD1 = 52;
int boutonPin_UD2 = 53;
void setup ()
{
Serial.begin(9600);
// Configuration en entrée des broches destinées aux ldrs
pinMode(LDR_Up, INPUT);
pinMode(LDR_Down, INPUT);
// Configuration en sortie des pins moteur H
pinMode(motor1_pin1, OUTPUT);
pinMode(motor1_pin2, OUTPUT);
pinMode(motor1_pin3, OUTPUT);
pinMode(motor1_pin4, OUTPUT);
// Mise à l'état haut des variables de stockage d'état
buttonState_UD1 = HIGH; Bouton relaché
buttonState_UD2 = HIGH;
// Initialisation des boutons de déplacement
pinMode(boutonPin_UD1, INPUT);
pinMode(boutonPin_UD2, INPUT);
// Configuration en sortie des broches destinées aux afficheurs
for(int i=0; i<7; i++)
{
pinMode(sevenSegmentPins_UD[i], OUTPUT);
}
// Configuration en sortie des broches destinées aux transistors
pinMode(digit3, OUTPUT); //pin 27
pinMode(digit4, OUTPUT); //pin 28
pinMode(digit5, OUTPUT); //pin 29
}
// Fonction d'affichage UD
void segmentWrite_UD(byte digit)
{
byte pin = 40;
for (byte i=0; i<7; ++i)
{
digitalWrite(pin, sevenSegment[digit][i]);
++pin;
}
}
void loop()
{
modeManuel();
}
void modeManuel()
{
Val_LDR_Up = analogRead(LDR_Up);
Val_LDR_Down = analogRead(LDR_Down);
dif_UD = (Val_LDR_Up - Val_LDR_Down);
AffichageUD(dif_UD);
buttonState_UD1 = digitalRead(boutonPin_UD1);
buttonState_UD2 = digitalRead(boutonPin_UD2);
while(buttonState_UD1 == LOW) // tant que le bouton UD1 est appuyé ...
{
Val_LDR_Up = analogRead(LDR_Up);
Val_LDR_Down = analogRead(LDR_Down);
dif_UD = (Val_LDR_Up - Val_LDR_Down);
AffichageUD(dif_UD);
Bouge_H(1);
buttonState_UD1 = digitalRead(boutonPin_UD1); // Vérifie l'état du bouton UD1
}
while(buttonState_UD2 == LOW) // tant que le bouton UD2 est appuyé ...
{
Val_LDR_Left = analogRead(LDR_Left); // lit la valeur des ldrs
Val_LDR_Right = analogRead(LDR_Right);
Val_LDR_Up = analogRead(LDR_Up);
Val_LDR_Down = analogRead(LDR_Down);
dif_UD = (Val_LDR_Up - Val_LDR_Down);
AffichageUD(dif_UD);
Bouge_H(-1);
buttonState_UD2 = digitalRead(boutonPin_UD2); // Vérifie l'état du bouton UD2
}
}
void Bouge_H(long Pas){
if(Pas>0){
for(int y=0;y<Pas;y++){
Etape_H++;
if(Etape_H>4) Etape_H=1;
FaireUnPasH();
}
}
if(Pas<0){
for(int x=0;x<(-Pas);x++){
Etape_H--;
if(Etape_H<1) Etape_H=4;
FaireUnPasH();
}
}
}
void AffichageUD(int dif_UD)
{
if(dif_UD <100)
{
F = dif_UD/10;
Ent_UD = int (F);
Mod_UD = 0;
}
if(dif_UD>=100)
{
G = dif_UD/10;
H = int(B);
I = C%10;
Ent_UD = int(I);
J = C/10;
Mod_UD = int(J);
}
int t2 = 50;
while(t2>0)
{
t2 = t2 - 10;
digitalWrite(digit5, HIGH);
segmentWrite_UD(Ent_UD);
digitalWrite(digit4, LOW);
digitalWrite(digit3, LOW);
delay(10);
digitalWrite(digit4, HIGH);
segmentWrite_UD(Mod_UD);
digitalWrite(digit3, LOW);
digitalWrite(digit5, LOW);
delay(10);
}
}// Fin de void AffichageUD
void FaireUnPasH(){
switch(Etape_H) {
case 1:
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
break;
case 2:
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
break;
case 3:
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
break;
case 4:
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
break;
}
delay(PAUSE);
}// Fin de void FaireUnPasH