Bonsoir tout le monde,
Comme dit dans ma présentation, je suis tout nouveau dans le monde Arduino. J'ai acheté le bouquin "Démarrez avec Arduino" de Massimo Banzi et suis pas à pas les montages de ce dernier.
Toutefois je bloque sur le code de l'exemple 05. En gros, il s'agit de modifier l'intensité lumineuse d'une LED suivant la durée d'appui sur un bouton. Un appui bref allume et eteint la diode, un appui long augmente l'intensité.
Un montage assez simple en soi.
Mais j'ai beau suivre à la lettre les indications du dit livre, ça ne fonctionne pas.
Lorsque j'appuie sur le bouton, brièvement ou longuement, la diode s'allume, mais c'est tout. Rien d'autre ne se passe.
Voici le code que j'ai écrit, si vous avez une idée de ce qui cloche.
Merci d'avance!
// Ex_05 Allumage led en pressant le bouton, et la maintient apres relachement
// inclut une tempot anti rebond, et si le bouton reste appuyé, la luminosité change
/*Déclaration des variables et constantes */
const int LED = 9; // patte pour LED 9
const int BUTTON = 7;
int val = 0 ; // sauve l'état du bouton
int old_val = 0; // sauve précédente valeur de val
int state = 0; // 0 = led off, 1 = Led ON
int brightness = 64 ; // sauve la luminosité
unsigned long startTime = 0 ; // instant début d'appui de bouton
void setup() {
pinMode(LED, OUTPUT); // Patte 9 en sortie
pinMode(BUTTON, INPUT); // bouton en entrée
}
void loop() {
val = digitalRead(BUTTON); // lit et sauve l'état du bouton
// Test si il y a un chamngement d'état
if ((val == HIGH) && (old_val == LOW)) {
state = 1 - state; // inverse l'état de la led
startTime = millis(); // millis() horloge de la carte
// Temps en ms depuis le démarrage de la carte
// enregistre quand le bouton a été pressé
delay(10);
// teste si le bouton est maintenu appuyé
if ((val == HIGH) && (old_val == HIGH)) {
// si bouton appouyé plus de 500ms
if (state == 1 && (millis() - startTime) > 500) {
brightness++ ; // plus lumineux de 1 (brightness +1 = brightness++
delay(10); // tempo pour allumage progressif
if (brightness > 255) { // 255 = maxi
brightness = 0; // si on dépasse 255, on retourne à 0
}
}
}
old_val = 1; // sauve l'ancienne valeur de val
if (state == 1) {
analogWrite (LED, brightness); // allume la LED
}
else {
analogWrite (LED, 0); // eteint la led
}
}
}