Bonjour à toutes et tous.
J'ai un poste de radioamateur, un YAESU FTDX-3000. Il dispose d'une interface série RS-232 pour dialoguer par des commandes CAT, pour Computer Aided transciever (je crois), à la manière assez simple des commandes AT pour les puces GSM et GPS entre autres.
Et c'est ce qui m'amène ici.
Voici le PDF officiel qui détaille tout : PDF CAT YAESU
Par exemple on envoie "fa;" et on reçoit la fréquence en cours d'utilisation, pour la fréquence 14.250 MHz on recevra "FA14250000;".
J'ai essayé simplement avec un un terminal série et un câble FTDI suivi d'un convertisseur de niveaux MAX3232, ça fonctionne.
Je peux envoyer et recevoir.
J'ai ensuite essayé avec un Arduino Pro Micro et je suis partit de l'exemple Multiserial, ça fonctionne aussi. C'est à dire que quand j'envoie "fa;" je reçois bien dans le terminal série FA12123123; par exemple.
Oui mais voilà, je souhaite extraire la partie 12123123 pour la réexploiter, dès le début du programme, car je souhaite modifier cette fréquence avec un encodeur rotatif. Me faire un bouton déporté, en gros.
J'ai tenté pas mal de choses avec des Sprintf et des boucles FOR pour récupérer les caractères un à un dans un tableau puis lire ensuite le contenu du tableau mais seulement les cases qui m'intéressent, je me perds dans des instructions que je découvre au fur et à mesure et que je ne maîtrise pas.
Voici mon code actuel, tel quel avec des bouts commentés pour essayer des trucs :
char tab[12];
char inByte;
int i;
int a;
char frequency[9];
byte shift = 0;
unsigned long tempfreq;
int n;
long int freq = 12123123;
void setup() {
// initialize both serial ports:
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
// read from port 1, send to port 0:
if (Serial1.available()) {
inByte = Serial1.read();
Serial.write(inByte);
if (inByte == ';')
{
Serial.println();
}
}
/*
if (Serial1.available())
{
inByte = Serial1.read();
tab[i] = inByte;
i++;
delay(10);
if(inByte == ';')
{
Serial.println();
// message =
for(a=12;a<i;a++)
{
Serial.write(tab[a]);
}
Serial.println();
i=-1;
}
}
*/
// read from port 0, send to port 1:
if (Serial.available()) {
inByte = Serial.read();
if (inByte == 'F') {
Serial1.print("fa");
Serial1.print(freq);
Serial1.print(";");
}
else {
Serial1.write(inByte);
}
}
}
J'aimerais seulement comprendre comment faire pour me retrouver avec ma fréquence dans une variable, dépourvue des caractères "FA" et ";", et ensuite m'en servir pour mettre à jour la fréquence une fois au début du code puis ensuite dès que l'encodeur est sollicité.
Si quelqu'un a une idée, qu'il n'hésite pas !