Yop Artouste
Je me suis aperçu qu'un tableau de type boolean occupe sous arduino 1 octet alors qu'un bit suffi(rait)t
Quelque soit le type de variable elle occupera toujours minimum 1 octet (1 emplacement mémoire).
Le type boolean n'est rien d'autre qu'un "unsigned char" normalement (en c++ seulement, le type boolean n'existe pas en c).
tu peux faire :
boolean b = 5;
En fait un boolean peux posséder deux états: vrai ou faux, mais dire "1=vrai" et "0=faux" n'est pas tout à fais exact, en fait la véritable définition d'un boolean en programmation devrait être : toute valeur différente de 0 (faux) est considéré comme vrai (1, 1.55555, -1, 255, -128, ....).
Preuve :
if(238) {}
if(-66) {}
if(1.5555) {}
if(0) {} // sera la seule condition à ne jamais s'executer
J'utilise rarement le "type" boolean, si j'ai plusieurs états à stocker j'utilise 1 (ou plusieurs) octet ce qui me permet 8 états minimum (comme tu l'a fais avec l'unsigned long je pense ?).
for (pass=0;pass <=254; pass ++) { // pour simuler le taux d'acquisition
top = random(02); // pour simulation occultation ou pas
top = top << pass; // decalage du masque OR
ray=ray | top; //OR
Un truc me chiffonne dans "top = top << pass;", pass s'incrémente jusque 254 or tu fais un décalage d'après "pass" donc jusqu'à (<< 254) sur top de 32bit donc normalement "<< 31" max.
Pour "random(02)" ce n'est pas plutôt "random(1)" -> valeur max 1 (donc 0 ou 1) ?
Je ne sais pas si il faut obligatoirement 255 valeurs (0->254) mais pour un unsigned long (32bit) ceci devrait être bon.
for (byte pass=0;pass <=31; pass ++)
{
ray+=(random(1)<< pass); //addition binaire directement sur "ray" même d'après la valeur renvoyer par random décaler selon l'incrémentation.
}
Vue de ce qu'il ce passe niveau binaire (c'est identique au système décimal).
0000 0001 //1 << 0
+0000 0010 //1 << 1
+0000 0000 //0 << 3
+0001 0000 //1 << 5
---------------
=0001 0011