Bonjour à tous,
Je suis en train de bosser sur un petit projet incluant une carte UNO, un codeur incrémental, un moteur pas à pas et App inventor.
Mon arbre codeur et arbre moteur sont tous les deux reliés par une courroie.
La fonction à réaliser est simple:
J'ai deux boutons A et B sur mon programme app inventor.
- Je déplace ma poulie moteur (moteur hors couple) d'un angle de rotation aléatoire.
- J'appuie sur le bouton A de mon programme App inventor >> l'arduino mémorise la position A
- Je déplace ma poulie moteur d'un angle de rotation aléatoire et j'appuie sur le bouton B >> l'arduino soustrait A à B et pilote mon moteur pour revenir en A.
Le problème étant que je ne sais pas comment utiliser les valeurs de ma variable codeur s'affichant sur mon serial pour effectuer la soustraction B-A.
Avec le code que j'utilise actuellement, quand j'appuie sur B, le moteur revient vers A mais tourne à l'infini, voici le code en question:
#include <Encoder.h> //librairie encoder
#include <A4988.h> //librairie driver stepper
Encoder codeur(3,4); // définition pins codeurs
#define MOTOR_STEPS 200 //nombre de pas du stepper
#define DIR 7 //pin direction du driver
#define STEP 6 //pin step du driver
A4988 stepper(MOTOR_STEPS, DIR, STEP);
String trame =""; // Lecture de la trame du téléphone
long EncRotPulse;
long EncNewRotPulse;
long newRotPos;
long RotPos = -999;
void setup()
{
Serial.begin(9600);
stepper.begin(200, 1); // stepper (RPM; microstep à 1)
}
void Counter () {
EncRotPulse == 0;
EncNewRotPulse = codeur.read();
if (EncNewRotPulse != EncRotPulse) {
Serial.print("Pulsecodeur = ");
Serial.print(EncNewRotPulse);
Serial.println();
EncRotPulse = EncNewRotPulse;
}
}
void loop() {
delayMicroseconds(1);
if(Serial.available() > 0) // Checks whether data is comming from the serial port
trame = Serial.readString(); // Reads the data from the serial port
{
if (trame == "A"){ // J'appuie sur la touche A de mon téléphone
Counter();}
}
if (trame == "B"){ // J'appuie sur la touche B de mon téléphone
newRotPos = EncRotPulse;
{stepper.rotate(-(newRotPos*14)); } //14=rapport pulse codeur/pas moteur
}
}
Toute aide étant la bienvenue !