Go Down

Topic: 2 fonctions pour faire des fronts montant et descendant sur vos entrées arduino (Read 2567 times) previous topic - next topic

megatrix

Bonjour Tout le monde !

Je suis tout nouveau dans le monde de l'arduino et du langage C.
j'avais quelques applis que je voulais réaliser et je voulais un moyen simple d'appeler des fronts montant ou descendant sur mes entrées.
Donc je partage.

Vos commentaires sont les bienvenu.

Bon code....





Code: [Select]
//_________________________________________________________Variables de Front Déscendant jusqu'a 15 entrées pour l'exemple
boolean BPdes_Last_Eta[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
boolean BPdes_New_Eta[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
boolean BPdes_Up_Down[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//_________________________________________________________Variables de Front Montant jusqu'a 15 entrées pour l'exemple
boolean BPmont_Last_Eta[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
boolean BPmont_New_Eta[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
boolean BPmont_Up_Down[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

//_________________________________________________________Variable d'entrées et sorties
const int BP8 = 8;  //Entrée Pin8 D8 pour exemple

//_________________________________________________________Compteur pour l'exemple
int Compteur_Front_M=0;
int Compteur_Front_D=0;

//################################################################Setup
void setup() {
    Serial.begin(9600);   //Démarrage du port série
    pinMode(BP8, INPUT);  //Déclaration BP8
}
//################################################################Loop
void loop() {
   
    if (Front_M(BP8)==1)    //test si on a un front montant sur le BP8
    {
        Compteur_Front_M++;
        Serial.print("Font Montant: ");
        Serial.println(Compteur_Front_M);
    }
    if (Front_D(BP8)==1)    //test si on a un front descendant sur le BP8
    {
        Compteur_Front_D++;
        Serial.print("Font Descendant: ");
        Serial.println(Compteur_Front_D);
    }
}
//################################################################Fonctions
boolean Front_D(int BP) //Front Descendant des entrées
{
    BPdes_New_Eta[BP]=digitalRead(BP);
    if (BPdes_Last_Eta[BP]!=BPdes_New_Eta[BP]){
        BPdes_Last_Eta[BP]=BPdes_New_Eta[BP];
        BPdes_Up_Down[BP]=!BPdes_Up_Down[BP];
        if (BPdes_Up_Down[BP]==0){
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
//===========================
boolean Front_M(int BP) //Front Montant des entrées
{
    BPmont_New_Eta[BP]=digitalRead(BP);
    if (BPmont_Last_Eta[BP]!=BPmont_New_Eta[BP]){
        BPmont_Last_Eta[BP]=BPmont_New_Eta[BP];
        BPmont_Up_Down[BP]=!BPmont_Up_Down[BP];
        if (BPmont_Up_Down[BP]==1){
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

icare

Bonjour,
Tu n'es pas dans la bonne rubrique.
Demande à un modo de déplacer ton sujet.
A lire
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

kamill

Bonjour,

Oula!!
Ça me semble hyper compliqué. Il suffit d'une variable ou d'un tableau lastEtat[] pour faire cà.
Code: [Select]

  static bool lastEtat[15]={0,};
 
  bool etat=digitalRead(bp);
  if (etat && !lastEtat[bp])
  {
    // front montant
  }
  lastEtat[bp]=etat;


Go Up