# Contrôler les entrées de extension opta avec IDE

**URL:** <https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747>\
**Category:** Français\
**Created:** [July 24, 2025, 12:48pm UTC](https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747 "2025-07-24T12:48:12Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![gabrielcirad](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gabrielcirad/32/1113232_2.png) [@gabrielcirad](https://forum.arduino.cc/u/gabrielcirad)\
**Post date:** [July 24, 2025, 12:48pm UTC](https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747/1 "2025-07-24T12:48:12Z")

</div>

Je suis sur arduino IDE et je cherche à contrôlé les entrées de mon extension numérique de ma OPTA pour les faire passer à 1 ou 0, avez-vous un code pour IDE à me proposer. Merci d'avance !

---

<div class="post-metadata">

**Author:** ![jpbbricole](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jpbbricole/32/606025_2.png) [@jpbbricole](https://forum.arduino.cc/u/jpbbricole)\
**Post date:** [July 24, 2025, 2:35pm UTC](https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747/2 "2025-07-24T14:35:57Z")

</div>

Bonjour gabrielcirad

Dans l'IDE Arduino, si tu sélectionnes un Opta:  
 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/c/c/1/cc11615b667f1704726c540f3f1fa4635ae06fc4.png)  
Enesuite tu va dans:

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/5/0/e/50ea378b7705bdbd7a149c5d98eedf7f57f440b5.png)  
Tu as les exemples de base (en jaune), regardes `01 Basic/Blink` pour faire osciller une broche entre 1 et 0.

En dessous du vert tu as des exemples propres à l'Opta.

Cordialement  
jpbbricole

---

<div class="post-metadata">

