#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27,16,2); // définit le type d'écran lcd 16 x 2
#include "RotaryEncoder.h"
RotaryEncoder encoder(8, 9); // DT, CLK
#define STEPS 6
#define POSMIN 0
#define POSMAX 12
int lastPos;
int newPos;
boolean buttonWasUp = true;
#include <Stepper.h>
const int stepsPerRevolution = 200; // step moteur
const int pas =1; // pas de la vis moteur
int largeur ;// largeur bobine
Stepper myStepper(stepsPerRevolution, 4, 5, 6 ,7);
int motorSpeed =10;
void setup() {
LCD.init(); // initialisation de l'afficheur
LCD.backlight();
pinMode(3,INPUT); //push button pin
pinMode(1,INPUT); //push button pin
pinMode(2, INPUT_PULLUP); // SWitch encoder
pinMode(10, OUTPUT); // LED bleue
pinMode(11, OUTPUT); // LED verte
pinMode(12, OUTPUT); // LED rouge
// initialize the serial port:
Serial.begin(9600);
encoder.setPosition(10 / STEPS);
LCD.setCursor(1, 0);
LCD.print("Bobineuse V1.00 ");
LCD.setCursor(1, 1);
LCD.print("By Aktarus54");
delay (5000);
LCD.clear();
}
void loop() {
//int sensorReading = analogRead(A0);// entree potard reglage vitesse
// motorSpeed = map(sensorReading, 0, 1023, 10, 100);
// myStepper.setSpeed(motorSpeed); // reglage de la vitesse
LCD.setCursor(0, 0);
LCD.print("TB HB S");
encoder.tick();
newPos = encoder.getPosition() * STEPS;
if (newPos < POSMIN) {
encoder.setPosition(POSMIN / STEPS);
newPos = POSMIN;
}
else if (newPos > POSMAX) {
encoder.setPosition(POSMAX / STEPS);
newPos = POSMAX;
}
if (lastPos != newPos) {
Serial.println(newPos);
LCD.setCursor(lastPos, 1);
LCD.print(" ");
LCD.setCursor(newPos, 1);
LCD.print("====");
lastPos = newPos;
}
boolean buttonIsUp = digitalRead(2);
if (buttonWasUp && !buttonIsUp) {
delay(10);
buttonIsUp = digitalRead(2);
if (!buttonIsUp && newPos == 0) {
digitalWrite(10,HIGH); digitalWrite(11,LOW); digitalWrite(12,LOW);largeur =15 ;fdc();delay(5000);position(); delay(5000);traverse();
}
if (!buttonIsUp && newPos == 6) {
digitalWrite(10,LOW); digitalWrite(11,HIGH); digitalWrite(12,LOW);largeur =7;fdc();delay(5000);position(); delay(5000);traverse();
}
if (!buttonIsUp && newPos == 12) {
digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,HIGH);largeur =13;fdc();delay(5000);position(); delay(5000);traverse();
}
}
}
void fdc() {
while( digitalRead(1) == 1 ) {
myStepper.setSpeed(10);
myStepper.step(stepsPerRevolution*pas*1);
delay(10);
}
}
void position() {
myStepper.setSpeed(10);
myStepper.step(-stepsPerRevolution*pas*1);
delay(10);
}
void traverse() {
while( digitalRead(3) == 1 ) //while the button is pressed
{int sensorReading = analogRead(A0);// entree potard reglage vitesse
motorSpeed = map(sensorReading, 0, 1023, 10, 100);
myStepper.setSpeed(motorSpeed); // reglage de la vitesse
Serial.println("clockwise");
myStepper.step(stepsPerRevolution*pas*largeur);
delay(10);
// step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution*pas*largeur);
delay(10);
}
}