Objectifs

  1. Savoir comment ça marche l’inverseur réseau
  2. Savoir commander un inverseur réseau avec Arduino
  3. Savoir comment détecter la présence d’un réseau
  4. Savoir convertir une entrée analogique en entrée digitale
  5. Etc.

Voir le tuto pour plus de détails.

Grafcet des transitions

Grafect arduino

Programme Arduino

Un extrait du code est disponible ci-dessous. Vous pouvez consulter le tuto pour plus de détails. Les codes des projets seront accessibles gratuitement en ligne à la fin de la série et à la publication du livre.

Conversion des entrées

word Analog2LogiV1(word in, word seuil)
{
if (in>=seuil) return 1;
else return 0;
}

word Analog2LogiV2(word nn, int pinAx, word seuil)
{
float somme=0.0, vmoy=0.0;

switch (pinAx)
{
case 0:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A0);
vmoy=somme/(float)nn;
//Serial.print(vmoy); Serial.print(",");
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 1:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A1);
vmoy=somme/(float)nn;
//Serial.print(vmoy);Serial.print(","); Serial.println((float)analogRead(A1));
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 2:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A2);
vmoy=somme/(float)nn;
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 3:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A3);
vmoy=somme/(float)nn;
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 4:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A4);
vmoy=somme/(float)nn;
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 5:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A5);
vmoy=somme/(float)nn;
if((word)vmoy>=seuil) return 1;
else return 0; break;


default:
return 0;
}
}

Initialisation des E/S

void InitStateIO(bool *Etapes, word numEtapes, word *Inputs,word numIn,  word *Outputs, word numOut)
{
// Désactivation des étapes
for(word i=0;i<numEtapes;i++)
Etapes[i]=false;

// Activation d'une ou plusieurs étapes par défaut
Etapes[0]=true;

// Initialisation des entrées
for(word i=0;i<numIn;i++)
Inputs[i]=false;

// Initialisation des sorties
for(word i=0;i<numOut;i++)
Outputs[i]=false;

// Init des pins des entrées
pinMode(2, INPUT); // Dcy - Inputs[0]
// PrinActif -A0- Inputs[1]
// SecActif -A1- Inputs[2]

// Init des pins des sorties
pinMode(3, OUTPUT); // PSec - Outputs[0]
pinMode(4, OUTPUT); // StartSec
pinMode(5, OUTPUT); // P
pinMode(6, OUTPUT); // S - Inputs[4]
}

Lecture des entrées

void GetInputs(word *Inputss)
{
// Entrées digitales
Inputss[0]=digitalRead(2); // D2
Inputss[1]=Analog2LogiV2(N,0,VSeuil); // A0
Inputss[2]=Analog2LogiV2(N,1,VSeuil); // A1
}

Programme Arduino

La série GRAFCET…

Obtenir le livre « Codage en C du GRAFCET avec ARDUINO« 

Click to rate this post!
[Total: 1 Average: 5]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.