retranscription d'une code d'automate sur arduino

Bonjour,

Qu'est ce que tu veux faire?
Traduire une programme basic en C++ pour le faire tourner sur un arduino?

vi

un truc dans ce genre ?

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

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?

bricofoy:
un truc dans ce genre ?

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

comment on fait pour printer encoche(i)?

Serial.print(encoche(1)); ne marche pas

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?)

Bonjour vtec35

vtec35:
comment on fait pour printer encoche(i)?

Serial.print(encoche(1)); ne marche pas

Cordialement,
bidouillelec

qu apel tu defaut de mouvement?

vtec35:
qu apel tu defaut de mouvement?

"Serial.print(encoche(1)); ne marche pas"

ne marche pas ==> défaut de mouvement :drooling_face:

a ok, ça ne se compile pas

sinon voici notre code de test

#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

Il faut que tu lises l'entrée
au lieu de

 if (entree_inter == HIGH)

c'est

 if (digitalRead(entree_inter) == HIGH)

ok bon c est sur....

et pour le encoche [5] qui donne 3 ou 6? tu vois quelques choses?

Je ne vois pas ce que tu veux faire.

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...

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

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)

En corrigeant les indices ça donne

#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");
}

merci kamill, on va tester nos deux versions