J’envois ca de suite!
#include <LiquidCrystal.h>
#include « Wire.h »
#include « si5351.h »
#include<EEPROM.h>
#include"simpleBouton.h"
#define pinArduinoRaccordementSignalSW 2 // pin D2 de l’Arduino ligne SW BP mise en mémoire
#define pinArduinoRaccordementSignalCLK 3 // pin D3 de l’Arduino ligne CLK du codeur
#define pinArduinoRaccordementSignalDT 4 // pin D4 de l’Arduino ligne DT du codeur
int etatPrecedentLigneSW; // Cette variable nous permettra de stocker le dernier état de la ligne SW, afin de le comparer à l’actuel
volatile long compteur = 0; // Incrementation /Decrementation du codeur
long val_mem; // Valeur Frequence mise en mémoire
long step = 1;
long val_affich;
long val_frequency; // Valeur Frequence
long val_freqref = 10000000;
long val_nextctr;
long ctrstepp;
int rs = 12;
int en = 11;
int d4 = 10;
int d5 = 9;
int d6 = 8;
int d7 = 7;
const int numRows = 2; //Nombre de rangées afficheur
const int numCols = 16; //Nombre de colonnes afficheur
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
simpleBouton bouton_up(5); //pas up
simpleBouton bouton_dn(6); //pas down
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// ========================
// Initialisation programme
// ========================
void setup()
{
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Emmanuel");
lcd.setCursor(0, 1);
lcd.print("18/12/2025");
delay(500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("INCR: ");
lcd.setCursor(0,1);
lcd.print("FREQ:");
val_affich = EEPROM.get(10, compteur);
// Config pins de en "entrées" (signaux codeur)
pinMode(pinArduinoRaccordementSignalSW, INPUT);
pinMode(pinArduinoRaccordementSignalDT, INPUT);
pinMode(pinArduinoRaccordementSignalCLK, INPUT);
etatPrecedentLigneSW = digitalRead(pinArduinoRaccordementSignalSW);
// Activation d'interruptions sur les lignes CLK et SW
attachInterrupt(digitalPinToInterrupt(pinArduinoRaccordementSignalCLK), changementDetecteSurLigneCLK, FALLING); // FALLING => détecte tout front descendant
attachInterrupt(digitalPinToInterrupt(pinArduinoRaccordementSignalSW), changementDetecteSurLigneSW, CHANGE); // CHANGE => détecte tout changement d'état
delay(10);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// =================
// Boucle principale
// =================
void loop()
{
if (bouton_dn)
{
ctrstepp = ctrstepp -1;
switch(ctrstepp)
{
case 1:
step = (step/10);
//if (ctrstepp < 1)
//ctrstepp = 1;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
case 2:
step = (step/10);
//if (ctrstepp < 1)
//ctrstepp = 1;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
case 3:
step = (step/10);
//if (ctrstepp < 1)
//ctrstepp = 1;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
case 4:
step = (step/10);
//if (ctrstepp < 1)
//ctrstepp = 1;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
case 5:
step = (step/10);
//if (ctrstepp < 1)
//ctrstepp = 1;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
}
}
//********************************incrémentation step par dizaines***********************
if (bouton_up)
{
ctrstepp = ctrstepp + 1;
switch(ctrstepp)
{
case 1:
step = (step*1);
//if (ctrstepp >10000)
//ctrstepp = 10000;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
case 2:
step = (step*10);
//if (ctrstepp >10000)
//ctrstepp = 10000;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
case 3:
step = (step*10);
//if (ctrstepp >10000)
//ctrstepp = 10000;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
case 4:
step = (step*10);
//if (ctrstepp >10000)
//ctrstepp = 10000;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
case 5:
step = (step*10);
//if (ctrstepp >10000)
//ctrstepp = 10000;
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(step);
break;
}
}
{
val_affich = (compteur + (compteur*(step-1)));
//val_affich = (val_affich + step);
/*
if(val_affich > 1)
{
val_affich= 1;
}
if(val_affich>30000000)
{
val_affich= 30000000;
}
*/
lcd.setCursor(5,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(val_affich);
delay(100);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
// =====================================================
// Routine d’interruption : changementDetecteSurLigneCLK
// =====================================================
void changementDetecteSurLigneCLK()
{
// Lecture de la ligne DT, issue du codeur
int etatActuelDeLaLigneDT = digitalRead(pinArduinoRaccordementSignalDT);
int etatActuelDeLaLigneCLK = LOW;
if(etatActuelDeLaLigneCLK != etatActuelDeLaLigneDT)
{
compteur++;
}
else
{
compteur--;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
// ====================================================
// Routine d’interruption : changementDetecteSurLigneSW
// ====================================================
void changementDetecteSurLigneSW()
{
int etatActuelDeLaLigneSW = digitalRead(pinArduinoRaccordementSignalSW);
etatPrecedentLigneSW = etatActuelDeLaLigneSW;
if(etatActuelDeLaLigneSW == LOW)
EEPROM.put(10,val_affich);
delay(500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ENREGISTRE");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("INCR: ");
lcd.setCursor(0,1);
lcd.print("FREQ:");
*/
}