/*
Générateur BF de 10 hertz à 50000 hertz
Le bouton ouvre le menu: PAS
Copyright (C) 2023, Uri F1FRH
*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // adresse et format de lécran LCD
const int ENCODER_CLK =2; // attribut la valeur 2 à la variable "ENCODER_CLK"
const int ENCODER_DT =3; // attribut la valeur 3 à la variable "ENCODER_DT"
const int ENCODER_SW =4; // attribut la valeur 4 à la variable "ENCODER_SW"
int compteur = 1000;
void setup() {
// Initialise LCD
lcd.init();
lcd.backlight(); // allume le rétro_éclairage
// Initialise les PIN de l"encodeur
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING); // action sur front descendant
}
void readEncoder() {
int dtValeur = digitalRead(ENCODER_DT);
if (dtValeur == HIGH) {
compteur=compteur+100; // Clockwise
if (compteur >50000) {compteur=50000;}
}
if (dtValeur == LOW) {
compteur=compteur-100; // Counterclockwise
if (compteur <=10) {compteur=10;}
}
}
// désactive les interrutions pendant la lecture pour que la valeur ne change pas
int getCompteur() {
int result;
noInterrupts();
result = compteur;
interrupts();
return result;
}
void resetCompteur() {
noInterrupts();
compteur =1000;
interrupts();
}
void loop() {
lcd.setCursor(3, 0);
lcd.print("Frequence:");
lcd.setCursor(4, 1);
lcd.print(getCompteur());
lcd.print(" Htz");
lcd.print(" ");
if (digitalRead(ENCODER_SW) == LOW) {
resetCompteur();
}
}