Tự động hóa

Arduino thực hành: Đk động cơ bước bằng công tắc hành trình

Ứ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

About Mr. Facebook

0 nhận xét:

Đăng nhận xét