M
Moi33
Apprenti
Bonsoir,
Avec le code ci dessous, je lis la variation de position d'un codeur et je l'affiche sur un écran.
Le souci de ce code est que la variation s'affiche en valeur angulaire dans le sens horaire et une autre valeur dans le sens trigonométrique. Entrée A et Entrée B.
J'aimerai que la mesure n'est qu'une ligne d'affichage pour laquelle on incrémente quand on tourne dans un sens et que l'on des-incrémente quand on tourne dans l'autre sens.
D'avance merci pour votre aide.
Cordialement.
Bruno
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//pinMode(swPin,INPUT_PULLUP);
LiquidCrystal_I2C lcd(0x27,20,4); // définissez l'adresse LCD sur 0x27 pour un affichage de 20 caractères et 4 lignes
//certains affichages peuvent utiliser 0x3F pour l'adresse
// SCL - A5, SDA - A4, VCC - +5, Gnd - Gnd
// Codeur 1024 pas pour 360° soit 0.3515625°/pas
// Codeur Heidenhain 18000 pas pour 360° soit 0.02°/pas
int PasCodeurpartour = 18000 ; // SET nombre de pas du codeur pour 1 tour
#define A_PHASE 2
#define B_PHASE 3
unsigned int flag_A = 0; //Affecter une valeur au bit A
unsigned int flag_B = 0; //Affecter une valeur au bit B
/** * */
void setup() {
lcd.init(); // initialiser l'écran lcd
// Affiche le message de bienvenue sur l'écran LCD.
lcd.backlight();
lcd.setCursor(5,0);
lcd.print("Position ");
lcd.setCursor(5,1);
lcd.print("angulaire");
lcd.setCursor(5,2);
lcd.print("Numerique");
lcd.setCursor(3,3);
delay(1500);
lcd.init(); // initialiser l'écran lcd
pinMode(A_PHASE, INPUT);
pinMode(B_PHASE, INPUT);
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt( A_PHASE), interrupt, RISING); //Mode d'interruption lorsque la broche passe de bas en haut
}
void loop() {
float DegresTrigo = flag_A * 0.02;
float DegresHoraire = flag_B * 0.02;
Serial.print("Sens Trigonometrique: ");
Serial.println(flag_A);
Serial.println(DegresTrigo);
lcd.setCursor(0,0);
lcd.print("Sens Trigonometrique");
lcd.setCursor(6,1);
lcd.print(DegresTrigo);
lcd.setCursor(13,1);
lcd.print("degres");
Serial.print("Sens horaire: ");
Serial.println(flag_B);
Serial.println(DegresHoraire);
lcd.setCursor(1,2);
lcd.print("Sens horaire:");
lcd.setCursor(6,3);
lcd.print(DegresHoraire);
lcd.setCursor(13,3);
lcd.print("degres");
delay(50);
}
void interrupt()
{ char i;
i = digitalRead( B_PHASE);
if (i == 1)
flag_A += 1;
else
flag_B += 1;
}
Avec le code ci dessous, je lis la variation de position d'un codeur et je l'affiche sur un écran.
Le souci de ce code est que la variation s'affiche en valeur angulaire dans le sens horaire et une autre valeur dans le sens trigonométrique. Entrée A et Entrée B.
J'aimerai que la mesure n'est qu'une ligne d'affichage pour laquelle on incrémente quand on tourne dans un sens et que l'on des-incrémente quand on tourne dans l'autre sens.
D'avance merci pour votre aide.
Cordialement.
Bruno
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//pinMode(swPin,INPUT_PULLUP);
LiquidCrystal_I2C lcd(0x27,20,4); // définissez l'adresse LCD sur 0x27 pour un affichage de 20 caractères et 4 lignes
//certains affichages peuvent utiliser 0x3F pour l'adresse
// SCL - A5, SDA - A4, VCC - +5, Gnd - Gnd
// Codeur 1024 pas pour 360° soit 0.3515625°/pas
// Codeur Heidenhain 18000 pas pour 360° soit 0.02°/pas
int PasCodeurpartour = 18000 ; // SET nombre de pas du codeur pour 1 tour
#define A_PHASE 2
#define B_PHASE 3
unsigned int flag_A = 0; //Affecter une valeur au bit A
unsigned int flag_B = 0; //Affecter une valeur au bit B
/** * */
void setup() {
lcd.init(); // initialiser l'écran lcd
// Affiche le message de bienvenue sur l'écran LCD.
lcd.backlight();
lcd.setCursor(5,0);
lcd.print("Position ");
lcd.setCursor(5,1);
lcd.print("angulaire");
lcd.setCursor(5,2);
lcd.print("Numerique");
lcd.setCursor(3,3);
delay(1500);
lcd.init(); // initialiser l'écran lcd
pinMode(A_PHASE, INPUT);
pinMode(B_PHASE, INPUT);
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt( A_PHASE), interrupt, RISING); //Mode d'interruption lorsque la broche passe de bas en haut
}
void loop() {
float DegresTrigo = flag_A * 0.02;
float DegresHoraire = flag_B * 0.02;
Serial.print("Sens Trigonometrique: ");
Serial.println(flag_A);
Serial.println(DegresTrigo);
lcd.setCursor(0,0);
lcd.print("Sens Trigonometrique");
lcd.setCursor(6,1);
lcd.print(DegresTrigo);
lcd.setCursor(13,1);
lcd.print("degres");
Serial.print("Sens horaire: ");
Serial.println(flag_B);
Serial.println(DegresHoraire);
lcd.setCursor(1,2);
lcd.print("Sens horaire:");
lcd.setCursor(6,3);
lcd.print(DegresHoraire);
lcd.setCursor(13,3);
lcd.print("degres");
delay(50);
}
void interrupt()
{ char i;
i = digitalRead( B_PHASE);
if (i == 1)
flag_A += 1;
else
flag_B += 1;
}