Bonjours a tous !
Donc voilà je suis en terminale S et j'ai un projet à faire avant la fin d'année.
Mon sujet est de savoir la vitesse à laquelle mon gyropode tourne et je dois l'afficher sur un écran lCD.
matériel: -écran GROVE-LCD RGB Backlight v4.0
- carte arduino/genuino one + shield adapté
- encodeur incrémental v1.1
(sachant que j'ai très peu de notion en codage j'ai un peu de mal à comprendre le code mais bref passons)
J'ai donc chercher sur internet différent programme arduino et j'ai en trouvé un qui me sembler correct et qui donne visiblement la pas/seconde du codeur or quand j'affiche cette vitesse donner par ce programme sur mon écran cela m'affiche des valeurs bizarre passant du positif au négatif et tout le temps des valeurs décroissantes et ne se remet pas à 0 quand j'arrête de tourner l'encodeur.
Voici donc mon code:
#include <Wire.h>
#include "rgb_lcd.h"
rgb_lcd lcd;
const int colorR = 255;
const int colorG = 255;
const int colorB = 0;
int pinA = 2; // Le port D2 est associé à l'interruption 0
int pinB = 4;
volatile int pos = 0; // Position (en nombre de pas) du codeur
volatile float vit = 0; // Vitesse (en nombre de pas par seconde) du codeur
volatile unsigned long t = 0; // temps "courant" (en microsecondes)
void setup() {
// set up le nombre de colonnes et de lignes de l'écran LCD:
lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);
// Écrire un message pour l'écran LCD.
lcd.print("vitesse :"); //16 caractères maxi par ligne
delay(1000);
Serial.begin(115200);
Serial.println("Codeur incremental");
pinMode(pinB, INPUT);
attachInterrupt(0, front, CHANGE); // Détection des deux types de fronts
t = micros(); // Initialisation du temps "courant"
}
void loop() {
// set le curseur à la colonne 0, et la ligne 1
// (note: la ligne 1 est la deuxième rangée, puisque le comptage commence par 0):
lcd.setCursor(0, 1);
// imprime la vitesse du codeur incremental en pas/seconde
lcd.print(pos);
delay(10);
}
void front() {
unsigned long dt = micros() - t; // Temps écoulé depuis le dernier front
int sA = digitalRead(pinA);
int sB = digitalRead(pinB);
int apos = pos; // Mémorisation de la position précédente
if (sA == sB) {
++pos;
}
else {
--pos;
}
if (dt > 0) {
vit = 1e6*(pos-apos)/dt; // Calcul de la vitesse (ici en pas par seconde)
}
Serial.print("\t");
Serial.println(vit);
}
Je pense comprendre à peu près le code mais je ne vois pas quoi modifier ou rajouter pour que l'écran m'affiche la vitesse instantané en m/s de mon gyropode
Si vous avez un autre topic qui peut éclairer ma lanterne ou des nouvelles chose qui peuvent permettre de mettre à termes mon projet je ne suis pas contre du tout ^^
Bien Cordialement
Alex_ts1