Bonjour tous,
petit message car impossible avec mes compétences actuelles d'arriver a mon besoin....
Voila j'ai le montage suivant :
un Arduino et composants annexe, 2 optocoupleur 4 voies, 3 relais et le prog suivant :
je souhaite maintenant rajouter 2 sorties relais R2 et R3 en plus de R1 (existant et cette partie fonctionne nickel).
Fonctionnement de cette nouvelle sortie Relais R2
passage a "Low" si relais R1 reviens a "low" et ensuite a "Hight" avec temporisation modifiable (env. 30 secondes) avec un départ de cette tempo quand R1 repasse a "Hight"
Fonctionnement de cette nouvelle sortie Relais R3
idem R2 mais avec temporisation différente (env. 60 secondes).
La rédaction de votre message ne répond pas aux critères attendus. Il n'aura sans doute pas de réponse tant que vous n'aurez pas pris en compte et mis en application les recommandations listées dans "Les bonnes pratiques du Forum Francophone”
le double post n'est pas autorisé. Les 2 fils ont été fusionnés et l'autre fil clos.
sélectionner la partie du texte qui correspond au code
appuyez sur l'icône </> dans la barre d'outils pour indiquer que c'est du code
(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)
Si vous décriviez le câblage et l'alimentation ce serait bien aussi... un petit schéma à la main posté ici c'est bien aussi
Merci
pour plus de détails:
en fait les 7 entrées sont des sorties d'opto coupleurs
ce montage est en fait une simple fonction "ET" > quand toutes les valeurs sont présentes au niveau des opto coupleur cela fait coller le relais R1 (prog initial qui fonctionne nickel) a cela je souhaite rajouter les 2 sorties relais R2 et R3 selon mon descriptif.
Si les 7 optocoupleurs, c'est à dire à collecteur ouvert, sont reliés à la bobine du relai ce n'est pas un ET, mais un OU matériel pour le relais (certains diront hardware).
Si les 7 sorties optocoupleur sont reliées chacune à une entrée du micro, c'est le code qui fait la logique.
Voici une idée de code, peut être pas la plus simple, ni la plus propre, mais je pense que ça fonctionne, a tester, car je n'ai pas de matériel, ce matin sous la main.
unsigned long tempo;
unsigned long valeur_tempo = 30000ul;
bool status = false;
et de donner des petits noms aux pins (const byte ....)
il faut éviter de faire if (tempo + valeur_tempo < millis()) {
à cause du rollover de millis() dans 50 jours. On écrit if (millis() - tempo < valeur_tempo ) {
ensuite j'ai pas regardé si ça correspond au cahier des charges initial. Moi je ferai une petite machine à état (cf mon tuto éventuellement)
@J-M-L Pour ma part et par soucis de gain de RAM, j'utilise un int et non un long, qui certes est moins cohérent, mais comme dans les projets, je suis toujours trop juste en mémoire ..
Pour le reste, 100 % d'accord avec ton analyse , j'aime utiliser des #define pour mes pins.
Les define ne sont pas typés ce sont donc des int, vaut mieux mettre des const byte qui seront garantis au pire de prendre qu’un seul octet. (Généralement l’optimiseur va virer la constante)
En effet, je retiens ta remarque sur le unsigned int
Par contre, je pense que #define relais1 6 n'est utilisé que par le compilateur et donc n'utilise pas de mémoire, mais c'est a vérifier !
Oui le define sera remplacé tel quel dans le code donc si vous faites un print() de cette valeur c’est un int qui sera mis en paramètre, soit 2 ou 4 octets sur la stack. Si vous avez déclaré un byte, le compilateur voit que c’est une constante sur un octet en ne passera qu’un octet.
Si vous ne faites qu’un pinMode, comme la fonction n’attend qu’un seul octet le compilateur va être smart et ne prendra que la partie basse de l’int de votre define donc la pas de perte de place, comme avec le const byte ou l’optimiseur va injecter directement la valeur dans l’appel de fonction.
D’une manière générale plus vous aidez le compilateur à faire des choix éclairés, plus le code sera optimisé. Il vaut mieux conserver les defines que pour les directives de compilation