Go Down

Topic: Gestion du FapDan's (Read 187 times) previous topic - next topic

djbouns

Bonjour,

Je vous présente ici le FapDan's V2.
Il s'agit d'un filtre a papier imprimé en 3D pour aquarium.

Vous pouvez trouver toute les infos et un tuto de montage ici

Et voici la partie code :

Code: [Select]
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Déclarations $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
const byte relais = A0; // pin du relais
const byte ledVerte = 2; // pin de la led verte
const byte ledRouge = 3; // pin de la led rouge
const byte flotteur = 4; // pin du flotteur
const byte bouton = 5; // pin du bouton
enum {systemOff, systemOnMoteurOff, systemOnMoteurOn, systemOn} etatDuSystem;
enum {flotteurBas, flotteurHaut, boutonOn, boutonOff} declencheur;

const uint16_t delaisFlotteurHaut = 500u; // delais avant mise en route du moteur 1/2 se
const uint16_t delaisMaxFlotteurHaut = 2500u; // delais max avant de stoper moteur 2.5 sec
uint32_t compteurFlotteur = 0; // pour stocker le compteur flotteur
const uint16_t delaisBouton = 1500u; // delais dactivation du bouton 1.5 sec
const uint32_t delaisFinDeRlx = 60000ul; // delais durant le quel les declanchement son comptés , pour detécter la fin de rouleau 15 sec
const uint8_t declenchementMaxFinDeRlx = 3; // 3 declenchements
uint8_t declenchementRlx =  0; // pour stocker les declenchements
uint32_t compteurDeclenchement = 0; // pour stocker le compteur declenchement
uint32_t compteurBouton = 0; // pour stocker le compteur bouton

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Debug $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#define DEBUG // à commenter pour enlever le debug
#ifdef DEBUG
#define DebugPrintLN(x)  {Serial.println(x);}
#else
#define DebugPrintLN(x)
#endif

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Fonctions $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void actionDeclencheur() {
  switch (declencheur) {
    case flotteurBas:
      etatDuSystem = systemOnMoteurOff;
      DebugPrintLN("flotteur bas = moteur off"); // debug
      actionEtatDuSystem();
      break;
    case flotteurHaut:
      compteurFlotteur = millis();
      DebugPrintLN("flotteur haut on lance le timer"); // debug
      break;
    case boutonOn:
      compteurBouton = millis(); // stock le timer
      DebugPrintLN("bouton On on lance le timer"); // debug
      break;
  }
}

void actionEtatDuSystem() {
  switch (etatDuSystem) {
    case systemOff:
      digitalWrite(relais, LOW); // relais off
      digitalWrite(ledRouge, HIGH); // led rouge on
      digitalWrite(ledVerte, LOW); // led verte off
      DebugPrintLN("systeme off = relais off / rouge on / vert off"); // debug
      break;
    case  systemOnMoteurOff:
      digitalWrite(relais, LOW); // relais off
      digitalWrite(ledRouge, LOW); // led rouge off
      digitalWrite(ledVerte, HIGH); // led verte on
      DebugPrintLN("moteur off = relais off / rouge off / vert on"); // debug
      if (declenchementRlx != 0) {
        for (uint8_t cligonote = 1; cligonote <= declenchementRlx; cligonote++) {
          digitalWrite(ledRouge, HIGH); // led rouge on
          delay(250);
          digitalWrite(ledRouge, LOW); // led rouge off
          delay(250);
          DebugPrintLN("on clignote"); // debug
        }
      }
      break;
    case  systemOnMoteurOn:
      if (declencheur == boutonOn || (millis() - compteurDeclenchement > delaisFinDeRlx)) {// si le flotteur est de nouveau en position haute pendant
        declenchementRlx = 0;
        DebugPrintLN("compteur = 0"); // debug
      }
      else {
        declenchementRlx++; // incremente le compteur de declenchement
        DebugPrintLN("compteur +1"); // debug
      }
      if (declenchementRlx < declenchementMaxFinDeRlx) {
        digitalWrite(relais, HIGH); // relais on = moteur on
        digitalWrite(ledRouge, LOW); // led rouge off
        digitalWrite(ledVerte, HIGH); // led verte on
        DebugPrintLN("moteur on = relais on / rouge off / vert on"); // debug
        compteurDeclenchement = millis(); // stock le timer
        DebugPrintLN("lance le timer de declenchement"); // debug
      }
      break;
  }
}

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Setup $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void setup() {
  Serial.begin(115200);
  pinMode(ledRouge, OUTPUT); // configure le pin en sortie
  pinMode(ledVerte, OUTPUT); // configure le pin en sortie
  pinMode(relais, OUTPUT); // configure le pin en sortie
  pinMode(flotteur, INPUT_PULLUP); // configure le pin en entre en mode pullup
  pinMode(bouton, INPUT_PULLUP); // configure le pin en entre en mode pullup
  for (uint8_t clignote = 0; clignote < 10; clignote++) {
    digitalWrite(ledVerte, HIGH); // led verte on
    digitalWrite(ledRouge, LOW); // led verte on
    delay (50);
    digitalWrite(ledRouge, HIGH); // led verte on
    digitalWrite(ledVerte, LOW); // led verte on
    delay (50);
  }
  etatDuSystem = systemOn;
  declencheur = boutonOff;
}

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Loop $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void loop() {
  if (digitalRead (bouton) == LOW) { // si bouton active
    if (declencheur != boutonOn) {
      declencheur = boutonOn;
      DebugPrintLN("bouton On"); // debug
      actionDeclencheur();
    }
    else if ((millis() - compteurBouton) > delaisBouton) { // si bouton active plus longtemps que delaisBouton
      if (etatDuSystem != systemOnMoteurOn) {
        etatDuSystem = systemOnMoteurOn;
        DebugPrintLN("delais bouton depassé"); // debug
        actionEtatDuSystem();
      }
    }
  }
  else {
    if (declencheur == boutonOn) {
      declencheur = boutonOff;
      DebugPrintLN("bouton off"); // debug
    }
    if (etatDuSystem != systemOff) {
      if (digitalRead (flotteur) == LOW) { // si flotteur haut
        if (declencheur != flotteurHaut) {
          declencheur = flotteurHaut;
          DebugPrintLN("flotteur haut"); // debug
          actionDeclencheur();
        }
        else if (delaisMaxFlotteurHaut < millis() - compteurFlotteur || declenchementRlx >= declenchementMaxFinDeRlx) { // si flotteur declencher plus longtemps que le delaismaxflotteurhaut
          if (etatDuSystem != systemOff) {
            etatDuSystem = systemOff;
            DebugPrintLN("systeme off"); // debug
            actionEtatDuSystem();
          }
        }
        else if (millis() - compteurFlotteur > delaisFlotteurHaut ) { // si flotteur declencher plus longtemps que delaisflotteurhaut
          if (etatDuSystem != systemOnMoteurOn) {
            etatDuSystem = systemOnMoteurOn;
            DebugPrintLN("delais flotteur haut depassé"); // debug
            actionEtatDuSystem();
          }
        }
      }
      else {
        if (declencheur != flotteurBas) {
          declencheur = flotteurBas;
          DebugPrintLN("flotteur bas"); // debug
          actionDeclencheur();
        }
      }
    }
  }
}


a bientot

Go Up