Arduino Forum

International => Français => Topic started by: vtec35 on May 21, 2019, 03:39 pm

Title: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 03:39 pm
bonjour tout le monde

je suis en train de faire une nouvelle machine, et je voulais lui mettre un arduino en guise d'automate

j'ai une fonction a retranscrire

Code: [Select]


dim encoche(5)
dim i is an integer


sub vidage()

for i=1 to 5
encoche(i) = 0
next i
end sub



donnerais

Code: [Select]


dim encoche(5) // là je suis pas sur du tout
int dim i    // là je suis pas sur du tout

void vidage()

for i=1 to 5
encoche(i) = 0;
next i;




ensuite

Code: [Select]

sub gestionencoche()

for i = 1 to 5
encoche (6-i) = encoche(5-i)
next i
dumpencoche()
end sub


donnerais

Code: [Select]

void gestionencoche()

for i = 1 to 5
encoche (6-i) = encoche(5-i);
next i;
dumpencoche();


ensuite

Code: [Select]

sub dumpencoche()
for i=1 to 5
setmbbit 319+i, encoche(i)
next i
end sub


donnerais

Code: [Select]

dumpencoche()
for i=1 to 5
setmbbit 319+i, encoche(i);  // là on memorise les encoche(i) sur l arduino, et je ne sais pas faire cela
next i;






en fait ces fonctions servent à creer une tableau de memorisation des etats d'encoche sur une table tournante, soit l encoche est plein 1 ou vide 0

et la table tourne d'un cran, donc on doit decaler le tableau de une ligne, mettre à 0 la derniere encoche qui sort du tableau, et decider ce que va devenir la premiere encoche du tableau



cela fait appel a des fonctions que je ne maitrise pas sous arduino, j ai mis 3 stagiaires crsa dessus qui seche



Title: Re: retranscription d'une code d'automate sur arduino
Post by: kamill on May 21, 2019, 04:19 pm
Bonjour,

Qu'est ce que tu veux faire?
Traduire une programme basic en C++ pour le faire tourner sur un arduino?
Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 04:23 pm
vi
Title: Re: retranscription d'une code d'automate sur arduino
Post by: bricofoy on May 21, 2019, 04:25 pm
un truc dans ce genre ?

Code: [Select]

bool encoche[5];
#define base_pin 5 //pin choisie arbitrairement !

void vidage()
{
    for( int i=0; i<5; i++)
    {
        encoche[i] = false;
    }
}


void gestionencoche()
{
    for( int i=0; i<5; i++)
    {
     encoche[5-i] = encoche[4-i];
    }
    dumpencoche();
}

void dumpencoche()
{
 for( int i=0; i<5; i++)
    {
     // setmbbit 319+i, encoche(i);
     //ici par contre je ne connais pas l'instruction utilisée mais
     //vu son nom je pense qu'on positionne un bit dans un registre en
     //fonction de la valeur de encoche[i]
     digitalWrite(base_pin+i, encoche[i]);
 }
}



en revanche rien ne rempli le tableau encoche[] dans ce code. il sera donc toujours à false partout
Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 04:47 pm
alors, en fait le tableau se rempli à l encoche 1, on met une sonde, si quelque chose est present, on rempli à true

sinon on laisse a false


on est en train de faire un petit montage simple avec bouton et relais pour simuler la table



du coup, je suis pas persuader que le dumpencoche serve vraiment a quelque chose

il semblerait que c est une memorisation du tableau, en cas de coupure de courant, ce qui dans notre cas ne sert a rien

vous confirmez?
Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 04:50 pm
un truc dans ce genre ?

Code: [Select]

bool encoche[5];
#define base_pin 5 //pin choisie arbitrairement !

void vidage()
{
    for( int i=0; i<5; i++)
    {
        encoche[i] = false;
    }
}


void gestionencoche()
{
    for( int i=0; i<5; i++)
    {
     encoche[5-i] = encoche[4-i];
    }
    dumpencoche();
}

void dumpencoche()
{
 for( int i=0; i<5; i++)
    {
     // setmbbit 319+i, encoche(i);
     //ici par contre je ne connais pas l'instruction utilisée mais
     //vu son nom je pense qu'on positionne un bit dans un registre en
     //fonction de la valeur de encoche[i]
     digitalWrite(base_pin+i, encoche[i]);
 }
}



en revanche rien ne rempli le tableau encoche[] dans ce code. il sera donc toujours à false partout
merci et lol ta signature
Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 05:41 pm
comment on fait pour printer encoche(i)?


Serial.print(encoche(1)); ne marche pas
Title: Re: retranscription d'une code d'automate sur arduino
Post by: dbrion06 on May 21, 2019, 05:46 pm
Serial.print(encoche(1)); ne marche pas
Essayez
Serial.print(encoche[1]);

( .. )  servent à appeler des fonctions, entre autres, et à garder des expressions lisibles
[ .. ] servent à indicer des tableaux...

Au fait: quels sont les défauts de mouvement (ça ne se compile pas -j'espère- ou ça fait n'importe quoi?)
Title: Re: retranscription d'une code d'automate sur arduino
Post by: bidouilleelec on May 21, 2019, 05:51 pm
Bonjour vtec35
comment on fait pour printer encoche(i)?


Serial.print(encoche(1)); ne marche pas
https://www.arduino.cc/reference/en/language/variables/data-types/array/ (https://www.arduino.cc/reference/en/language/variables/data-types/array/)

Cordialement,
bidouillelec
Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 05:52 pm
qu apel tu defaut de mouvement?
Title: Re: retranscription d'une code d'automate sur arduino
Post by: bidouilleelec on May 21, 2019, 06:23 pm
qu apel tu defaut de mouvement?
"Serial.print(encoche(1)); ne marche pas"

