#include <IRremote.h>#define EN 8 //步进电机使能端,低电平有效
#define X_DIR 5 //X轴 步进电机方向控制
#define Y_DIR 6 //y轴 步进电机方向控制
#define Z_DIR 7 //z轴 步进电机方向控制
#define A_DIR 13 //A轴 步进电机方向控制
#define X_STP 2 //x轴 步进控制
#define Y_STP 3 //y轴 步进控制
#define Z_STP 4 //z轴 步进控制
#define A_STP 12 //z轴 步进控制int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;/*
//函数:step 功能:控制步进电机方向,步数。
//参数:dir 方向控制, dirPin对应步进电机的DIR引脚,stepperPin 对应步进电机的step引脚, steps 步进的步数
//无返回值
*/
void step(boolean dir, byte dirPin, byte stepperPin, unsigned long int steps,unsigned int TIME)
{
digitalWrite(dirPin,dir);//dir为true 则dirPin引脚输出高电平,dir为false则dirPin引脚输出低电平
//delay(50);
for (unsigned long int i = 0; i < steps; i++) //脉冲信号需<1kHz
{
digitalWrite(stepperPin, HIGH);//stepperPin引脚输出高电平
delayMicroseconds(TIME);//延时300us digitalWrite(stepperPin, LOW);//stepperPin引脚输出高电平
delayMicroseconds(TIME); judge(); }
}void setup()
{ //将步进电机用到的IO管脚设置成输出
Serial.begin(9600);//设置串口波特率为9600
irrecv.enableIRIn(); // Start the receiver
pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);
pinMode(A_DIR, OUTPUT); pinMode(A_STP, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);//使能
}void Stop()//停止转动
{
digitalWrite(X_STP, LOW);
digitalWrite(Y_STP, LOW);
digitalWrite(Z_STP, LOW);
digitalWrite(A_STP, LOW);
while(1)
{
judge();
}
}void loop()//死循环
{
judge();//指令判断并执行
}void judge()
{
while (irrecv.decode(&results))
{
switch(results.value)
{
case 0xFFC23D: Serial.println("STOP");Stop();
break;
case 0xFF02FD: Serial.println("X+");step(true, X_DIR, X_STP, 160000,300);
break;
case 0xFF5AA5: Serial.println("X++");step(true, X_DIR, X_STP, 160000,200);
break;
case 0xFF30CF: Serial.println("X+++");step(true, X_DIR, X_STP, 160000,100);
break;
case 0xFF22DD: Serial.println("X-");step(false, X_DIR, X_STP, 160000,300);
break;
case 0xFF10EF: Serial.println("X--");step(false, X_DIR, X_STP, 160000,200);
break;
case 0xFF7A85: Serial.println("X---");step(false, X_DIR, X_STP, 160000,100);
break;
case 0xFFA857: Serial.println("Y+ and A+");step(true, Y_DIR, Y_STP, 160000,300);
break;
case 0xFF18E7: Serial.println("Y++ and A++");step(true, Y_DIR, Y_STP, 160000,200);
break;
case 0xFF42BD: Serial.println("Y+++ and A+++");step(true, Y_DIR, Y_STP, 160000,100);
break;
case 0xFFE01F: Serial.println("Y- and A-");step(false, Y_DIR, Y_STP, 160000,300);
break;
case 0xFF4AB5: Serial.println("Y-- and A--");step(false, Y_DIR, Y_STP, 160000,200);
break;
case 0xFF52AD: Serial.println("Y--- and A---");step(false, Y_DIR, Y_STP, 160000,100);
break;
case 0xFFE21D: Serial.println("Z++");step(true, Z_DIR, Z_STP, 160000,150);
break;
case 0xFFA25D: Serial.println("Z--");step(false, Z_DIR, Z_STP, 160000,150);
break;
default :break;
}
irrecv.resume(); // Receive the next value
}
delay(100);
}
#define X_DIR 5 //X轴 步进电机方向控制
#define Y_DIR 6 //y轴 步进电机方向控制
#define Z_DIR 7 //z轴 步进电机方向控制
#define A_DIR 13 //A轴 步进电机方向控制
#define X_STP 2 //x轴 步进控制
#define Y_STP 3 //y轴 步进控制
#define Z_STP 4 //z轴 步进控制
#define A_STP 12 //z轴 步进控制int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;/*
//函数:step 功能:控制步进电机方向,步数。
//参数:dir 方向控制, dirPin对应步进电机的DIR引脚,stepperPin 对应步进电机的step引脚, steps 步进的步数
//无返回值
*/
void step(boolean dir, byte dirPin, byte stepperPin, unsigned long int steps,unsigned int TIME)
{
digitalWrite(dirPin,dir);//dir为true 则dirPin引脚输出高电平,dir为false则dirPin引脚输出低电平
//delay(50);
for (unsigned long int i = 0; i < steps; i++) //脉冲信号需<1kHz
{
digitalWrite(stepperPin, HIGH);//stepperPin引脚输出高电平
delayMicroseconds(TIME);//延时300us digitalWrite(stepperPin, LOW);//stepperPin引脚输出高电平
delayMicroseconds(TIME); judge(); }
}void setup()
{ //将步进电机用到的IO管脚设置成输出
Serial.begin(9600);//设置串口波特率为9600
irrecv.enableIRIn(); // Start the receiver
pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);
pinMode(A_DIR, OUTPUT); pinMode(A_STP, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);//使能
}void Stop()//停止转动
{
digitalWrite(X_STP, LOW);
digitalWrite(Y_STP, LOW);
digitalWrite(Z_STP, LOW);
digitalWrite(A_STP, LOW);
while(1)
{
judge();
}
}void loop()//死循环
{
judge();//指令判断并执行
}void judge()
{
while (irrecv.decode(&results))
{
switch(results.value)
{
case 0xFFC23D: Serial.println("STOP");Stop();
break;
case 0xFF02FD: Serial.println("X+");step(true, X_DIR, X_STP, 160000,300);
break;
case 0xFF5AA5: Serial.println("X++");step(true, X_DIR, X_STP, 160000,200);
break;
case 0xFF30CF: Serial.println("X+++");step(true, X_DIR, X_STP, 160000,100);
break;
case 0xFF22DD: Serial.println("X-");step(false, X_DIR, X_STP, 160000,300);
break;
case 0xFF10EF: Serial.println("X--");step(false, X_DIR, X_STP, 160000,200);
break;
case 0xFF7A85: Serial.println("X---");step(false, X_DIR, X_STP, 160000,100);
break;
case 0xFFA857: Serial.println("Y+ and A+");step(true, Y_DIR, Y_STP, 160000,300);
break;
case 0xFF18E7: Serial.println("Y++ and A++");step(true, Y_DIR, Y_STP, 160000,200);
break;
case 0xFF42BD: Serial.println("Y+++ and A+++");step(true, Y_DIR, Y_STP, 160000,100);
break;
case 0xFFE01F: Serial.println("Y- and A-");step(false, Y_DIR, Y_STP, 160000,300);
break;
case 0xFF4AB5: Serial.println("Y-- and A--");step(false, Y_DIR, Y_STP, 160000,200);
break;
case 0xFF52AD: Serial.println("Y--- and A---");step(false, Y_DIR, Y_STP, 160000,100);
break;
case 0xFFE21D: Serial.println("Z++");step(true, Z_DIR, Z_STP, 160000,150);
break;
case 0xFFA25D: Serial.println("Z--");step(false, Z_DIR, Z_STP, 160000,150);
break;
default :break;
}
irrecv.resume(); // Receive the next value
}
delay(100);
}