Jesis:
Bonjour, est ce que quelqu'un connait/possede ce capteur de lire ?
J'aurai besoin d'aide pour comprendre le code.
Voila, j'ai mis des etoile a ce qui me pose probleme.
Le code que tu as posté est incorrecte, un Serial.println() avec un tableau n'est pas possible.
Il manque aussi pas mal de petite chose, dans setup() il faut calibrer les capteurs et dans loop() les lire avec une boucle.
Regarde le sketch d'exemple fourni par pololu (+ commentaires), il est relativement complet :
#include <PololuQTRSensors.h>
#define NUM_SENSORS 8 // Nombre de capteurs
#define TIMEOUT 2500 // Temps avant d'ignoré la mesure et passé à la suivante
#define EMITTER_PIN 2 // Broche sur laquelle est câble l'émetteur du capteur
// Broche sur lesquels sont câblé les récepteurs IR
PololuQTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10}, NUM_SENSORS, TIMEOUT, EMITTER_PIN);
// Tableau d'entier dans lequel sera stocké le résultat des mesures de chaque capteur
unsigned int sensorValues[NUM_SENSORS];
// Variable d'itération pour les boucles
unsigned int i;
void setup()
{
delay(500); // Temps d'attente pour laisser les capteurs se stabiliser
for (i = 0; i < 400; i++) // Calibration de chaque capteurs (~10sec)
qtrrc.calibrate();
// Initialise le port série
Serial.begin(9600);
// Affiche les données de calibration minimum
for (i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();
// Affiche les données de calibration maximum
for (i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
// Attente avant de démarrer la prise de mesure
Serial.println();
delay(1000);
}
void loop()
{
// Lit tout les capteurs en une fois
unsigned int position = qtrrc.readLine(sensorValues);
// Autre version ne retournant pas de valeurs (plus simple)
//qtrrc.read(sensorValues);
// Affiche les valeurs mesurées par chaque capteurs
for (i = 0; i < NUM_SENSORS; i++)
{
Serial.print(sensorValues[i] * 10 / 1001); // Calcul pour un affichage plus propre et lisible de la mesure
Serial.print(' ');
}
Serial.print(" ");
Serial.println(position);
// Evite de "flooder" le port série
delay(250);
}
Jesis:
j'ai uploader le code dans le µc, mais le serial monitor n'affiche rien du tout .
Tu as bien câblé ton capteur ? Tu as attendu ~15sec (temps de calibration) ?
Essaye avec l'exemple brute de la librairie "PololuQTRSensors" voir si ça fait pareil.
je pense, j'ai fait en fonction du code, j'ai verifier si les led etait allumer. j'ai attendu .....
je ne trouve pas d'example similaire dans les exemple de lib .
Mais je pense que ca vient du code, car meme si aucun capteur ne serai connecter, le Serial m. renverrai quand mele une valeur. (non ?)
Jesis:
je pense, j'ai fait en fonction du code, j'ai verifier si les led etait allumer. j'ai attendu .....
je ne trouve pas d'exemple similaire dans les exemple de lib .
Mais je pense que ca vient du code, car meme si aucun capteur ne serai connecter, le Serial m. renverrai quand mele une valeur. (non ?)
Tu n'as pas un dossier example/PololuQTRRCExample dans la lib pololu ?
Sinon pour le bug du port série j'avais fait une petite erreur en copiant le code :
// Variable d'itération pour les boucles
unsigned int i;
c'est un int et non un char.
PS: lors de la phase de calibration il faut mettre un morceau de papier blanc à ~1.5cm du capteurs sinon il renverra toujours 0
Merci, ca marche. Cepandant, j'ai des doute sur l'efficaciter. je met un papier blanc avec un trés fait au marqueur, mais la valeur ne change pas. je test.
Jesis:
Merci, ca marche. Cepandant, j'ai des doute sur l'efficaciter. je met un papier blanc avec un trés fait au marqueur, mais la valeur ne change pas. je test.
Je vais faire un vrais cablage et je re aisserai.
Faut utiliser un papier bien blanc pour la calibration, après pour le test il faut utiliser du ruban scotch noir d'électricien, du feutre noir c'est pas suffisant (ça renvoi quand même la lumière IR du capteur)
C'est bon, ca marche. J'ai fait un vrai cablage. Oui, apparrement, ca fonctionne uniqement avec du noir. Je crois que j'ai un capteur malade il renvoie toujours 0, ou peut etre non initialisé, je verai bien. Je vait faire des tests pour lire les capteur un par un et faire reagir une led en consequence (ou 8).
Merci, encore.
Voila, le meme code sur ma mega ne marche pas (seul les n° de pin change). Sur la UNO, il n'y a pas de souci.
Si quelqu'un a une idée...
Merci d'avance
Voila, le meme code sur ma mega ne marche pas (seul les n° de pin change). Sur la UNO, il n'y a pas de souci.
La librairie de pololu est complétement réalisé en utilisant l'api arduino, donc elle doit marcher de la même manière sur n'importe quelle carte arduino et les numéro de pin doivent être identique.
Et tu sur de ton calage ? Il n'y aucune raison que cela ne marche que sur une UNO.
Jesis:
mon, cablage est juste, il est fait avec une nappe, je peux pas me trompé.
J'ai essayé sur la Mega avec le meme code et sur les memes pin que la UNO, mais y a pas moyen.
humm bizarre, je vais ressortir ma mega pour tester.
Edit: Je viens de tester avec ma mega2560 et le code que j'ai posté avant (+ petite modif), ça marche sans probléme chez moi.
Hardware : Mega2560 + Arduino 0023 + lib pololu (derniére version)
Histoire d'être sur :
#include <PololuQTRSensors.h>
#define NUM_SENSORS 8 // Nombre de capteurs
#define TIMEOUT 2500 // Temps avant d'ignoré la mesure et passé à la suivante
#define EMITTER_PIN 2 // Broche sur laquelle est câble l'émetteur du capteur
// Broche sur lesquels sont câblé les récepteurs IR
PololuQTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10}, NUM_SENSORS, TIMEOUT, EMITTER_PIN);
// Tableau d'entier dans lequel sera stocké le résultat des mesures de chaque capteur
unsigned int sensorValues[NUM_SENSORS];
// Variable d'itération pour les boucles
unsigned int i;
void setup()
{
delay(500); // Temps d'attente pour laisser les capteurs se stabiliser
pinMode(EMITTER_PIN, OUTPUT);
for (i = 0; i < 400; i++) // Calibration de chaque capteurs (~10sec)
qtrrc.calibrate();
// Initialise le port série
Serial.begin(9600);
// Affiche les données de calibration minimum
for (i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();
// Affiche les données de calibration maximum
for (i = 0; i < NUM_SENSORS; i++)
{
Serial.print(qtrrc.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
// Attente avant de démarrer la prise de mesure
Serial.println();
delay(1000);
}
void loop()
{
// Lit tout les capteurs en une fois
unsigned int position = qtrrc.readLine(sensorValues);
// Autre version ne retournant pas de valeurs (plus simple)
//qtrrc.read(sensorValues);
// Affiche les valeurs mesurées par chaque capteurs
for (i = 0; i < NUM_SENSORS; i++)
{
Serial.print(sensorValues[i] * 10 / 1001); // Calcul pour un affichage plus propre et lisible de la mesure
Serial.print(' ');
}
Serial.print(" ");
Serial.println(position);
// Evite de "flooder" le port série
delay(250);
}
Ah.. je vien de voir le edit !
Merci, j'utilise arduino 21. La meme lib que toi et le meme code ( a la difference d'une ligne).
Ca me fait pareil avec mon capteur US, il marche sur la uno mais pas sur la mega....
Jesis:
Merci, j'utilise arduino 21. La meme lib que toi et le meme code ( a la difference d'une ligne).
Ca me fait pareil avec mon capteur US, il marche sur la uno mais pas sur la mega....
Peut être un défaut matériel alors ? Si le même probléme est présent avec un autre type de capteur.
Vu que c'est pas une arduino mega2560 officiel ça peut aussi venir du câblage de la carte, de la qualité des composants, ...