Bonsoir
J'ai bossé un peu ce soir quand même
Alors j'affiche le compteur et le diamètre du fil réglé par le potar
Le guide fil est asservi par le compteur en CW et CCW , chaque impulsion
ou incrément ou décrément du compteur actionne de x steps ( fonction du diamètre du fil )
le guide fil
Reste à créer une fonction menu
Ca avance
le code du setup
Code:
// include the library code:
#include <LiquidCrystal.h>
#include <Stepper.h>
// Définition des PIN
// pin 2 = int1
#define ILS_B 2
// pin 3 = int0
#define ILS_A 3
// Définition des variables
// Mémorise le comptage du nombre de spires
int Compteur = 0;
int Sense = 0;
int val = 0;
int stepsMaped = 0; // for your motor
// Mémoreise le diamètre du fil
float fFil = 0;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 11, 10, 9, 8, 6);
// initialize the stepper library on pins 8 through 11:
// 96 is the number of steps per revolution,change this to fit the number of steps per revolution
Stepper myStepper(96,4,12,5,13);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Compteur");
// (note: line 1 is the second line, since counting begins with 0):
lcd.setCursor(12,0);
lcd.print(Compteur);
// Initialise les entrées A et B
pinMode(ILS_A, INPUT);
pinMode(ILS_B, INPUT);
attachInterrupt(0, GestionInterruptionILS_A, FALLING);
// set the speed at 100 rpm:
myStepper.setSpeed(100);
}
Le code du loop
Code:
void loop() {
AfficheCompteur();
val=analogRead(A5);
stepsMaped=map(val, 0, 1023, 0, 150);
// Doit tre calculé par rapport à la tige filetée
// 1 tour de tige filetée en pas de 1 revient à une avance de 1 mm
// Soit 1/96 (par rapport au moteur)steps fois le nombre de steps d'avance
fFil = 0.0104166*stepsMaped;
AfficheDiamFil();
// revolution in one direction or the other:
myStepper.step(stepsMaped*Sense);
Sense = 0;
}
Le code de l'interruption
Code:
// Routine de service d'interruption attachée à la voie A de la bobineuse
void GestionInterruptionILS_A()
{
int stable; // 3 variables locales
int A;
int B;
// On y va !
stable = 0;
while (stable < 5) { // Attendre 5 lectures identiques
if (A != digitalRead(ILS_A) or B != digitalRead(ILS_B)){ // différents: pas stable !
stable = 0; // On reprend du début.
A = digitalRead(ILS_A); // relire ILS_A
//delayMicroseconds(5000); // attendre un peu avant de lire ILS_B
B = digitalRead(ILS_B);
//delayMicroseconds(5000); // attendre un peu avant de relire
} // Fin si
else{
stable++; // Bon "une fois" !
} // Fin else
} // Fin While, on boucle tant que "stable" est < à 5 (ou autre !)
// Et maintenant on fait bouger le compteur dans le bon sens
if ( A == B) {Compteur--;
Sense = -1;} else {Compteur++;
Sense = 1;}
} // retour d'interruption.
Le code d'affichage
Code:
// Fonction d'affichage du compteur
void AfficheCompteur()
{
// set the cursor to column 12, line 0
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(12,0);
// reset the screen:
lcd.print(" ");
// set the cursor to column 12, line 0
lcd.setCursor(12,0);
lcd.print(Compteur);
}
// Fonction d'affichage du diamètre du fil
void AfficheDiamFil()
{
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0,1);
// print the number of seconds since reset:
lcd.print("Diam fil");
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(11,1);
lcd.print(fFil,3);
}
Ce code n'est pas très propre mais semble faire le boulot
reste à le fortifier
Bonne nuit