Au lieu de réécrire une ligne à chaque numéro que je souhaite composer, j'aimerai écrire les numéros à la chaine pour que le code l'exécute par la suite, j'ai tenté ceci mais cela ne fonctionne pas :
#include "dtmfgen.h"
DTMFGenerator dtmf;
void setup()
{
}
void playDTMF(uint8_t number, long duration)
{
dtmf.generate(number, duration);
}
void loop()
{
int i;
uint8_t phone_number[] = { 1, 5, 2, 0, 7}; // écrire le numéro à composer
for (i = 0; i < sizeof(phone_number); i ++)
{
playDTMF(phone_number[i], 300);
}
delay(3000);
}
Une idée du problème ? Merci,
Cordialement, Christophe
#include "dtmfgen.h"
DTMFGenerator dtmf;
void setup()
{
}
void playDTMF(uint8_t number, long duration)
{
dtmf.generate('5', duration);
}
void loop()
{
int i;
uint8_t phone_number[] = {5,4,6,8,7,5,5}; // écrire le numéro à composer
for (i = 0; i < sizeof(phone_number); i ++)
{
playDTMF(phone_number[i], 300);
delay (1000);
}
delay(3000);
}
Cela génère uniquement la tonalité du 5 et autant de fois qu'il y a de nombre dans la ligne //écrire le numéro à composer, c'est à dire 7 dans cet exemple
La fonction playDTMF n'est pas vraiment utile puisqu'elle se contente de recopier les paramètres qu'elle reçoit pour les passer à generate(), autant utiliser directement generate().
#include "dtmfgen.h"
DTMFGenerator dtmf;
void setup()
{
}
void loop()
{
int i;
char phone_number[] = { '1', '5', '2', '0', '7'}; // écrire le numéro à composer
for (i = 0; i < sizeof(phone_number); i ++)
{
dtmf.generate(phone_number[i], 300);
}
delay(3000);
}
Avec quelques modifications minimes du code tu pourrais aussi utiliser une chaine de caractères au lieu du tableau ce qui simplifierait la saisie des numéros.
Si tu veux faire du DTMF reconnu par un téléphone, il faut penser à faire une pause entre chaque caractère que tu envois.
Je ne sais pas si tu fais bien cette pose?
Une seconde me parait du coup un peu long, il faudrait regarder ce que dit la RFC, il me semblait que la moyenne était plus dans les 200 à 300 ms ?
Mais si ça marche parfaitement, pourquoi s'embêter
C’est plus court que ça . On trouve généralement une pause d’environ 45 à 75 millisecondes entre deux symboles successifs. Cette pause permet au système récepteur ou au décodeur de distinguer clairement les tons DTMF individuels et d’éviter toute interprétation erronée.
(De mémoire le livre bleu de l’ITU-T Q.23 ou la RFC 4733 doivent donner des spécifications détaillées sur la signalisation DTMF.)
De mémoire la seul indication d'obligation dans les RFC est le temps d'une micro-coupure (20ms je crois mais vraiment pas sûre), tout ce qui est au dessus est considéré comme un "break"
Je viens de regarder ce que l'on utilise par défaut, un digit de 200ms avec un break de 100ms.
Oui, je ne sais pas pourquoi mais il y a une différence entre la RFC et ce qu'implémente les fabricants.
C'est compliqué du coup à justifier que tel ou tel fabricant de renons ne respecte pas la RFC
Bon maintenant avec le numériques les joies de la téléphonie analogique tendent à disparaitre