Si vous ne souhaitez pas une hyper précision à la micro-seconde et au Hertz près , vous pouvez utiliser la fonction
tone() pour générer la fréquence et vérifier dans la loop() la valeur de
millis() ou
micros() pour décider de quand passer à l'intervalle suivant.
On vous laisse explorer et revenir avec un code qui pourrait ressembler à cela:
struct {
unsigned long debutIntervalle;
unsigned int frequence;
} sequenceur[] = {
{0, 35000u},
{10000, 34000u},
{20000, 33000u},
{30000, 32000u},
{40000, 31000u},
{50000, 30000u},
{60000, 30000u}, // <<<< PAS DE CHANGEMENT DE FREQUENCE ???
{10000000, 25000u},
{11000000, 20000u},
{12000000, 15000u},
{13000000, 10000u},
{14000000, 6000u},
};
const size_t nbIntervalles = sizeof(sequenceur) / sizeof(sequenceur[0]);
size_t intervalleEnCours = 0;
const uint8_t freqPin = 7;
uint32_t decalageDepart; // pour tenir compte du temps de boot de l'arduino et ne pas trop rogner sur le premier intervalle
uint32_t prochainTopChrono;
void initialization()
{
// A ECRIRE
}
void reglageProchainIntervalle()
{
// A ECRIRE
}
void setup() {
Serial.begin(115200);
initialisation();
}
void loop()
{
if ((intervalleEnCours < nbIntervalles) && (micros() >= prochainTopChrono)) reglageProchainIntervalle();
}