#include <util/atomic.h> // 用于 demo 4: ATOMIC_BLOCK macro.
#define LEDPIN 13
#define INTERRUPTPIN 2
volatile byte ledStatus = HIGH; //此变量被中断使用,定义为挥发性变量
int x = 0;
void blink() {
ledStatus = HIGH;
}
#define MOTOR1_ENABLE 22
#define MOTOR1_STEP 1
#define MOTOR1_DIR 0
#define MOTOR2_ENABLE 5
#define MOTOR2_STEP 6
#define MOTOR2_DIR 7
/*----------------------------SETUP FUNCTION--------------------------*/
void setup()
{
pinMode(LEDPIN, OUTPUT);
pinMode(INTERRUPTPIN, INPUT_PULLUP);
digitalWrite(LEDPIN,LOW);
// demo 1 : 基本中断使用方法
attachInterrupt(digitalPinToInterrupt(INTERRUPTPIN),blink,FALLING);
// attachInterrupt(digitalPinToInterrupt(INTERRUPTPIN),blink,CHANGE);
pinMode(MOTOR1_ENABLE,OUTPUT); // ENABLE AS OUTPUT
pinMode(MOTOR1_DIR,OUTPUT); // DIRECTION AS OUTPUT
pinMode(MOTOR1_STEP,OUTPUT); // STEP AS OUTPUT
digitalWrite(MOTOR1_ENABLE,LOW); // SET ENABLE TO LOW
}
/*----------------------------LOOP FUNCTION--------------------------*/
void loop()
{
digitalWrite(LEDPIN,ledStatus);
if(ledStatus)
{
x++;
digitalWrite(MOTOR1_DIR,HIGH); // SET DIRECTION LOW FOR FORWARD ROTATION
if(x%2)
{
digitalWrite(MOTOR1_STEP,HIGH); // STEP HIGH
delay(1); // WAIT
}
else
{
digitalWrite(MOTOR1_STEP,LOW); // STEP LOW
delay(1); // WAIT
}
ledStatus = LOW;
}
}