executer une commande piloté par une entrée 5v

bonjour à tous,

j'ai crée une box domotique simple pour commander mes volets roulants (arduino + relais + module bluetooth)

j'ai créer plusieurs scénario que je pilote via mon app android en bluetooth.

je voudrais faire évoluer mon code pour automatisé mes scénario

Je souhaiterai envoyer un commande 5v via une entrée de mon arduino pour qu'il exécute une partie du code (l'entrée fonctionnerait sur le principe 0 ou 1 (0= 0V pas D'exécution 1= 5V exécution d'une partie du code)

Pouvez vous m'aider car malgré plusieurs tentatives je n'ai pas trouvé la solution à ce problème pourtant simple

je voudrais par exemple utilisé la pin 3 comme entrée pour faire executer la fermetureVoletNuit

voici une partie de mon code

"

int RelaiVoletNuitClose = 5; // Pin 5 arduino commande le relais Volet partie NUIT en FERMETURE

int state = 0; // Etat de la commande au repos= 0 ne fait rien ex: State == '1' > ouverture des volets partie jour

const int ON=LOW; // Etat du relais ON = LOW = non alimenté = relais ouvert const int OFF=HIGH; // Etat du relais OFF = HIGH = alimenté 5v = relais fermé

void setup() {

pinMode(RelaiVoletNuitClose, OUTPUT); // PinRelaiVoletJourOuestClose (5) = sortie

//Serial.print("");

Serial.begin(9600); // vitesse de communication avec port serie = 9600 bit

}

void loop() {

digitalWrite(RelaiVoletNuitClose, OFF); // Pin 5 OFF

{ if(Serial.available()>0) // si commande serie supérieur à 0 { state = Serial.read (); // lire la commande

}

if (state == '4') // si la commande == '4' = Ferme les volets partie Nuit {

digitalWrite(RelaiVoletNuitClose, ON); delay(500); state = 0; digitalWrite(RelaiVoletNuitClose, OFF); delay(500); state = 0; Serial.print("Volets Partie Nuit fermes / "); }

Merci pour votre aide;

Il faut faire un test sur l'état de la broche 3, configurée en INPUT.

Avec un if() par exemple.

Dans un if, on peut mettre plusieurs conditions. Ainsi, ton code

if (state == '4') // si la commande == '4' = Ferme les volets partie Nuit

peut devenir

if ((state == '4') || digitalRead(monEntreeExterne)) // si la commande == '4' ou que l'entrée externe est à 1 = Ferme les volets partie Nuit

bonjour merci pour ce retour rapide après test digiRead() n'ai pas reconnu comme commande fdufnews tu veux dire digitalRead?

Yep!! J'ai envoyé trop vite. C'est corrigé.

digitalread est reconnu comme commande mais quand je l’inclue dans mon code

int RelaiVoletJourNordOpen = 12;
int RelaiVoletJourNordClose = 11; 
 
int RelaiVoletJourEstOpen = 10; 
int RelaiVoletJourEstClose = 9; 
int RelaiVoletJourOuestOpen = 8;
int RelaiVoletJourOuestClose = 7;

int RelaiVoletNuitOpen = 6;
int RelaiVoletNuitClose = 5;
int Alarme = 2; // 5v si alarme armée

int state = 0;


const int ON=LOW;
const int OFF=HIGH; 


void setup() {
 
   
  pinMode(RelaiVoletJourNordOpen, OUTPUT);
  pinMode(RelaiVoletJourNordClose, OUTPUT); 
  
  pinMode(RelaiVoletJourEstOpen, OUTPUT);
  pinMode(RelaiVoletJourEstClose, OUTPUT);

  pinMode(RelaiVoletJourOuestOpen, OUTPUT);
  pinMode(RelaiVoletJourOuestClose, OUTPUT);

  pinMode(RelaiVoletNuitOpen, OUTPUT); 
  pinMode(RelaiVoletNuitClose, OUTPUT);

  pinMode(Alarme, INPUT);

  
  //Serial.print("");
  
Serial.begin(9600); // vitesse de communication avec port serie = 9600 bit

}

void loop() 
{
  digitalWrite(RelaiVoletJourNordOpen, OFF);
  digitalWrite(RelaiVoletJourNordClose, OFF); 
  digitalWrite(RelaiVoletJourEstOpen, OFF);
  digitalWrite(RelaiVoletJourEstClose, OFF);
  digitalWrite(RelaiVoletJourOuestOpen, OFF);
  digitalWrite(RelaiVoletJourOuestClose, OFF);
  digitalWrite(RelaiVoletNuitOpen, OFF); 
  digitalWrite(RelaiVoletNuitClose, OFF);

  digitalWrite(Alarme, OFF);

 
  {  
    if(Serial.available()>0)
      {
        state = Serial.read ();
     
      }

if ((state == '1') || digitalRead(Alarme))
    {
       
      
    digitalWrite(RelaiVoletJourNordClose, ON);
    digitalWrite(RelaiVoletJourEstClose, ON);
    digitalWrite(RelaiVoletJourOuestClose, ON);
    digitalWrite(RelaiVoletNuitClose, ON);
      delay(500);
      state = 0;

    digitalWrite(RelaiVoletJourNordClose, OFF);
    digitalWrite(RelaiVoletJourEstClose, OFF);
    digitalWrite(RelaiVoletJourOuestClose, OFF);
    digitalWrite(RelaiVoletNuitClose, OFF);
      delay(500);
      state = 0;
      Serial.print("Ouverture de tout les volets / ");

le programme tourne en boucle alors que mon entrée 5V externe n’est même pas connectée sur la pin 2

je suppose donc que la carte l’alimente d’elle même. Au multi j’ai bien du 5v sur la pin 2 dés que l’arduino est ON.

donc 2 questions; comment faire pour:

ne pas avoir ces 5v sur la pin 2 au repos?

que le programme exécute une seule fois la commande même si le 5V externe alimente la pin 2 en continu, mais aussi que le programme ré-exécute la commande quand la pin 2 repasse par 0v puis 5v.

K1rou:
mon entrée 5V externe n’est même pas connectée sur la pin 2

Si l’entrée n’est connectée à rien, elle est dans un état indéterminé. Elle peut donc être vue à 0 ou à 1 dans le programme.

  • on ne laisse jamais une entrée en l’air car on ne sait pas dans quel état elle va se trouver
  • si on la connecte à un équipement qui ne fixe qu’un état (comme un interrupteur qui ne connecte la broche à la masse que lorsqu’il est fermé par exemple) on utilise une résistance de pullup qui va fixer l’état de cette entrée par défaut. Le pullup peut-être une résistance de valeur assez élevée connectée d’un coté au +5V et de l’autre à l’entrée. On peut aussi utiliser les pullups intégrés dans les entrées du processeur

j ai pas tout saisi mais mon but est:

j'ai une alarme qui une fois enclenché délivre du 5v sur une sortie. Le but était de récupérer ce signal 5v et l'envoyer sur une pin de l'arduino pour qu'il exécute une commande quand la pin en question est alimenté. (en l'occurrence la fermeture de mes volets déjà programmée)

hello
rajoute une résistance de 4.7K entre l’entrée D2 et GND

l’entrée D2 sera ainsi fixée à 0V et lorsque que ton alarme amènera le 5 V, c’est lui qui s’imposera sur l’entrée