**Author:** ![68tjs](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/68tjs/32/927374_2.png) [@68tjs](https://forum.arduino.cc/u/68tjs)\
**Post date:** [July 24, 2025, 3:58pm UTC](https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747/3 "2025-07-24T15:58:22Z")

</div>

> [@gabrielcirad](#):
>
> Je suis sur arduino IDE et je cherche à contrôlé les entrées de mon extension numérique de ma OPTA pour les faire passer à 1 ou 0, avez-vous un code pour IDE à me proposer. Merci d'avance !

Tu fais comme tu le sens. A mon très humble avis, il me semble qu'avant de commencer avec un Opta, il serait plus sage de prendre une Uno, ou mieux une nano + breadboard + fils dupont, + kit de leds + résistance entre 570 et 400 ohms, le tout sur aliexpress (à moins que tu ne veuilles payer le même matériel 5 fois plus cher en boutique) et de t'entrainer avec les tutos d'Eskimon : [eskimon.fr](http://eskimon.fr)

Ces tutos, en français, sont très didactiques et traitent aussi bien de programmation que du matériel.

Une fois quelques tuto de réalisés, tu verra que tout sera plus simple.

Avant de monter le mur, on coule des fondations solides.

Encore une fois, c'est toi qui décide.

---

<div class="post-metadata">

**Author:** ![thism1](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/thism1/32/1126942_2.png) [@thism1](https://forum.arduino.cc/u/thism1)\
**Post date:** [July 24, 2025, 4:14pm UTC](https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747/4 "2025-07-24T16:14:27Z")

</div>

Salut Gabriel, tu as de la chance j'ai bossé la dessus il y a quelques semaines. Je peux te passer un bout de mon code si tu veux pour que tu essaie de comprendre comment ça marche. Attention à bien importer toutes les bibliothèques nécessaires.

Je ne te garantie pas que tout marche du premier coup. J'ai supprimer pas mal de passage pour clarifier un peu mais je n'ai pas eu le temps de le tester.

```arduino
/*
  Séquenceur de relais pour Arduino Opta
  — Extension Digital Mech Expansion n°0
  — Un seul relais actif à la fois, changement toutes les 3 s
*/

#include <Wire.h>
#include "OptaBlue.h"
using namespace Opta;

/* --- Constantes --- */
constexpr uint8_t RELAY_COUNT = 6; // canaux 0-5

/* --- Fonctions utilitaires --- */
void setRelay(uint8_t onId) {
  DigitalMechExpansion ext0 = OptaController.getExpansion(0);
  if (!ext0) return; // sécurité : extension absente
  for (uint8_t i = 0; i < RELAY_COUNT; ++i) {
    ext0.digitalWrite(i, (i == onId) ? HIGH : LOW);
  }
  ext0.updateDigitalOutputs(); // pousse l’état vers l’extension
}

/* --- Setup --- */
void setup() {
  Serial.begin(9600);
  Wire.begin(); // I²C interne Opta ↔ expansion
  OptaController.begin();

  // Tous les relais à OFF au boot
  DigitalExpansion::setDefault(
      OptaController, 0,
      DigitalExpansion::calcDefault(false,false,false,false,false,false,false,false),
      3000); // délai anti-rebond interne (ms)

  setRelay(0); // démarre sur le premier relais
}

/* --- Boucle principale --- */
void loop() {
  static uint8_t current = 0; // relais en cours (0-5)
  static unsigned long lastSwitch = 0;

  if (millis() - lastSwitch >= 3000UL) { // 3 s écoulées ?
    lastSwitch = millis();
    current = (current + 1) % RELAY_COUNT; // prochain relais
    setRelay(current);
    Serial.print("Relay "); Serial.print(current); Serial.println(" ON");
  }

  OptaController.update(); // garde l’extension synchronisée
}

```

---

<div class="post-metadata">

**Author:** ![gabrielcirad](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gabrielcirad/32/1113232_2.png) [@gabrielcirad](https://forum.arduino.cc/u/gabrielcirad)\
**Post date:** [July 25, 2025, 1:03pm UTC](https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747/5 "2025-07-25T13:03:08Z")

</div>

Ok j'ai le code suivant pour l'instant ,j'allume une led a chaque fois pour vérifier que l'entrée est bien dans son état, mais quand je met l'entrée en HIGH (j'injecte du 24V) la led ne s'éteint pas comme je l'ai mis dans le code, je ne comprend pas ? :

````arduino

using namespace Opta;

void setup() {

  Serial.begin(9600);
  delay(2000);

  // Initialisation du contrôleur Opta et des extensions
  OptaController.begin();
  Serial.println("Modules détectés : ");
  Serial.println(OptaController.getExpansionNum());

  // Configuration des LEDs en sortie
  pinMode(LED_D0, OUTPUT);
  pinMode(LED_D1, OUTPUT);
}

void loop() {
  // Accès au module d’expansion numéro 0
  DigitalMechExpansion mechExp = OptaController.getExpansion(0);

  // Mettre à jour les états d’entrées
  mechExp.updateDigitalInputs();

  // ----- Entrée 0 -----
  PinStatus in0 = mechExp.digitalRead(0);

  if (in0 == HIGH) {

    mechExp.digitalWrite(0, LOW);
    digitalWrite(LED_D0, LOW); // Éteindre LED_D0
    Serial.println("Entrée 0 = 1 → Sortie 0 = HIGH");
  } else if(in0 == LOW) {

    mechExp.digitalWrite(0, HIGH);
    digitalWrite(LED_D0, HIGH); // Allumer LED_D0
    Serial.println("Entrée 0 = 0 → Sortie 0 = LOW");
  }

  // ----- Entrée 1 -----

  PinStatus in1 = mechExp.digitalRead(1);
  if (in1 == HIGH) {

    digitalWrite(LED_D1, LOW); // Éteindre LED_D1
    Serial.println("Entrée 1 = 1 → Sortie 1 = HIGH");

  } else if(in1 == LOW) {

    digitalWrite(LED_D1, HIGH); // Allumer LED_D1
    Serial.println("Entrée 1 = 0 → Sortie 1 = LOW");
  }

  // Appliquer les changements sur les sorties
  mechExp.updateDigitalOutputs();

  delay(1000);
}```
````

---

<div class="post-metadata">

**Author:** ![thism1](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/thism1/32/1126942_2.png) [@thism1](https://forum.arduino.cc/u/thism1)\
**Post date:** [July 31, 2025, 8:24am UTC](https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747/6 "2025-07-31T08:24:34Z")

</div>

Salut gabriel, tu peux essayer ca, il y a des chances que ça marche :

```arduino
`/*
  Opta + Digital Mech Expansion
  — Lecture des entrées I0 et I1
  — Miroir sur LED_D0 / LED_D1
  — Inversion de la sortie O0 quand I0 est à 0 V
  Auteur : ChatGPT (31 juillet 2025)
*/

#include <Opta.h> // Bibliothèque officielle Opta™
using namespace Opta;

DigitalMechExpansion mechExp; // Déclaration globale pour clarté

void setup() {
  Serial.begin(9600);
  delay(2000); // Laisser l’USB s’initialiser

  // ------------ Initialisation Opta ------------
  OptaController.begin();
  Serial.print("Nombre d’extensions détectées : ");
  Serial.println(OptaController.getExpansionNum());

  // On cible l’extension n°0 (la première sur le bus)
  mechExp = OptaController.getExpansion(0);

  // ------------ Configuration des sorties locales ------------
  pinMode(LED_D0, OUTPUT);
  pinMode(LED_D1, OUTPUT);

  // ------------ État initial ------------
  digitalWrite(LED_D0, LOW);
  digitalWrite(LED_D1, LOW);
  mechExp.digitalWrite(0, LOW); // Assure sortie O0 à 0 V
  mechExp.updateDigitalOutputs(); // Push initial
}

void loop() {

  /* 1. Lecture des valeurs acquises au cycle précédent */
  PinStatus in0 = mechExp.digitalRead(0); // I0
  PinStatus in1 = mechExp.digitalRead(1); // I1

  /* 2. Traitement & action -------------------------------- */
  // LED_D0/LED_D1 ON quand l’entrée correspondante vaut 0 V
  digitalWrite(LED_D0, (in0 == HIGH) ? LOW : HIGH);
  digitalWrite(LED_D1, (in1 == HIGH) ? LOW : HIGH);

  // Sortie O0 = inverse logique de I0
  mechExp.digitalWrite(0, (in0 == HIGH) ? LOW : HIGH);

  // Propager les sorties immédiatement
  mechExp.updateDigitalOutputs();

  /* 3. Préparer le prochain tour ------------------------- */
  mechExp.updateDigitalInputs(); // Lance l’échantillonnage I²C

  /* 4. Debug série facultatif ---------------------------- */
  Serial.print("I0=");
  Serial.print(in0 == HIGH ? "HIGH" : "LOW");
  Serial.print(" | I1=");
  Serial.println(in1 == HIGH ? "HIGH" : "LOW");

  delay(100); // 10 Hz de rafraîchissement ≈ suffisant
}
`

```

Merci d'IA 😉

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [January 27, 2026, 8:24am UTC](https://forum.arduino.cc/t/controler-les-entrees-de-extension-opta-avec-ide/1397747/7 "2026-01-27T08:24:50Z")

</div>

Closed on January 27, 2026, 8:24am UTC

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
