Plusieurs tâches dans le loop ?

Bonsoir,

Je cherche dans une boucle principal pour à tester plusieurs valeurs en même temps:
la valeur d'un capteur d'empreinte digital (finger...), d'un keypad (alarm, pave_num()) et d'un capteur d'effort (scale.getGram() qui teste en gramme un effort)
Si le capteur d'empreinte et pavé numérique sont ok j'active l'ouverture de vérin (pas de soucis)
Mais dès que j'ajoute while(scale.getGram() >= 15 (kg) ) mon capteur d'empreinte ralenti et j'ai du mal a rentrer le mot de passe sur le pavé numérique...
Du coup je voudrais exécuter ces deux conditions en "même temps".

void loop()
{

fingerprintID = getFingerprintIDez();
alarm = pave_num()

if (finger.fingerID == 1 and alarm == 0)
{
Serial.println("DEVEROUILLAGE MALLETTE");
verin_S();
delay(1000);
verin_R();
}

while (scale.getGram() >= 15)
{
pompe();
}

}

Merci d'avance :wink:

Ce morceau de code est bloquant. Tant que la condition n'est pas remplie le programme reste dans la boucle

  while (scale.getGram() >= 15)
    {
        pompe();
    }

Si aucune des autres fonctions appelées dans loop() n'est bloquantes et si leur timing le permet le plus simple serait peut-être de remplacer la boucle while par un if

if (scale.getGram() >= 15)
    {
        pompe();
    }

Il ne faut pas perdre de vue que loop est une boucle infinie donc, si comme je le disais au-dessus aucune des autres fonctions appelées n'est bloquantes, tu vas passer très souvent sur le if et la fonction devrait se dérouler comme précédemment mais sans ralentir la saisie au clavier.

Je comprend je viens de changer la condition.
Cependant le timing semble toujours difficile…
En effet, la boucle loop() comme tu l’as précisé déroule toute les instructions à l’infinie. Dans ce cas-ci, lorsque j’éxecute le programme pour tester le pavé numérique il voit que sa valeur est incorrecte dont loop passe directement au teste de scale.getGram().
Sachant que le pavé numérique ET le capteur d’empreinte doivent avoir leurs valeurs correcte en un temps donné, le timing est ultra serré…
N’y a-t-il pas un moyen / fonction / méthode ou autre pour que deux tests distincts s’effectuent de manière indépendantes ?

Bonjour,
Envisager une programmation par "machines à états" ?
Voir Programmation Automate fini / Machine à état - Tutoriels et cours - Arduino Forum

charpi_:
Sachant que le pavé numérique ET le capteur d'empreinte doivent avoir leurs valeurs correcte en un temps donné, le timing est ultra serré...
N'y a-t-il pas un moyen / fonction / méthode ou autre pour que deux tests distincts s'effectuent de manière indépendantes ?

indépendantes??
Le code s'exécute de manière séquentielle. Si les fonctions que tu appelles s'exécutent dans un temps raisonnable la boucle sera fluide. Maintenant, si tu as prévu un timing trop serré et incompatible de la durée d'exécution de chacun des sous-ensembles il va falloir adapter tes contraintes.

As-tu chiffré le temps d'exécution de chacune des fonctions appelées?