Bonjour ,
Juste pour savoir , si je fais ceci :
word= ~ ( 1<<i )
Cela veut dire que j'ai créé un word qui fait quoi ?
Bonjour ,
Juste pour savoir , si je fais ceci :
word= ~ ( 1<<i )
Cela veut dire que j'ai créé un word qui fait quoi ?
Si i = 3 :
1<<3 = 1000 et ~1000 = 0111
GD1992:
Juste pour savoir , si je fais ceci :word= ~ ( 1<<i )
Cela veut dire que j'ai créé un word qui fait quoi ?
1<<i: décale 1 de i position sur la gauche
~ : donne complément de la valeur en argument
donc au bout du compte ta variable word contient un mot où tous les bits sont à 1 sauf le bit i qui est à zéro.
Bonjour,
ok! je comprends maintenant .
donc , si je fais : word = ~ ( 2<<i) ; veux dire que je décale 2 de i position vers la gauche
En fait, le problème est que je dois créer au moins 4 " word " différents dont le premier word est : word =~ ( 1<< i );
Merci!
donc, selon b@tto :
si i= 4
word = 2<<i => word = 0000000000100000 et word =~ ( 2<<i); => word = 1111111111011111 ?
Le problème est que selon de bout du code que voici i = 16 mais devrait passer à 72 et je dois en créer plusieurs word
byte compte_conection;
word lecture;compte_conection=0; // le compteur de sorties connectées
for(int i=0;i<16;i++)
{word w =~(1<<i);
WritePCF16(1,w); // envoyer ce word à'un PCF SORTIES
delay(10);
lecture=ReadPCF16(0); // lecture des entrées sur un PCF ENTREES,
delay(10);Serial.print("Sortie ");Serial.print(i);Serial.print(": ");Serial.print(lecture,BIN);
if(lecture!=0xFFFF) {
// on à detecté une ou plusieurs entrées à 0, elles sont donc connectées à la sortie i
liste_raccords[compte_conection].frompin=i; // on sauvegarde la pin sortie dans la liste
decompose(lecture,compte_conection); // on regarde et sauvegarde la ou les pin d'entrées connectées
compte_conection++; // et une connexion détectée de plus
}
}
merci !
donc , si je fais : word = ~ ( 2<<i) ; veux dire que je décale 2 de i position vers la gauche
Je ne suis pas certain de comprendre ton problème. En général, cette syntaxe est utilisée pour créer des masques afin d'isoler un(ou des) bit(s).
Si tu nous expliquais clairement le besoin.
Bonsoir,
en fait, j'utilise des expanders PCF8575 qui a l'aide de mon Arduino .Je pourrais gérer la continuité d'un certain nombre de fils qui sera relié un à un aux broches de mes expanders.
et je pense qu'avec un word je pourrais un à un vérifier la continuité entre l'entrée et la sortie d'un fils.
et dont je veux partie du code source que j'ai posté pour évoluer, il n'a pas été écrit pas moi j'essaie juste de le comprendre pour pouvoir avancer dans mon travail.
Voilà et Merci !
Si je comprends bien : tu as deux PCF, relié par un câble que tu veux tester ?
oui ! c'est un peut ça .
oui! b@tto c'est un peu ça .
Mais, ici j'ai deux cartes avec chacun 2 PCF et qui sont reliées à l'aide des fils à d'autres cartes avec aussi chacune 2 PCF
Mais, ici j'ai deux cartes avec chacun 2 PCF et qui sont reliées à l'aide des fils à d'autres cartes avec aussi chacune 2 PCF
L'histoire se répète....
J'ai le souvenir d'une histoire identique l'année dernière. Cela doit être enfouie quelque part sur le forum.
je crois que j'ai essayé de lire ce topic là .
Mais, je n'ai pas non plus compris le code qui a été poster pour aider le membre Mathy.
GD1992:
je crois que j'ai essayé de lire ce topic là .
Mais, je n'ai pas non plus compris le code qui a été poster pour aider le membre Mathy.
tu m'étonnes, elle était pas mal à la ramasse et cela partait dans tous les sens j'ai fini par laisser tomber.
Moi j'espère seulement qu'elle s'est en sortie .
Car, c'est vraiment difficile la programmation =( quand t' on ne comprend pas et heureusement que ce forum existe
En tout cas , c'est mon avis !
Ton algorithme à l'air de tenir la route. Juste une remarque
if(lecture!=0xFFFF) {
// on à detecté une ou plusieurs entrées à 0, elles sont donc connectées à la sortie i
liste_raccords[compte_conection].frompin=i; // on sauvegarde la pin sortie dans la liste
decompose(lecture,compte_conection); // on regarde et sauvegarde la ou les pin d'entrées connectées
compte_conection++; // et une connexion détectée de plus
}
Dans cette partie si tu relies une valeur différente de FFFF tu considères que la liaison est bonne et tu mémorise le numéro de la broche. C'est aller un peu vite il faudrait quand même vérifier que c'est le bon fil car s'il y a un court-circuit entre 2 fils ou un croisement tu ne le signaleras pas.
l'arduino est en 8bits.
si tu utilises un word qui est en 16 bits tu vas perdres un temps monstrueux.
si tu as besoin de performance il te faut utiliser un array of byte pour avoir ainsi un maximum de perf.
et ensuite ecrire les fonctions qui vont bien afin de définir les bits aux bons endroits dans ton array.
fred133084:
l'arduino est en 8bits.
si tu utilises un word qui est en 16 bits tu vas perdres un temps monstrueux.
si tu as besoin de performance il te faut utiliser un array of byte pour avoir ainsi un maximum de perf.
et ensuite ecrire les fonctions qui vont bien afin de définir les bits aux bons endroits dans ton array.
Deux cycles d'horloge contre un c'est pas non plus une perte "monstrueuse de temps"
Tu perdras plus de temps avec ton appel à fonction, l'adressage indirecte du tableau et l'accès à une cellule du dit tableau.
j'avais du temps a tuer :
Benchmark comparatif entre différents data type en mode inline ou appel de fonction du code de la page 1 de ce post :
condition > 10000 itérations
mode : inline
data type : byte
file size : 4 062 octets
delay : 5060
data type : int
file size : 3 990 octets
delay : 5692
data type : word
file size : 4 004 octets
delay : 5692
mode : function call
data type : byte
file size : 3 994 octets
delay : 5060
data type : int
file size : 4 004 octets
delay : 5692
data type : word
file size : 4 004 octets
delay : 5692