Bonjour,
Qu'est ce que tu veux faire?
Traduire une programme basic en C++ pour le faire tourner sur un 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
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