Bonjour
Cinq capteurs en digital, cinq variables booléennes.
Comme je veux comparer toutes les combinaisons (robot line follower), je pense qu'il sera plus aisé de "combiner" ces cinq variables pour en obtenir une qui comporte cinq chiffres, de 0 à 1. Je veux une variable faite de 1 et de 0.
Dans un switch case ca fera très joli, et question relecture, c'est top.
case 00100 > tout droit
case 00010 > tourne à droite
case 00001 > tourne à fond à droite
kammo:
Bonjour
Cinq capteurs en digital, cinq variables booléennes.
Comme je veux comparer toutes les combinaisons (robot line follower), je pense qu'il sera plus aisé de "combiner" ces cinq variables pour en obtenir une qui comporte cinq chiffres, de 0 à 1. Je veux une variable faite de 1 et de 0.
Dans un switch case ca fera très joli, et question relecture, c'est top.
case 00100 > tout droit
case 00010 > tourne à droite
case 00001 > tourne à fond à droite
En fait ça ne marche pas parce qu'on multiplie 0 par qch. En plus, mes valeurs relevées sur les pins ne sont plus booléennes, ça fait joli, mais c'est pas ce que je cherche à faire ....
On ne doit pas faire d'arithmetique avec des booleans!
Si "False" est toujours 0, "True" peut être tout sauf zero.
Suivant le compilateur et le processeur ca peut être 1 ou 255 ou 65535 ou...
On commence avec
Traj=0;
if (digitalRead(PinLL)) Traj++;
Traj = Traj << 1;
if (digitalRead(PinLC)) Traj++;
Traj = Traj << 1;
etc...
Bon, un vrai programmeur Arduino lira le registre en une fois, basta*!
Avec par exemple les entrées de D8 à D13
DDRB = 0; //mettre les entrées en mode digital input
Traj = PINB & B0011111; // lire les 8 entrées et masquer les 2 inutiles.
Punaise
Je sais pas si c'est l'heure ou l'apéro, mais là, je suis dépassé.
Par contre c'est super intéressant.
Pour les << je connaissais pas, je me fais des exercices demain pour que ça rentre, merci lesept.
Par contre le PINA je vois pas d'où il sort.
J'avance dans mes projets, mais en code comme en électronique, je découvre encore plein de bases que je n'ai pas, j'apprends sur le tas. Pour dire, les && et trucs avec des !! j'ai du mal à les lire, mais ça va venir.
Merci pour vos contributions, reste à déchiffrer tout ça et à comprendre pourquoi vous n'êtes pas d'accord ^^
kammo:
Punaise
Je sais pas si c'est l'heure ou l'apéro, mais là, je suis dépassé.
Par contre c'est super intéressant.
Pour les << je connaissais pas, je me fais des exercices demain pour que ça rentre, merci lesept.
Par contre le PINA je vois pas d'où il sort.
J'avance dans mes projets, mais en code comme en électronique, je découvre encore plein de bases que je n'ai pas, j'apprends sur le tas. Pour dire, les && et trucs avec des !! j'ai du mal à les lire, mais ça va venir.
Merci pour vos contributions, reste à déchiffrer tout ça et à comprendre pourquoi vous n'êtes pas d'accord ^^
On ne doit pas faire d'arithmetique avec des booleans!
Si "False" est toujours 0, "True" peut être tout sauf zero.
Suivant le compilateur et le processeur ca peut être 1 ou 255 ou 65535 ou...
Bonjour,
digitalRead() n'est pas un booléen, mais un int. La valeur retournée est soit HIGH soit LOW.
Il assume que HIGH vaut 1.
Ce n'est pas très portable, mais guère moins que lorsqu'on fait
if (digitalRead(PinLL)) Traj++;
ce qui assume que HIGH est différent de 0.
Pour ma part, si j'avais à le faire j'utiliserai la solution de lesept, car c'est la solution la plus élégante et il y a quand même de grandes chances que HIGH reste à 1 dans les futures révisions du framework.