#include <Encoder.h> // https://www.pjrc.com/teensy/td_libs_Encoder.html
#include <OneButton.h>
#include "StreamDevice.h"
const byte encoderCLKPin = 2; // encoder CLK
const byte encoderDTPin = 3; // encoder DT
Encoder encoder(encoderDTPin, encoderCLKPin);
const byte encoderSWPin = 4; // bouton de l'encodeur
OneButton encoderSwitch(encoderSWPin, true);
StreamDevice YaesuFtdx3000(Serial);
char tempBuffer[100];
long positionActuelle = 0;
bool frequenceModifiee() {
long nouvellePosition = encoder.read() >> 2; // 4 ticks par clicks donc on divise par 4 avec >> 1
if (nouvellePosition != positionActuelle) {
positionActuelle = nouvellePosition;
return true;
}
return false;
}
bool lireFrequence(unsigned long& frequence) {
Serial.println(F("DEMANDE DE LECTURE FREQUENCE"));
YaesuFtdx3000.purgeInput(50);
YaesuFtdx3000.println(F("FA"));
YaesuFtdx3000.endCommand(";\r\n", 5000ul, tempBuffer, sizeof tempBuffer);
if (YaesuFtdx3000.awaitKeyword() != KEYWORD_OK) return false;
if (strncmp(tempBuffer, "FA", 2) == 0) { // https://cplusplus.com/reference/cstring/strncmp/
char *endPtr = nullptr;
unsigned long freq = strtoul(&(tempBuffer[2]), &endPtr, 10); // https://cplusplus.com/reference/cstdlib/strtoul/
if (endPtr && *endPtr == ';') { // on a bien lu tout le texte jusqu'au ;
frequence = freq;
return true;
}
}
return false;
}
void ecrireFrequence(long frequence) {
Serial.print(F("écriture F="));
Serial.println(frequence);
YaesuFtdx3000.print(F("FA"));
YaesuFtdx3000.print(frequence);
YaesuFtdx3000.println(";");
}
void appuiBouton() {
unsigned long frequence;
if (lireFrequence(frequence)) {
Serial.print(F("La fréquence est "));
Serial.println(frequence);
} else {
Serial.println(F("Erreur lecture fréquence"));
}
}
void setup() {
Serial.begin(115200);
// Serial1.begin(9600);
encoderSwitch.attachClick(appuiBouton);
Serial.println(F("PRET"));
}
void loop() {
encoderSwitch.tick();
if (frequenceModifiee()) ecrireFrequence(positionActuelle * 1000l); // attention peut devenir négatif, faudrait tester (à faire)
}