Merci beaucoup pour les reponses , j ai un peu compris le principe , mais svp si c possible je veux un exemple simple pour bien comprendre, par exemple :
-> grafcet commande verin en langage arduino ( depart cycle -> sorti verin jusqu'a x -> entrer verin jusqu'a y . )
-> et aussi commande je dois branche les entre et sortie entre arduino et verin .
Ecrit le morceau de code de ce que tu as compris pour l'exemple que tu veux et on te donnera des conseils.
Nous ne sommes pas là pour faire tes devoirs/exercices à ta place, on (en tout cas moi) ne donnera pas des "solutions"/"exemples complexes" comme ca, c'est à toi de travailler un peu, et surtout c'est pour ton bien.
Oui monsieur , ne t inkiete pas , j ai deja fais mon programme , presque fini , je me suis just bloque au niveau grafcet :
( explication : ce que je veux faire c 'est la lecture de 3 diferent card RFID , et selon chaque carte j execute un grafcet donc : je veu faire 3 grafcet de n importe koi , c ca l astuce je ne sai pa encore comment faire des grafcet avec langage arduino :
mon code que j ai deja fait le voila monsieur :
#include <LiquidCrystal.h>
int CMD[64]; // Here the max command length is set as 64 bytes. For example command "AB 02 01" is 3 bytes
boolean end_of_frame = false;
int digit;
int compt;
int test,i;
int card1,card2,card3;
int char_received = 0;
byte HEX_number, C, val;
// initializes the library with the interface pins
Ne faut il par remettre la pin 22 à l’état bas avant de mettre la 23 à l’état haut (dans l’étape 2) ? (pareil pour la 23 au moment de l’étape initiale)
void GrafcetEtat1(void) //void entre les parenthèses signifie pas d’argument
//alors qu’un vide signifie n’importe quel argument
//(en C du moins)
{
static enum
{
INITIAL,
MARCHE_DROITE,
MARCHE_GAUCHE
} etat = INITIAL; //le mot-clé static permet de garder la variable intact entre les appels
switch(etat)
{
case(INITIAL) : //action pour l'étape 0
digitalWrite(23, low);
if( digitalRead(31)== 1 && digitalRead(33)== 1 ) // etape initial - P0
etat = MARCHE_DROITE; // activation etape suivant
break;
case(MARCHE_DROITE) : //action pour l'étape 1
digitalWrite(22, HIGH); // marche a droit
if( digitalRead(49)== 1) // position chariot P1
etat = MARCHE_GAUCHE;
break;
case(MARCHE_GAUCHE) : //action pour l'étape 2
digitalWrite(22, low);
digitalWrite(23, HIGH); // marche a gauche
if( digitalRead(31)== 1) // positin initial p0
etat = INITIAL;
break;
default : //Ne devrait jamais arriver, mais on sait jamais.
digitalWrite(22, low);
digitalWrite(23, low);
etat = INITIAL;
break;
}
}
J’utilise une énumération pour le type d’etat. une variable de type énumération peut prendre comme valeur celle spécifié à la définition du type (ici, INITIAL, MARCHE_DROITE, MARCHE_GAUCHE) et aussi des valeurs entières (1, 42, …), mais ces valeurs ne doivent pas être utilisé.
Je n’ai jamais utilisé Arduino, ce que je dit est vrai en C. Comme le langage Arduino est très proche du C, je pense que tout ce que j’ai dit est aussi vrai en Arduino.
Bonjour, j'ai essayé de mettre en pratique ce que j' ai vu ici pour interpréter la mesure d'un capteur de courant
mais cela ne fonctionne pas, je dois faire une erreur quelques part mais je ne sais pas ou, est ce que vous voyez une grosse erreur quelques part?
void loop(){
float sensorVal= analogRead(sensorPin); // Lecture de la tension emise par le capteur de courant float voltage = (sensorVal*5.0)/1023.0; //Conversion de la lecture du capteur float current = (voltage-2.545)*959.692898; //Conversion de la lecture en courant static char etat = 0; //le mot-clé static permet de garder la variable intact entre les appels
switch(etat){
case(0):
digitalWrite(3,LOW); // on éteint la LED digitalWrite(4,HIGH); // on selectionnne un sens de courant if (current>=baselineCurrent) // Si le courant est superieur a la valaur minimale etat = 1;
case(1):
it = it + current; // calcul de la concomation de courant Serial.print ("Signal: ");// Ecriture dans le moniteur serie Serial.print (voltage) ;// Ecriture dans le moniteur serie Serial.print ("Current: ");// Ecriture dans le moniteur serie Serial.print (current); // Ecriture dans le moniteur serie Serial.print ("it: "); // Ecriture dans le moniteur serie Serial.println (it); // Ecriture dans le moniteur serie delay(1000);// On temporise pour etaler les mesures a chaque seconde if (it >2000.0)//Si la consommation est suffisante ( le chlore est prêt) etat=2; break;
case(2):
it=0; digitalWrite(3,HIGH); // on allume la LED de signalement switchState = digitalRead(2);// on dit ou effectuer la lecture du niveau du bouton poussoir if (switchState=HIGH) // si le BP est enclenché etat=3;
break;
case(3):
cycle=cycle+1; // on ajoute un cycle au nombre déjà effectué
if (cycle>5)// Si le nombre de cycle est inférieur à 5 etat=1; if (cycle=5)// Si le nombre de cycle est inférieur à 5 etat=0; }
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !
The wings of Technology
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !
The wings of Technology
The wings of Technology
The wings of Technology
The wings of Technology
Retrouvez moi sur mon blog et ma chaine Youtube !