I/O arduino robot

Bonjour,
Je voudrais pouvoir connaitre la distance parcouru par mon arduino robot.
J’ai donc pour cela placé un aimant sur la roue et un capteur magnétique relié à l’I/O “D17” sur la motor board. Ainsi je peux détecter chaque tour de roue et connaitre la distance parcourue en multipliant par le perimètre de la roue…
Malheureusement je ne sais pas comment je dois appeler ma sortie dans l’IDE.
Pour essayer j’ai fais ce code

#include <ArduinoRobot.h>
#include <SPI.h>
#include <Wire.h>

int distance;
int capteur=D7;//c'est le D7 là dont je ne suis pas sur
boolean varc;
void setup() {
  Robot.begin();
  Robot.beginTFT();
  pinMode(capteur,OUTPUT);
   }
void loop() {
  Robot.digitalWrite(capteur,HIGH);
  delay(100);
  Robot.digitalWrite(capteur,LOW);
  delay(100);
}

J’ai aussi essayer en appelant le pin B_TK3 (c’est ainsi qu’il est dis d’être appelé sur la doc du robot https://www.arduino.cc/en/Main/Robot )
Mais quand j’essaye de compiler le code il y a un message d’erreur :

C:\Program Files\Arduino\libraries\Robot_Control\src\ArduinoRobot.cpp:22:10: error: ‘BUZZ’ was not declared in this scope

pinMode(BUZZ,OUTPUT);

^

Erreur lors de la compilation.

Merci d’avance si vous avez de l’aide ou des pistes :wink:

Bonjour,

7, tout simplement.

en effet, utiliser directement le numéro de l'entrée "7" comme le suggère 3Sigma c'est ce qu'il y a de plus simple.
Par contre, le reste du code ne fait pas du tout ce que tu annonces dans ta description, en effet ton code ne fait que mettre la sortie de ton capteur (N° 7 donc) en LOW/HIGH toutes les 100ms... Je ne vois là aucun traitement d'un capteur ILS ou à effet Hall lié à un aimant (?)

Zorro_X:
en effet ton code ne fait que mettre la sortie de ton capteur (N° 7 donc) en LOW/HIGH toutes les 100ms…

Oui et en plus l’I/O est en sortie, il faudrait qu’elle soit en entrée pour que ce soit fonctionnel.

Ok d’abord merci beaucoup pour vos réponses :slight_smile:
Le code que j’ai mis etait juste un code pour tester les I/O, le (debut) de code que je compte utiliser est celui ci :

#include <ArduinoRobot.h>
#include <SPI.h>
#include <Wire.h>

int distance;
int capteur=D7;
boolean varc;
void setup() {
  Robot.begin();
  Robot.beginTFT();
  pinMode(capteur,INPUT);
   }
void loop() {
  Robot.clearScreen();
  if(capteur==HIGH&&varc==false){
    distance=distance+1;
    varc=true;
    Robot.background(0,0,0);
    }
  if(capteur==LOW&&varc==true){
    varc=false;
    }
  Robot.stroke(0);
  Robot.text(distance,50,50);
}

Mais quand j’ai essayé ce code la valeur affichée restait a 0.

Deux choses :

  1. à aucun moment tu ne lis ton capteur : la variable "capteur" contient l'identifiant de l'entrée à utiliser, pas l'état de l'entrée (!). Pour lire l'état de l'entrée il te faut utiliser
bool etatDuCapteur = digitalRead(capteur);
  1. Même en utilisant digitalRead() ca ne va pas fonctionner, tu dois incrémenter ton compteur de distance uniquement au moment de la transition. De plus, selon le capteur que t'utilises tu risques d'avoir des interférences et/ou des rebonds qui feront que t'auras une mesure complètement faussée. Tu peux gérer ce genre de capteurs comme un bouton : voici un tuto qui tente d'expliquer un peu tout ca.

En effet desolé le code que j'ai mis n'etait pas le bon...le vrai code marche maintenant (en appelant "7" le capteur).
Pour le capteur je l avait deja bien connecté.
Tout marche bien maintenant merci beaucoup â tous pour vos aides :relaxed: