Problème de compatibilité fonction tone et delay

J’ai adapté un programme qui généré des bips
Et je voudrais rajouté une fonction timeur pour programmé une extinction, mais fonction delay rajouté perturbe le delay de fonction tone si quelqu’un pourrais m’aidai

au lieux d'utiliser delay qui bloque x millisecondes ta fonction, utilise millis, et exécute ta fonction toutes les x millisecondes

Impossible de répondre, tu donnes trop peu de renseignements.

Un groupe de bénévoles a pris le temps d'écrire 3 messages, qui sont épinglés, pour donner des conseils pour poser les questions avec le maximum de chances d'avoir des réponses adaptées et précises.

Il serait utile de les lire.

Indice sur ta question : delay utilise le timer 0, il faut voir quel(s) timer(s) tone utilise.
delay est à éviter il est préférable d'utiliser millis() mais le problème reste entier car millis utilise aussi le timer 0

Bonjour,

Il n'y a pas de perturbation entre delay() qui utilise le timer 0 et tone qui utiiise le timer 2 (sur la UNO).

Mais la question est plus que floue.

merci pour les raiponces voici le code:

int sortiPin2 = 8; // sorti connected to digital pin 8
int sortiPin1 = 12;
void setup()
{
setup1();
setup2();
}
void loop()
{
loop1();
loop2();
}
void setup1()
{
pinMode(sortiPin2, OUTPUT); // sets the digital pin as output
}
void setup2()
{
pinMode(sortiPin1, OUTPUT); // sets the digital pin as output
}
void loop1()
{
noTone(12);
// paramètre modifiable:
//11= pin 12,
//fréquence de la note = 3350 hertz,
// 200 = duret de la note,
// delay 1000 = espace entre deux notes).
tone(12, 3350, 200);
delay(1000);
}
void loop2()
{
digitalWrite(sortiPin2, HIGH); // sets the sorti on
delay(4000000); // 4000000 ms = 66 minutes aprés la balis s'étain
digitalWrite(sortiPin2, LOW); // sets the sorti off
delay(4000000); //
}

il n'y à rien qui bloque dans ton programme, il suffit d'attendre 1s (loop1) plus 2x66mn de (loop2) pour avoir un nouveau bip

j'ai oublié, utilise les balises pour poster un code

Je n'ai toujours pas compris exactement ce que tu veux faire.
Si le but est d’émettre un bip en continu pendant que la sortie est active, c'est certain que ça ne va pas le faire. Il faut que tu supprimes ta fonction loop2 et que tu utilises millis() à la place.

Le but est la conception du balise de positionnement souterraine qui émet un bip tout les second à une fréquences de 3350 hertz, module arduino nano
Le delay de module tone sans trouve incontrôlable :
tone(12, 3350, 200);
delay(1000); au lieu de 1000ms je me retrouve avec 4000000 ms = 66 minutes

Le but est la conception du balise de positionnement souterraine qui émet un bip tout les second à une fréquences de 3350 hertz, module arduino nano
Le delay de module tone sans trouve incontrôlable :

tone(12, 3350, 200);
  delay(1000);

au lieu de 1000ms je me retrouve avec 4000000 ms = 66 minutes

c'est tout à fait normal, vu qu’après le bip tu fais un delay(4000000) ,il ne te faut pas utiliser delay
moi je ferai plutôt:

int sortiPin1 = 12; 

unsigned long t0,t1; // pour mémoriser les timers

void setup()
{

 pinMode(sortiPin1, OUTPUT);      // sets the digital pin as output

 
  }
  
  
 void loop()
{
   t0=millis(); // mémorise le temps actuel
  
    if (t0>t1) { tone(sortiPin1, 3350, 200); t1+=1000;} // génère un bip de 200ms toutes les 1000ms

   
}

ici avec millis tu fais un bit toutes les secondes il te suffit de faire le même genre pour la sortie sortiPin2 mais avec 4000000ms

Merci pour tout,
les impulsions son et bien cadencé, pour la fonction extinction c’est pas ça, les programmes mis séparément fonctionne, mais assemblé c’est la cata. Il sufi de repensé la chose en fonction du besoin, étant donné que l’alimentation est composé d’un empilage d’accu litions, il est plus que souhaitable d’avoir une mise en sommeil en fonction de la tension minimal à ne pas dépassé. Un diviseur de tension sur A0 pour que si la tension de 24volt passe à 19 volts le relais ne soit alimenté par D1 par exemple