Ah j'étais pas loin. Mais j'y étais pas ^^
Merci m'siô !
si si vous y étiez - juste que puisque un digitalRead() retourne HIGH ou LOW (même si c'est 1 et 0) c'est mieux de tester avec ces valeurs là...
Très fin, du coup je comprends le code! merci encore
kammo:
Avecint Traj= digitalRead(PinLL)+ digitalRead(PinLC) <<1 +digitalRead(PinCC)<<2 + digitalRead(PinCR) <<3 + digitalRead(PinRR) <<4;On obtient
0
0
0
0
1024
1024
1024
2048
1024
2048
2048
0
0
0
0
0
0
0
0
0
C'est pas très binaire tout ça
Si! C'est parfaitment binaire!
Remplace ton Serial.print(Traj); par Serial.print(Traj**, BIN**); et admire le résultat.
J'ai encoooore un souci. pour tourner à 90 degrés, il devient capricieux.
J'ai des soucis avec le sens des roues etc. Avec des if, il fait n'importe quoi, j'essaie avec switch/case:
void VIRAGE90(byte sens) { // virage 90°
//vitesse max
analogWrite(E1, 255);
analogWrite(E2, 255);
//pivot
switch (sens) {
case : 00011
Serial.println("90G");
digitalWrite(I1, HIGH);
digitalWrite(I2, LOW);
digitalWrite(I3, LOW);
digitalWrite(I4, HIGH);
break;
case : 11000
Serial.println("90D");
digitalWrite(I1, LOW);
digitalWrite(I2, HIGH);
digitalWrite(I3, HIGH);
digitalWrite(I4, LOW);
break;
}
et là, badaboum:
expected primary-expression before ':' token
Soit je suis fatigué, soit... c'est le pastis
kammo:
Soit je suis fatigué, soit... c'est le pastis
Non, c'est la syntaxe de case.
Les deux-points vont après la valeur:
case 00011 :
Pfffffffffff
Merci
Bon j'arrête pour aujourd'hui
C'est une erreur ridicule ^^
biggil:
Non, c'est la syntaxe decase.
Les deux-points vont après la valeur:case 00011 :
et vous ne pouvez pas écrire 0011 le compilateur va croire que c'est une valeur en octal (base 8 ) et pas en binaire... il faut écrire B0011 ou B11 tout simplement avec le B pour binaire.
il faut savoir que le compilateur ne savait décoder que la base 10, la base 8 et la base 16.
en base 10, vous écrivez normalement par exemple 17 (en décimal = 1 x 10 + 7 x 1)
en base 16, on met 0x devant le chiffre par exemple 0x11 (ça fait aussi 17 en décimal, 1x16 + 1x1)
en base 8, on met 0 devant les chiffres... et donc quand on écrit 021 ça fait 17 en décimal (2 x 8 + 1 x 1)
le compilateur ne connaissait pas nativement une notation en binaire (enfin depuis C++14 on peut écrire 0b10011100) et si vous vous demandez c'est quoi ces Bxxxx ce sont des macros de l'ancien temps... Quelqu'un s'est tapé le boulot d'écrire toutes les combinaison possibles dans le fichier binary.h
#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1
#define B10 2
#define B010 2
#define B0010 2
#define B00010 2
#define B000010 2
#define B0000010 2
#define B00000010 2
...
J-M-L:
et vous ne pouvez pas écrire0011le compilateur va croire que c'est une valeur en octal (base 8 ) et pas en binaire... il faut écrire B0011 ou B11 tout simplement avec le B pour binaire.
Non.
[connerie de ma part, que j'ai effacée pour ne pas embrouiller davantage]
Mille excuses.
RIN67630:
Non.
ÉDIT: Ouf ça a été corrigé ![]()
essayez code code
byte octal = 0011;
void setup() {
Serial.begin(115200);
Serial.println(octal);
}
void loop() {}
vous verrez que la console affiche [color=purple]9[/color] c'est à dire qu'on a bien 0011 = 1x8 + 1x1 = 9 on est en octal...
Pour le B majuscule ce n’est pas la spécification du C++, comme dit plus haut c’est bien des #define pour chacune des formes et donc c’est le preprocesseur qui remplace; la notation officielle serait de commencer par 0b par exemple 0b0011
et je n'invente pas tout cela, c'est la specification
J-M-L:
Allons vous avez 400 posts sur ce forum... ne dites pas n’importe quoi....Ça vous avance à quoi?
Ups! C'est vrai. J'étais fatigué.
RIN67630:
Ups! C'est vrai. J'étais fatigué.
ça peut arriver à tout le monde..... non ? ![]()
Oui ![]()
J’ai édité mon message pour que ce soit plus lisible
En effet, je saisis mieux, à force d’expérimentations et de coups de mains, ce que sont ces "modes" d'écriture. Je ne suis pas encore à l'aise, mais je comprends déjà que ça a des avantages.
Mon code fonctionne, reste à créer un algo magique avec des maths dedans. J'ai le même niveau en maths qu'un écureuil de corée.
kammo:
En effet, je saisis mieux, à force d’expérimentations et de coups de mains, ce que sont ces "modes" d'écriture. Je ne suis pas encore à l'aise, mais je comprends déjà que ça a des avantages.
Mon code fonctionne, reste à créer un algo magique avec des maths dedans. J'ai le même niveau en maths qu'un écureuil de corée.
commencez par mettre des [color=red]B[/color]0011 si vous utilisez du binaire ça aidera ![]()
ensuite comme expliqué plus faut dans la discussion, pas sûr que ce soit super pertinent de procéder comme cela... mais c'est une autre histoire
kammo:
En effet, je saisis mieux, à force d’expérimentations et de coups de mains, ce que sont ces "modes" d'écriture. Je ne suis pas encore à l'aise, mais je comprends déjà que ça a des avantages.
Mon code fonctionne, reste à créer un algo magique avec des maths dedans. J'ai le même niveau en maths qu'un écureuil de corée.
Un détail qui a son importance pour bien comprendre: ce ne sont pas des "modes" d'écriture au sens informatique, mais des présentations différentes au programmeur de la même chose.
L' Arduino voit exactement le même code que tu ecrives
case 17: ou
case B01001:
Maintenant t'as pas besoin de maths, ni d'un algo magique.
Tu ecris simplement ce qu'il faut faire dans chaque cas de figure case n:
Y'a pas plus simple.
commencez par mettre des B0011 si vous utilisez du binaire ça aidera ![]()
C'est le cas dans mon code, c'était le but. pour ce qui est des case, je sais faire comme ça, mais il y a toujours mieux. Je lâche pas l'affaire, si je trouve pas cette semaine, ça sera peut-être dans deux mois. Mes connaissances ne me permettent pas d'optimiser mon code pour l'instant.
Tu ecris simplement ce qu'il faut faire dans chaque cas de figure case n:
Ouais, mais ça fait un robot qui zigzag et manque de finesse. Je cherche un moyen de définir la vitesse de rotation des roues en fonction de leur écartement et de l'empattement. Le capteur, selon sa distance avec l'essieu, détermine un angle, je voudrais partir de là. C'est un calcul de différentiel, faut mixer des équation écrites à moitié en grec, je ferai ça à tête reposée.
kammo:
J'ai le même niveau en maths qu'un écureuil de corée.
Les petits coréens sont très forts en maths ![]()
kammo:
commencez par mettre des B0011 si vous utilisez du binaire ça aideraC'est le cas dans mon code, c'était le but. pour ce qui est des case, je sais faire comme ça, mais il y a toujours mieux. Je lâche pas l'affaire, si je trouve pas cette semaine, ça sera peut-être dans deux mois. Mes connaissances ne me permettent pas d'optimiser mon code pour l'instant.
Tu ecris simplement ce qu'il faut faire dans chaque cas de figure case n:
Ouais, mais ça fait un robot qui zigzag et manque de finesse. Je cherche un moyen de définir la vitesse de rotation des roues en fonction de leur écartement et de l'empattement. Le capteur, selon sa distance avec l'essieu, détermine un angle, je voudrais partir de là. C'est un calcul de différentiel, faut mixer des équation écrites à moitié en grec, je ferai ça à tête reposée.
Si tes capteurs ne sont pas proportionels, tu auras du mal a faire en finesse, à moins d'en rajouter.