63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
#include <HijelHID_BLEKeyboard.h>
|
|
|
|
// HijelHID_BLEKeyboard keyboard;
|
|
HijelHID_BLEKeyboard keyboard("ESP32 Emergency button", "Hijel", 100);
|
|
|
|
#ifndef LED_BUILTIN
|
|
#define LED_BUILTIN 2
|
|
#endif
|
|
unsigned long dernierBlink = 0;
|
|
bool etatLed = false;
|
|
|
|
#define BROCHE_BOUTON 4
|
|
#define DUREE_ANTIREBOND 50 // millisecondes
|
|
|
|
int etatBrut = HIGH; // derniere lecture brute de la broche
|
|
int etatStable = HIGH; // etat confirme apres anti-rebond
|
|
unsigned long tChangement = 0; // horodatage du dernier changement brut
|
|
bool arme = true; // true = pret a envoyer une frappe
|
|
|
|
void setup() {
|
|
keyboard.begin();
|
|
pinMode(BROCHE_BOUTON, INPUT_PULLUP); // pull-up interne : repos = HIGH, appui = LOW
|
|
Serial.begin(115200);
|
|
}
|
|
|
|
void envoyerFrappe() {
|
|
if (keyboard.isConnected()) {
|
|
keyboard.tap(KEY_B);
|
|
Serial.println("Frappe : OK");
|
|
// keyboard.print("httpsM!!zzz:youtube:co,!zqtch§v=DLwxrwFCyOs");
|
|
// keyboard.tap(KEY_RETURN);
|
|
}
|
|
else {
|
|
Serial.println("Connectez l'ESP32 à un périphérique avant d'appuyer sur le bouton");
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
int lecture = digitalRead(BROCHE_BOUTON);
|
|
|
|
// 1) Anti-rebond : a chaque changement de la lecture brute, on relance le minuteur
|
|
if (lecture != etatBrut) {
|
|
tChangement = millis();
|
|
etatBrut = lecture;
|
|
}
|
|
|
|
// 2) On ne valide un nouvel etat que s'il est stable depuis assez longtemps
|
|
if (millis() - tChangement > DUREE_ANTIREBOND) {
|
|
if (lecture != etatStable) {
|
|
etatStable = lecture;
|
|
|
|
if (etatStable == LOW && arme) {
|
|
// Front descendant + bouton arme -> une seule frappe
|
|
envoyerFrappe();
|
|
arme = false; // verrou : plus rien jusqu'au relachement
|
|
}
|
|
else if (etatStable == HIGH) {
|
|
// Bouton relache -> on rearme pour le prochain appui
|
|
arme = true;
|
|
}
|
|
}
|
|
}
|
|
} |