Ứng dụng: Mỗi khi động cơ bước di chuyển chạm vào công tắc hành trình thì động cơ đảo chiều
// Run a A4998 Stepstick from an Arduino UNO.
int en = 8 ;
int dirPinX = 5 ;
int stepPinX = 2 ;
int endPinX = 9;
bool dirX = LOW;
int lastEndX = 1;
void setup()
{
Serial.begin(9600);
pinMode(en,OUTPUT); // Enable
pinMode(stepPinX,OUTPUT); // Step
pinMode(dirPinX,OUTPUT); // Dir
pinMode(endPinX,INPUT_PULLUP);
digitalWrite(en,LOW); // Set Enable low
digitalWrite(dirPinX,dirX);
}
void loop() {
Serial.println(digitalRead(endPinX));
if (digitalRead(endPinX)!= lastEndX){
if(digitalRead(endPinX)==0){
lastEndX = 0;
dirX = !dirX;
digitalWrite(dirPinX,dirX);
} else {
lastEndX = 1;
}
}
digitalWrite(stepPinX,HIGH);
delay(1);
digitalWrite(stepPinX,LOW);
delay(1);
}
Cách 2: Dùng biến đếm
#include <Arduino.h>
int bandau;
int hientai;
int button = 9;
int dem;
int dirPinX = 5;
int stepPinX=2;
int dirX =LOW;
void setup() {
Serial.begin(9600);
pinMode(button, INPUT_PULLUP);
pinMode(dirPinX, OUTPUT);
pinMode(stepPinX, OUTPUT);
}
void loop() {
//dirX = digitalRead(dirPinX);
hientai=digitalRead(button);
if(hientai != bandau)
{
if (hientai == 0)
{
dem+=1;
}
bandau=hientai; // Đảo trạng thái của nút nhấn lưu lại cho lần kiểm tra tiếp theo
}
if( (dem%2) == 1 )
{
digitalWrite(dirPinX,HIGH);
digitalWrite(stepPinX, HIGH);
delay(1);
digitalWrite(stepPinX, LOW);
delay(1);
}
else
{
digitalWrite(dirPinX,LOW);
digitalWrite(stepPinX, HIGH);
delay(1);
digitalWrite(stepPinX, LOW);
delay(1);
}
}
fgfdgdg
0 nhận xét:
Đăng nhận xét