Salve a tutti,
sto prendendo confidenza con la movimentazione di un motore stepper in abbinamento ad un driver tb6600 e arduino uno. Il progetto attuale prevede di muovere il motore in un verso e in un altro con l'ausilio di due pulsanti e di contare gli step in un verso e nell'altro (quindi '+numero di step' per il verso antiorario e'-numero di step' verso antiorario) assumendo come zero della movimentazione il punto in cui l'albero sta al momento dell'accensione. Il valore lo visualizo du un display 16X2 con interfaccia I2C.
Posso assicurare che i cablaggi sono giusti e che la movimentazione con i pulsanti funziona a modo. Il mio cruccio è che non trovo un modo per definire il numero degli step: ho provato a ragionare pensando a definire una variabile StepCount e a questa variabile vorrei associare ogni step che fa quando premo il pulsante ossia vorrei che a questa variabile sia associato un valore da accumulare ogni volta che succede:
digitalWrite(DIR, LOW);
digitalWrite(ENA, HIGH);
digitalWrite(PUL, HIGH);
delayMicroseconds(200);
non so bene come tradurre questo in linguaggio di programmazione e sono ovviamente aperto a qualsiasi consiglio prevedendo di cambiare logica.
Allego il codice che ho realizzato finora:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int switchACW = 2; //define anticlockwise temporary switch
int switchCW = 3; //define clockwise temporary switch
int PUL = 7; //define Pulse pin
int DIR = 6; //define Direction pin
int ENA = 5; //define Enable Pin
int valACW = 0;
int valCW = 0;
int StepCount = 0;
void setup() {
pinMode (switchACW, INPUT);
pinMode (switchCW, INPUT);
pinMode (PUL, OUTPUT);
pinMode (DIR, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (PUL, OUTPUT);
pinMode (DIR, OUTPUT);
pinMode (ENA, OUTPUT);
lcd.init();
lcd.backlight();
lcd.print("Conteggio");
lcd.setCursor(0, 1);
lcd.print("step");
delay(2000);
lcd.clear();
}
void loop() {
valCW = digitalRead(switchCW);
valACW = digitalRead(switchACW);
StepCount =
if (valCW == LOW) { //when clockwise temporary switch is pressed
digitalWrite(DIR, LOW);
digitalWrite(ENA, HIGH);
digitalWrite(PUL, HIGH);
delayMicroseconds(200);
}
else
{
digitalWrite(DIR, HIGH);
digitalWrite(ENA, HIGH);
digitalWrite(PUL, LOW);
delayMicroseconds(200);
}
{
if (valACW == LOW) { //when anticlockwise temporary switch is pressed
digitalWrite(DIR, HIGH);
digitalWrite(ENA, HIGH);
digitalWrite(PUL, HIGH);
delayMicroseconds(200);
}
else
{
digitalWrite(DIR, HIGH);
digitalWrite(ENA, HIGH);
digitalWrite(PUL, LOW);
delayMicroseconds(200);
}
}
}