Hello,
Récemment, j'ai créé un programme pour - en gros - activer un servomoteur et une led RGB à l'aide d'un clavier matriciel.
J'ai tenté de faire une simulation avec Proteus/Isis pour vérifier si tout se passait bien et apparemment il y a un petit souci avec les pins que j'ai associé à ma led.
Quand je lance la simulation, j'obtiens ceci :
Comme vous pouvez le voir, les pins sensés alimenter les broches G et B de ma led sont inactifs.
Voici le programme correspondant :
// On ajoute 3 librairies à notre code :
#include <Password.h>
#include <Keypad.h>
#include <Servo.h>
// On crée une variable associée à notre servomoteur :
Servo servo;
// On définit le mot de passe qui déverrouillera la valise :
Password password = Password("1234");
const byte ROWS = 4; // Il y a 4 Lignes sur notre clavier
const byte COLS = 3; // ... et 3 Colonnes.
// On définit les touches du clavier :
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// On associe les lignes et les colonnes du clavier à leurs PINs respectifs :
byte rowPins[ROWS] = { 8, 9, 10, 11 };
byte colPins[COLS] = { 5, 6, 7 };
// On initialise le clavier :
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
// On initialise les 3 couleurs de la led RGB en sorties :
pinMode(A5,OUTPUT); // Rouge
pinMode(A6,OUTPUT); // Vert
pinMode(A7,OUTPUT); // Bleu
// On associe le Pin 12 à notre servomoteur :
servo.attach(12);
// On ajoute une fonction qui permet d'analyser les saisies du clavier :
keypad.addEventListener(keypadEvent);
}
void loop(){
// Création de la variable eKey, qui prendra pour valeur la touche apppuyée :
char eKey = keypad.getKey();
}
void keypadEvent(KeypadEvent eKey){
// On définit les différentes options de saisie du clavier en cas d'appui sur un bouton :
switch (keypad.getState()){
case PRESSED:
switch (eKey){ case '*': guessPassword(); break; // En cas d'appui sur la touche "*", on lance le void guessPassword.
case '0': password.reset(); break; // On appuie sur "0" pour réinitialiser sa saisie.
case '#': password.reset();
digitalWrite(A7,HIGH);
servo.write(95);
delay(1500);
digitalWrite(A7,LOW); break;
default: password.append(eKey);} // Si on appuie sur un chiffre, il s'ajoute à la saisie.
}
}
void guessPassword(){
// Si le mot de passe est juste, on allume la led en vert durant 2.5 secondes
// et on effectue une rotation du servomoteur de 180° :
if (password.evaluate()){
digitalWrite(A6,HIGH);
servo.write(-90);
delay(1500);
digitalWrite(A6,LOW);
password.reset();
}
// Sinon, on allume simplement la led en rouge durant 2.5 secondes :
else {
digitalWrite(A5,HIGH);
delay(1500);
digitalWrite(A5,LOW);
}
}
Le servomoteur et le clavier fonctionnent.
Vous avez une idée de ce qui peut provoquer ce problème ?