Programmation pour un système de gestion de relais avec port serie

Bonjours a tous,
je viens sur cette page aujourd'hui car j'ai casser une carte me permettant de controler avec mon pc 2 ampoules 230v et une machine a fumee via des relais
ainsi j'ai realiser les branchements sur un module relais connecter a une arduino uno
j'aimerai controler ces elements via le port serie
J'arrive a controler les ampoules via une lettre deffinissant l'alumage/extinction mais pour la machine a fumée, il faut qu'elle se mette en fonction lorsque je lui envoye la lettre E et s'eteigne lorsque j'envoie F
Mon probleme est que la machine a fumee, lorsq de la reception de la commande doit s'allumer deux seconde toutes les dix secondes jusqu'a arret via F*

Je galere fort .....
desolé pour les fautes je n'ai que 13 ans :smiley:
voici mon prototype de code

void setup()
{
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(5, OUTPUT);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);
  digitalWrite(5, LOW);
}

void loop()
{
  while (Serial.available() != 0)
  {
    switch (Serial.read())
    {
      case 'A':
        digitalWrite(5, LOW);
        break;
      case 'B':
        digitalWrite(5, HIGH);
        break;
      case 'C':
        digitalWrite(6, LOW);
        break;
      case 'D':
        digitalWrite(6, HIGH);
        break;

      if (case 'E'): {
          digitalWrite(7, LOW);
          delay(1000);
          digitalWrite(7, HIGH);
          delay(1000);
        }
      if ( case 'F'): {
          digitalWrite(7, LOW);
        }
    }

cela doit etre fait pour ce soir :confused:
merci de votre aide a tous

Beaucoup d’erreurs dans ce code.
En particulier :

      if ( case 'F'): {

Essaie ça:

#include <MsTimer2.h>

void setup()
{
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(5, OUTPUT);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);
  digitalWrite(5, LOW);
}

int smokeState;

void InterruptTimer2()
{
  if (smokeState < 2) {
    Serial.println("FUMEE ON");
    digitalWrite(7, HIGH);
  }
  else {
    Serial.println("FUMEE OFF");
    digitalWrite(7, LOW);
  }
  smokeState++;
  if (smokeState == 10) {
    smokeState = 0;
  }
}

void loop()
{
  while (Serial.available() != 0)
  {
    switch (Serial.read())
    {
      case 'A':
        Serial.println("LAMPE 1 ON");
        digitalWrite(5, LOW);
        break;
      case 'B':
        Serial.println("LAMPE 1 OFF");
        digitalWrite(5, HIGH);
        break;
      case 'C':
        Serial.println("LAMPE 2 ON");
        digitalWrite(6, LOW);
        break;
      case 'D':
        Serial.println("LAMPE 2 OFF");
        digitalWrite(6, HIGH);
        break;
      case 'E':
        Serial.println("FUMEE ON");
        smokeState = 1;
        digitalWrite(7, HIGH);
        MsTimer2::set(1000, InterruptTimer2); // période 1s
        MsTimer2::start(); // active Timer2
        break;
      case 'F':
        Serial.println("FUMEE OFF");
        digitalWrite(7, LOW);
        MsTimer2::stop(); // desactive Timer2
        break;
      default:
        break;
    }
  }
}

je sais mais je debute
j'essaye ca de suite et je vous dis quoi
merci de votre disponibilité

Alors je viens d’essayer mais il me met une erreur de compilation
peut etre le programme appel t il une bibliotheque que je n 'ai pas (#include <MsTimer2.h>)

Dézippe cette archive dans ton répertoire libraries :
https://github.com/PaulStoffregen/MsTimer2/archive/master.zip

alors
je viens d'installer la bibliotheque - j'arrive a e compiler
mais je ne parviens pas a controller les lampes et la machine a fumee fonctionne pendant dix secondes avec une pause de deux secondes au lieu de l'inverse ... j'aimerai corriger ce probleme moi meme mais le code m'st assez dur a comprendre
Merci d'aance

Bonjour,
il y a (au moins) 2 façons d'aborder le problème :

  • soit tu fais l'inverse, comme tu le dis
  • ou bien, tu considères que pendant la période de 10 secondes, ce qui se passe pendant 2 secondes devrait en fait durer 8 secondes : plus qu'à trouver le 2 dans le code de hbachetti et le remplacer par un 8

Dans ton code, tu arrêtais la fumée - touche F - comme ceci :

   digitalWrite(7, LOW);

J'en ai déduit que pour la mettre en route il fallait écrire :

   digitalWrite(7, HIGH);

Je ne connais pas ton câblage.
Donc remplace LOW par HIGH et HIGH par LOW pour la fumée si ça marche à l'envers.
Lignes 20, 24 et 57.

Quant aux lampes, cela marche peut-être aussi à l'envers. Fais la même chose.

############ EDIT ############
Je viens de charger ce code dans une NANO.
Quand j'envoie 'A' la pin 5 est à 0V
Quand j'envoie 'B' la pin 5 est à 5V
Quand j'envoie 'C' la pin 6 est à 0V
Quand j'envoie 'D' la pin 6 est à 5V

@+

bon j'ai reussi a resoudre tout les problemes sauf 1
lorsque j'entre F le systeme de timer s'arrete mais du coup la machine genere de la fumee en continue !?

Dans le case 'F', remet la pin 7 dans le même état que dans le setup.