En fait ce n'est pas tout à fait aussi simple.
Si tu tiens le bouton appuyé la LED va clignoter. A chaque boucle on rentre dans le IF et on complémente l'état.
En fait il faut:
Tester l'appui c'est à dire le changement de l'état repos à l'état actif.
dans les exemples du soft arduino il y a plusieurs exemples, si l'on est pas anglophobe cela peut aider XD
je crois que c'est le sketch "debounce" qui correspond à ce cas de figure.
Pour limiter l'effet de rebond ce qui marche très bien c'est de mettre un condo (moi je mets 1µF) sur l'entrée. Sinon au niveau code, si on veut prendre en compte le mentien, il faut faire ça :
const int BP=52;
const int LED=13;
bolean ETAT_LED=LOW;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(BP, INPUT);
digitalWrite(BP, LOW) ;
}
void loop()
{
if (digitalRead(BP)==1)
{
ETAT_LED = !ETAT_LED;
delay(1);
while (digitalRead(BP)==1) {
}
}
digitalWrite(LED,ETAT_LED);
}
d'un autre coté le code que j'ai mis avant permet de faire un changement avec une valeur analogique (pour un seuil par exemple), ce qui peutt être intéressant.
Bonjour,
Il est vrai que je n'avais pas considéré l'occupation en mémoire flash aussi j'ai repris mes réflexes AVR Studio.
et j'ai ressorti un programme tiré d'un tutorial WEB dont voici le code:
// **********************************************************************
// Télérupteur testé sur Arduino UNO et DUEMILANOVE
// Bouton poussoir sur entrée digitale 2
// LED sur pin 13 ( bien pratique )
// Occupation Flash : [b]506 bytes.[/b]
// **********************************************************************
#define F_CPU 16000000UL // pas sûr que cela soit nécessaire .....
#define BUTTON_DDR DDRD // PORTD bouton direction
#define BUTTON_PORT PORTD
#define BUTTON_PIN PIND
#define BUTTON_BIT PORTD2
#define LED_PORT PORTB
#define LED_BIT PORTB5
#define LED_DDR DDRB
#define DEBOUNCE_TIME 25 // delay debounce bouton */
#define LOCK_INPUT_TIME 300 // delai après bouton pressé */
#include "avr\io.h"
#include <util/delay.h>
int button_is_pressed()
{
if (bit_is_clear(BUTTON_PIN, BUTTON_BIT))
{
_delay_ms(DEBOUNCE_TIME);
if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) return 1;
}
return 0;
}
void init_io() {
LED_DDR |= (1 << 5); // LED pin 13 en sortie
BUTTON_PORT |= _BV(BUTTON_BIT); // pull-up résistance pour le bouton
}
void toggle_led()
{
LED_PORT ^= _BV(LED_BIT);
}
void setup()
{
init_io();
}
void loop()
{
if (button_is_pressed())
{
toggle_led();
_delay_ms(LOCK_INPUT_TIME);
}
}
Le gain est intéressant
Bien sûr il reste la gestion du maintien
Salutations.