ne marche pas ==>  défaut de mouvement  :smiley-fat:

Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 07:00 pm
a ok, ça ne se compile pas


sinon voici notre code de test

Code: [Select]

#define entree_inter  9


bool encoche[5];
//#define base_pin 5 //pin choisie arbitrairement !

void vidage()
{
for( int i=0; i<5; i++)
  {
    encoche[i] = false;
  }
}
void gestionencoche()
{

  for( int i=0; i<5; i++)
  {
    encoche[5-i] = encoche[4-i];
  }

}

 /*void dumpencoche()
{
  for( int i=0; i<5; i++)
  {
      //setmbbit 319+i,encoche(i);
      //ici par contre je ne connais pas l'instruction utilisée mais
      //vu son nom je pense qu'on positionne un bit dans un registre en
      //fonction de la valeur de encoche[i]
      digitalWrite(base_pin+i, encoche[i]);
  }
}*/

void setup() {
pinMode (entree_inter,INPUT);
  vidage();
  Serial.begin(115200);
}

void loop ()
{
if (entree_inter == HIGH)
{
encoche[1]= true;
}
else
{
  encoche[1]= false;
}
delay (1000);
Serial.println ("mouvement table");
gestionencoche();
    Serial.println("encoche 1=");
    Serial.println(encoche[1]);
    Serial.println("encoche 2=");
    Serial.println(encoche[2]);
    Serial.println("encoche 3=");
    Serial.println(encoche[3]);
    Serial.println("encoche 4=");
    Serial.println(encoche[4]);
    Serial.println("encoche 5=");
    Serial.println(encoche[5]);
delay (2000);
Serial.println ("arret table");







}




ça marche...en partie

l'encoche 5 fait n'importe quoi, un coup 3 , un coup 6, alors que devrais avoir 0 ou 1

et l'inter ne fait aucun effet sur l encoche 1, elle devrait la mettre a true ou false




le montage est simple pour l essai, un inter sur l entrée 9 et voila
Title: Re: retranscription d'une code d'automate sur arduino
Post by: kamill on May 21, 2019, 07:40 pm
Il faut que tu lises l'entrée
au lieu de
Code: [Select]
 if (entree_inter == HIGH)
c'est
Code: [Select]
 if (digitalRead(entree_inter) == HIGH)
Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 07:42 pm
ok bon c est sur....


et pour le encoche  [5] qui donne 3 ou 6? tu vois quelques choses?
Title: Re: retranscription d'une code d'automate sur arduino
Post by: kamill on May 21, 2019, 07:49 pm
Je ne vois pas ce que tu veux faire.
Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 21, 2019, 08:24 pm
je commence par mettre toute les encoche à false



ensuite, j'ai un interrupteur,si il est HIGH

encoche(1) devient true,

si LOW,

encoche(1) devient false

ensuite quand j appel gestionencoche()

on decale tout le tableau d'une ligne, la valeur qui etait dans encoche 1 passe a encoche 2, celle de encoche 2 passe a encoche 3 etc...
Title: Re: retranscription d'une code d'automate sur arduino
Post by: kamill on May 21, 2019, 08:59 pm
Le premier élément ce n'est pas encoche[1], mais encoche[0]
Il y a un problème dans gestionencoche(), ça écrit en dehors du tableau
Title: Re: retranscription d'une code d'automate sur arduino
Post by: dbrion06 on May 22, 2019, 08:02 am
Plutôt que de tenter de retire un à tous les indices d'un tableau de booleens (8 bits), sacrifiez le premier élement (qui ne sera jamais utilisé, d'où un gigantesque gaspillage), rajoutez un à la dimension du tableau, sur une ligne et laissez tous les autres indices tels qu'ils sont (c'est moins mauvais que d'oublier de corriger, quelque part dans un code -qui peut être touffu quoique fonctionnel- des dizaines d'indices de tableau)
Title: Re: retranscription d'une code d'automate sur arduino
Post by: kamill on May 22, 2019, 08:46 am
En corrigeant les indices ça donne
Code: [Select]
#define entree_inter  9


bool encoche[5];
//#define base_pin 5 //pin choisie arbitrairement !

void vidage()
{
  for ( int i = 0; i < 5; i++)
  {
    encoche[i] = false;
  }
}
void gestionencoche()
{

  for ( int i = 4; i > 0; i--)
  {
    encoche[i] = encoche[i-1];
  }

}

/*void dumpencoche()
  {
  for( int i=0; i<5; i++)
  {
     //setmbbit 319+i,encoche(i);
     //ici par contre je ne connais pas l'instruction utilisée mais
     //vu son nom je pense qu'on positionne un bit dans un registre en
     //fonction de la valeur de encoche[i]
     digitalWrite(base_pin+i, encoche[i]);
  }
  }*/

void setup() {
  pinMode (entree_inter, INPUT);
  vidage();
  Serial.begin(115200);
}

void loop ()
{
  gestionencoche();
  if (digitalRead(entree_inter) == HIGH)
  {
    encoche[0] = true;
  }
  else
  {
    encoche[0] = false;
  }
  delay (1000);
  Serial.println ("mouvement table");
  Serial.print("encoche 0=");
  Serial.println(encoche[0]);
  Serial.print("encoche 1=");
  Serial.println(encoche[1]);
  Serial.print("encoche 2=");
  Serial.println(encoche[2]);
  Serial.print("encoche 3=");
  Serial.println(encoche[3]);
  Serial.print("encoche 4=");
  Serial.println(encoche[4]);
  delay (2000);
  Serial.println ("arret table");
}
Title: Re: retranscription d'une code d'automate sur arduino
Post by: vtec35 on May 22, 2019, 09:26 am
merci kamill, on va tester nos deux versions